From 6476e5d2a36f7020bb40c5380c7f49b365ef21ba Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Mon, 19 Aug 2024 06:04:36 -0700 Subject: [PATCH 001/425] add farcaster frame url + webhook --- .../CreateContestManagerMetadata.command.ts | 3 +++ libs/model/src/models/contest_manager.ts | 1 + libs/schemas/src/commands/contest.schemas.ts | 10 +++++++ .../src/entities/contest-manager.schemas.ts | 1 + ...contest-manager-add-farcaster-frame-url.js | 26 +++++++++++++++++++ 5 files changed, 41 insertions(+) create mode 100644 packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js diff --git a/libs/model/src/contest/CreateContestManagerMetadata.command.ts b/libs/model/src/contest/CreateContestManagerMetadata.command.ts index 29bd0ba27fa..263874955c2 100644 --- a/libs/model/src/contest/CreateContestManagerMetadata.command.ts +++ b/libs/model/src/contest/CreateContestManagerMetadata.command.ts @@ -44,6 +44,8 @@ export function CreateContestManagerMetadata(): Command< })); } + const farcaster_frame_url = `/api/farcaster/${payload.contest_address}`; + const contestManager = await models.sequelize.transaction( async (transaction) => { const manager = await models.ContestManager.create( @@ -52,6 +54,7 @@ export function CreateContestManagerMetadata(): Command< community_id: id.toString(), created_at: new Date(), cancelled: false, + farcaster_frame_url, }, { transaction }, ); diff --git a/libs/model/src/models/contest_manager.ts b/libs/model/src/models/contest_manager.ts index fdd31ea0101..39ce5023db3 100644 --- a/libs/model/src/models/contest_manager.ts +++ b/libs/model/src/models/contest_manager.ts @@ -40,6 +40,7 @@ export default ( created_at: { type: Sequelize.DATE, allowNull: false }, cancelled: { type: Sequelize.BOOLEAN }, ended: { type: Sequelize.BOOLEAN }, + farcaster_frame_url: { type: Sequelize.STRING, allowNull: true }, }, { tableName: 'ContestManagers', diff --git a/libs/schemas/src/commands/contest.schemas.ts b/libs/schemas/src/commands/contest.schemas.ts index 32b773f89e3..bbc69798405 100644 --- a/libs/schemas/src/commands/contest.schemas.ts +++ b/libs/schemas/src/commands/contest.schemas.ts @@ -74,3 +74,13 @@ export const PerformContestRollovers = { input: z.object({ id: z.string() }), output: z.object({}), }; + +export const FarcasterCastReplyWebhook = { + input: z.object({ + id: z.string(), + root_hash: z.string(), + cast_hash: z.string(), + user_address: z.string(), + }), + output: z.object({}), +}; diff --git a/libs/schemas/src/entities/contest-manager.schemas.ts b/libs/schemas/src/entities/contest-manager.schemas.ts index 7c8e35fb7db..d5976873fe3 100644 --- a/libs/schemas/src/entities/contest-manager.schemas.ts +++ b/libs/schemas/src/entities/contest-manager.schemas.ts @@ -47,6 +47,7 @@ export const ContestManager = z ), topics: z.array(Topic).nullish(), contests: z.array(Contest).nullish(), + farcaster_frame_url: z.string().nullish(), }) .describe('On-Chain Contest Manager'); diff --git a/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js b/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js new file mode 100644 index 00000000000..4290af8eb6d --- /dev/null +++ b/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js @@ -0,0 +1,26 @@ +'use strict'; + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + return queryInterface.sequelize.transaction((transaction) => { + queryInterface.addColumn( + 'ContestManagers', + 'farcaster_frame_url', + { + type: Sequelize.STRING, + allowNull: true, + }, + { transaction }, + ); + }); + }, + + async down(queryInterface, Sequelize) { + return queryInterface.sequelize.transaction((transaction) => { + queryInterface.removeColumn('ContestManagers', 'farcaster_frame_url', { + transaction, + }); + }); + }, +}; From 7507fef33c91d1cf5c3ee542d212e635882fa604 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Mon, 19 Aug 2024 06:04:45 -0700 Subject: [PATCH 002/425] webhook wip --- libs/model/src/contest/FarcasterCastReplyWebhook.ts | 13 +++++++++++++ libs/model/src/contest/index.ts | 1 + 2 files changed, 14 insertions(+) create mode 100644 libs/model/src/contest/FarcasterCastReplyWebhook.ts diff --git a/libs/model/src/contest/FarcasterCastReplyWebhook.ts b/libs/model/src/contest/FarcasterCastReplyWebhook.ts new file mode 100644 index 00000000000..c1006e242ab --- /dev/null +++ b/libs/model/src/contest/FarcasterCastReplyWebhook.ts @@ -0,0 +1,13 @@ +import type { Command } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; + +export function FarcasterCastReplyWebhook(): Command< + typeof schemas.FarcasterCastReplyWebhook +> { + return { + ...schemas.FarcasterCastReplyWebhook, + secure: false, + auth: [], + body: async ({ payload }) => {}, + }; +} diff --git a/libs/model/src/contest/index.ts b/libs/model/src/contest/index.ts index 192f09d0644..38112de522b 100644 --- a/libs/model/src/contest/index.ts +++ b/libs/model/src/contest/index.ts @@ -1,6 +1,7 @@ export * from './CancelContestManagerMetadata.command'; export * from './Contests.projection'; export * from './CreateContestManagerMetadata.command'; +export * from './FarcasterCastReplyWebhook'; export * from './GetActiveContestManagers.query'; export * from './GetAllContests.query'; export * from './GetContestLog.query'; From d1568328777df483a553b00e5dadb1a79c5d562e Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Tue, 20 Aug 2024 07:43:16 -0700 Subject: [PATCH 003/425] wire up farcaster webhook wip --- libs/core/src/integration/events.schemas.ts | 3 ++ libs/core/src/integration/events.ts | 7 ++++ libs/core/src/integration/outbox.schema.ts | 6 +++ .../src/contest/FarcasterCastReplyWebhook.ts | 13 ------ libs/model/src/contest/FarcasterWebhook.ts | 25 ++++++++++++ libs/model/src/contest/index.ts | 2 +- libs/schemas/src/commands/contest.schemas.ts | 11 ++--- .../src/entities/contest-manager.schemas.ts | 40 +++++++++++++++++++ packages/commonwealth/server/api/contest.ts | 1 + ...contest-manager-add-farcaster-frame-url.js | 19 ++------- 10 files changed, 91 insertions(+), 36 deletions(-) delete mode 100644 libs/model/src/contest/FarcasterCastReplyWebhook.ts create mode 100644 libs/model/src/contest/FarcasterWebhook.ts diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index 73fe8980e1f..65d23520012 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -1,5 +1,6 @@ import { Comment, + FarcasterWebhookEvent, Reaction, SubscriptionPreference, Thread, @@ -232,3 +233,5 @@ export const SubscriptionPreferencesUpdated = SubscriptionPreference.partial({ created_at: true, updated_at: true, }).merge(SubscriptionPreference.pick({ id: true, user_id: true })); + +export const FarcasterCastCreated = FarcasterWebhookEvent; diff --git a/libs/core/src/integration/events.ts b/libs/core/src/integration/events.ts index 8984d9a2b32..81838df0010 100644 --- a/libs/core/src/integration/events.ts +++ b/libs/core/src/integration/events.ts @@ -26,6 +26,9 @@ export enum EventNames { // Preferences SubscriptionPreferencesUpdated = 'SubscriptionPreferencesUpdated', + + // Farcaster + FarcasterCastCreated = 'FarcasterCastCreated', } export type EventPairs = @@ -76,4 +79,8 @@ export type EventPairs = | { event_name: EventNames.SubscriptionPreferencesUpdated; event_payload: z.infer; + } + | { + event_name: EventNames.FarcasterCastCreated; + event_payload: z.infer; }; diff --git a/libs/core/src/integration/outbox.schema.ts b/libs/core/src/integration/outbox.schema.ts index 1d221da3e30..9ebdbf7b1fa 100644 --- a/libs/core/src/integration/outbox.schema.ts +++ b/libs/core/src/integration/outbox.schema.ts @@ -101,4 +101,10 @@ export const Outbox = z.union([ event_payload: events.SubscriptionPreferencesUpdated, }) .merge(BaseOutboxProperties), + z + .object({ + event_name: z.literal(EventNames.FarcasterCastCreated), + event_payload: events.FarcasterCastCreated, + }) + .merge(BaseOutboxProperties), ]); diff --git a/libs/model/src/contest/FarcasterCastReplyWebhook.ts b/libs/model/src/contest/FarcasterCastReplyWebhook.ts deleted file mode 100644 index c1006e242ab..00000000000 --- a/libs/model/src/contest/FarcasterCastReplyWebhook.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Command } from '@hicommonwealth/core'; -import * as schemas from '@hicommonwealth/schemas'; - -export function FarcasterCastReplyWebhook(): Command< - typeof schemas.FarcasterCastReplyWebhook -> { - return { - ...schemas.FarcasterCastReplyWebhook, - secure: false, - auth: [], - body: async ({ payload }) => {}, - }; -} diff --git a/libs/model/src/contest/FarcasterWebhook.ts b/libs/model/src/contest/FarcasterWebhook.ts new file mode 100644 index 00000000000..845d024ea95 --- /dev/null +++ b/libs/model/src/contest/FarcasterWebhook.ts @@ -0,0 +1,25 @@ +import { EventNames, type Command } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { models } from '../database'; +import { emitEvent } from '../utils'; + +// This webhook processes the "cast.created" event from Neynar: +// https://docs.neynar.com/docs/how-to-setup-webhooks-from-the-dashboard +export function FarcasterWebhook(): Command { + return { + ...schemas.FarcasterWebhook, + secure: false, + // TODO: add middleware to validate webhook payload: + // https://docs.neynar.com/docs/how-to-verify-the-incoming-webhooks-using-signatures + auth: [], + body: async ({ payload }) => { + const { id, ...rest } = payload; // omit id from outbox payload + return emitEvent(models.Outbox, [ + { + event_name: EventNames.FarcasterCastCreated, + event_payload: rest, + }, + ]); + }, + }; +} diff --git a/libs/model/src/contest/index.ts b/libs/model/src/contest/index.ts index 38112de522b..f5808fc8867 100644 --- a/libs/model/src/contest/index.ts +++ b/libs/model/src/contest/index.ts @@ -1,7 +1,7 @@ export * from './CancelContestManagerMetadata.command'; export * from './Contests.projection'; export * from './CreateContestManagerMetadata.command'; -export * from './FarcasterCastReplyWebhook'; +export * from './FarcasterWebhook'; export * from './GetActiveContestManagers.query'; export * from './GetAllContests.query'; export * from './GetContestLog.query'; diff --git a/libs/schemas/src/commands/contest.schemas.ts b/libs/schemas/src/commands/contest.schemas.ts index bbc69798405..01089c3287b 100644 --- a/libs/schemas/src/commands/contest.schemas.ts +++ b/libs/schemas/src/commands/contest.schemas.ts @@ -1,6 +1,6 @@ import { commonProtocol } from '@hicommonwealth/shared'; import z from 'zod'; -import { ContestManager } from '../entities'; +import { ContestManager, FarcasterWebhookEvent } from '../entities'; import { PG_INT } from '../utils'; export const CreateContestManagerMetadata = { @@ -75,12 +75,9 @@ export const PerformContestRollovers = { output: z.object({}), }; -export const FarcasterCastReplyWebhook = { - input: z.object({ - id: z.string(), - root_hash: z.string(), - cast_hash: z.string(), - user_address: z.string(), +export const FarcasterWebhook = { + input: FarcasterWebhookEvent.extend({ + id: z.string(), // TODO: remove this since it's not relevant to webhooks }), output: z.object({}), }; diff --git a/libs/schemas/src/entities/contest-manager.schemas.ts b/libs/schemas/src/entities/contest-manager.schemas.ts index d5976873fe3..c4ea1147232 100644 --- a/libs/schemas/src/entities/contest-manager.schemas.ts +++ b/libs/schemas/src/entities/contest-manager.schemas.ts @@ -58,3 +58,43 @@ export const ContestTopic = z created_at: z.coerce.date(), }) .describe('X-Ref to topics in contest'); + +export const FarcasterWebhookEvent = z.object({ + created_at: z.number(), + type: z.literal('cast.created'), + data: z.object({ + object: z.string(), + hash: z.string(), + thread_hash: z.string(), + parent_hash: z.string().nullable(), + parent_url: z.string(), + root_parent_url: z.string(), + parent_author: z.object({ + fid: z.number().nullable(), + }), + author: z.object({ + object: z.string(), + fid: z.number(), + custody_address: z.string(), + username: z.string(), + display_name: z.string(), + pfp_url: z.string(), + profile: z.any().nullish(), // TODO: Adjust this based on the actual structure of the "profile" object + follower_count: z.number(), + following_count: z.number(), + verifications: z.array(z.string()), + active_status: z.string(), + }), + text: z.string(), + timestamp: z.string(), + embeds: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "embeds" array + reactions: z.object({ + likes: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "likes" array + recasts: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "recasts" array + }), + replies: z.object({ + count: z.number(), + }), + mentioned_profiles: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "mentioned_profiles" array + }), +}); diff --git a/packages/commonwealth/server/api/contest.ts b/packages/commonwealth/server/api/contest.ts index aafdab17f56..3c466f2beb2 100644 --- a/packages/commonwealth/server/api/contest.ts +++ b/packages/commonwealth/server/api/contest.ts @@ -16,4 +16,5 @@ export const trpcRouter = trpc.router({ trpc.Tag.Community, ), getContestLog: trpc.query(Contest.GetContestLog, trpc.Tag.Community), + farcasterWebhook: trpc.command(Contest.FarcasterWebhook, trpc.Tag.Community), // TODO: Use different tag? }); diff --git a/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js b/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js index 4290af8eb6d..1c6b1b6f493 100644 --- a/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js +++ b/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js @@ -3,24 +3,13 @@ /** @type {import('sequelize-cli').Migration} */ module.exports = { async up(queryInterface, Sequelize) { - return queryInterface.sequelize.transaction((transaction) => { - queryInterface.addColumn( - 'ContestManagers', - 'farcaster_frame_url', - { - type: Sequelize.STRING, - allowNull: true, - }, - { transaction }, - ); + queryInterface.addColumn('ContestManagers', 'farcaster_frame_url', { + type: Sequelize.STRING, + allowNull: true, }); }, async down(queryInterface, Sequelize) { - return queryInterface.sequelize.transaction((transaction) => { - queryInterface.removeColumn('ContestManagers', 'farcaster_frame_url', { - transaction, - }); - }); + queryInterface.removeColumn('ContestManagers', 'farcaster_frame_url'); }, }; From 3cad82889aaaffbe0fd09fe707f2ba763b8d226a Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Tue, 20 Aug 2024 09:53:51 -0700 Subject: [PATCH 004/425] wip --- libs/core/src/integration/events.schemas.ts | 2 +- libs/model/src/policies/ContestWorker.policy.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index 65d23520012..8e1863cd1c9 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -234,4 +234,4 @@ export const SubscriptionPreferencesUpdated = SubscriptionPreference.partial({ updated_at: true, }).merge(SubscriptionPreference.pick({ id: true, user_id: true })); -export const FarcasterCastCreated = FarcasterWebhookEvent; +export const FarcasterCastCreated = EventMetadata.merge(FarcasterWebhookEvent); diff --git a/libs/model/src/policies/ContestWorker.policy.ts b/libs/model/src/policies/ContestWorker.policy.ts index d5d7a0b49e2..8522af1a9a4 100644 --- a/libs/model/src/policies/ContestWorker.policy.ts +++ b/libs/model/src/policies/ContestWorker.policy.ts @@ -10,6 +10,7 @@ const log = logger(import.meta); const inputs = { ThreadCreated: events.ThreadCreated, ThreadUpvoted: events.ThreadUpvoted, + FarcasterCastCreated: events.FarcasterCastCreated, }; export function ContestWorker(): Policy { @@ -209,6 +210,9 @@ export function ContestWorker(): Policy { ); } }, + FarcasterCastCreated: async ({ payload }) => { + // map farcaster event to ThreadCreated + }, }, }; } From c5401253afa20bcbe5b5b7300bc61e0808f796d8 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 22 Aug 2024 11:52:11 -0700 Subject: [PATCH 005/425] add hashes array to ContestManager + make CWP source agnostic --- libs/core/src/integration/events.schemas.ts | 5 ++- libs/model/src/models/reaction.ts | 2 +- libs/model/src/models/thread.ts | 7 +++- .../src/policies/ContestWorker.policy.ts | 33 ++++----------- ...contest-manager-add-farcaster-frame-url.js | 40 +++++++++++++++++-- 5 files changed, 55 insertions(+), 32 deletions(-) diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index 8e1863cd1c9..c9651ea84aa 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -20,10 +20,13 @@ import { import { EventMetadata } from './util.schemas'; export const ThreadCreated = Thread.extend({ + address: z.string(), contestManagers: z.array(z.object({ contest_address: z.string() })).nullish(), }); export const ThreadUpvoted = Reaction.extend({ - community_id: z.string(), + communityId: z.string(), + topicId: z.number().optional(), + address: z.string(), contestManagers: z.array(z.object({ contest_address: z.string() })).nullish(), }); export const CommentCreated = Comment.extend({ diff --git a/libs/model/src/models/reaction.ts b/libs/model/src/models/reaction.ts index b6e3c53c96a..cbe9583f550 100644 --- a/libs/model/src/models/reaction.ts +++ b/libs/model/src/models/reaction.ts @@ -72,7 +72,7 @@ export default ( event_payload: { ...reaction.toJSON(), reaction: 'like', - community_id: thread.community_id, + communityId: thread.community_id, contestManagers, }, }, diff --git a/libs/model/src/models/thread.ts b/libs/model/src/models/thread.ts index 7aae3173eab..dcb92876893 100644 --- a/libs/model/src/models/thread.ts +++ b/libs/model/src/models/thread.ts @@ -144,7 +144,7 @@ export default ( thread: ThreadInstance, options: Sequelize.CreateOptions, ) => { - const { Community, Outbox } = sequelize.models; + const { Community, Outbox, Address } = sequelize.models; await Community.increment('thread_count', { by: 1, @@ -159,6 +159,10 @@ export default ( ? [] : await getThreadContestManagers(sequelize, topic_id, community_id); + const address = (await Address.findByPk( + thread.address_id, + )) as AddressAttributes | null; + await emitEvent( Outbox, [ @@ -166,6 +170,7 @@ export default ( event_name: EventNames.ThreadCreated, event_payload: { ...thread.get({ plain: true }), + address: address!.address, contestManagers, }, }, diff --git a/libs/model/src/policies/ContestWorker.policy.ts b/libs/model/src/policies/ContestWorker.policy.ts index 8522af1a9a4..f593479ac65 100644 --- a/libs/model/src/policies/ContestWorker.policy.ts +++ b/libs/model/src/policies/ContestWorker.policy.ts @@ -1,7 +1,6 @@ import { Actor, events, logger, Policy } from '@hicommonwealth/core'; import { QueryTypes } from 'sequelize'; -import { config, Contest } from '..'; -import { models } from '../database'; +import { config, Contest, models } from '..'; import { contestHelper } from '../services/commonProtocol'; import { buildThreadContentUrl } from '../utils'; @@ -10,7 +9,6 @@ const log = logger(import.meta); const inputs = { ThreadCreated: events.ThreadCreated, ThreadUpvoted: events.ThreadUpvoted, - FarcasterCastCreated: events.FarcasterCastCreated, }; export function ContestWorker(): Policy { @@ -19,13 +17,10 @@ export function ContestWorker(): Policy { body: { ThreadCreated: async ({ payload }) => { if (!payload.topic_id) { - log.warn('ThreadCreated: payload does not contain topic_id'); + log.warn('ThreadCreated: payload does not contain topic ID'); return; } - - const { address: userAddress } = (await models.Address.findByPk( - payload!.address_id, - ))!; + const { address: userAddress } = payload; const contentUrl = buildThreadContentUrl( payload.community_id!, @@ -99,21 +94,12 @@ export function ContestWorker(): Policy { } }, ThreadUpvoted: async ({ payload }) => { - const { community_id, topic_id } = (await models.Thread.findByPk( - payload.thread_id!, - { - attributes: ['community_id', 'topic_id'], - }, - ))!; - if (!topic_id) { - log.warn('ThreadUpvoted: thread does not contain topic_id'); + const { communityId, topicId, address: userAddress } = payload; + if (!topicId) { + log.warn('ThreadUpvoted: thread does not contain topic ID'); return; } - const { address: userAddress } = (await models.Address.findByPk( - payload!.address_id, - ))!; - const activeContestManagersWithoutVote = await models.sequelize.query<{ url: string; private_url: string; @@ -165,8 +151,8 @@ export function ContestWorker(): Policy { replacements: { thread_id: payload.thread_id!, actor_address: userAddress, - topic_id: topic_id, - community_id, + topic_id: topicId, + community_id: communityId, }, }, ); @@ -210,9 +196,6 @@ export function ContestWorker(): Policy { ); } }, - FarcasterCastCreated: async ({ payload }) => { - // map farcaster event to ThreadCreated - }, }, }; } diff --git a/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js b/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js index 1c6b1b6f493..9f7de604810 100644 --- a/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js +++ b/packages/commonwealth/server/migrations/20240819112302-contest-manager-add-farcaster-frame-url.js @@ -3,13 +3,45 @@ /** @type {import('sequelize-cli').Migration} */ module.exports = { async up(queryInterface, Sequelize) { - queryInterface.addColumn('ContestManagers', 'farcaster_frame_url', { - type: Sequelize.STRING, - allowNull: true, + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.addColumn( + 'ContestManagers', + 'farcaster_frame_url', + { + type: Sequelize.STRING, + allowNull: true, + }, + { transaction }, + ); + + await queryInterface.addColumn( + 'ContestManagers', + 'farcaster_frame_hashes', + { + type: Sequelize.ARRAY(Sequelize.STRING), + allowNull: true, + }, + { transaction }, + ); }); }, async down(queryInterface, Sequelize) { - queryInterface.removeColumn('ContestManagers', 'farcaster_frame_url'); + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.removeColumn( + 'ContestManagers', + 'farcaster_frame_url', + { + transaction, + }, + ); + await queryInterface.removeColumn( + 'ContestManagers', + 'farcaster_frame_hashes', + { + transaction, + }, + ); + }); }, }; From 072ad146e4487a8eb1bae0118e50a5c768116c8f Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 22 Aug 2024 14:23:08 -0700 Subject: [PATCH 006/425] farcaster webhooks implementation wip --- libs/core/src/integration/events.schemas.ts | 3 - libs/core/src/integration/events.ts | 7 --- libs/core/src/integration/outbox.schema.ts | 6 -- .../src/contest/FarcasterAction.command.ts | 52 ++++++++++++++++ .../src/contest/FarcasterAction.query.ts | 11 ++++ .../FarcasterCastCreatedWebhook.command.ts | 33 ++++++++++ ...arcasterReplyCastCreatedWebhook.command.ts | 60 +++++++++++++++++++ libs/model/src/contest/FarcasterWebhook.ts | 25 -------- libs/model/src/contest/index.ts | 4 +- libs/model/src/models/contest_manager.ts | 4 ++ libs/schemas/src/commands/contest.schemas.ts | 59 ++++++++++++++++-- .../src/entities/contest-manager.schemas.ts | 41 +------------ libs/schemas/src/queries/contests.schemas.ts | 7 +++ packages/commonwealth/server/api/contest.ts | 5 +- .../server/api/internal-router.ts | 47 ++++++++++++++- 15 files changed, 276 insertions(+), 88 deletions(-) create mode 100644 libs/model/src/contest/FarcasterAction.command.ts create mode 100644 libs/model/src/contest/FarcasterAction.query.ts create mode 100644 libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts create mode 100644 libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts delete mode 100644 libs/model/src/contest/FarcasterWebhook.ts diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index c9651ea84aa..949de466b7c 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -1,6 +1,5 @@ import { Comment, - FarcasterWebhookEvent, Reaction, SubscriptionPreference, Thread, @@ -236,5 +235,3 @@ export const SubscriptionPreferencesUpdated = SubscriptionPreference.partial({ created_at: true, updated_at: true, }).merge(SubscriptionPreference.pick({ id: true, user_id: true })); - -export const FarcasterCastCreated = EventMetadata.merge(FarcasterWebhookEvent); diff --git a/libs/core/src/integration/events.ts b/libs/core/src/integration/events.ts index 81838df0010..8984d9a2b32 100644 --- a/libs/core/src/integration/events.ts +++ b/libs/core/src/integration/events.ts @@ -26,9 +26,6 @@ export enum EventNames { // Preferences SubscriptionPreferencesUpdated = 'SubscriptionPreferencesUpdated', - - // Farcaster - FarcasterCastCreated = 'FarcasterCastCreated', } export type EventPairs = @@ -79,8 +76,4 @@ export type EventPairs = | { event_name: EventNames.SubscriptionPreferencesUpdated; event_payload: z.infer; - } - | { - event_name: EventNames.FarcasterCastCreated; - event_payload: z.infer; }; diff --git a/libs/core/src/integration/outbox.schema.ts b/libs/core/src/integration/outbox.schema.ts index 9ebdbf7b1fa..1d221da3e30 100644 --- a/libs/core/src/integration/outbox.schema.ts +++ b/libs/core/src/integration/outbox.schema.ts @@ -101,10 +101,4 @@ export const Outbox = z.union([ event_payload: events.SubscriptionPreferencesUpdated, }) .merge(BaseOutboxProperties), - z - .object({ - event_name: z.literal(EventNames.FarcasterCastCreated), - event_payload: events.FarcasterCastCreated, - }) - .merge(BaseOutboxProperties), ]); diff --git a/libs/model/src/contest/FarcasterAction.command.ts b/libs/model/src/contest/FarcasterAction.command.ts new file mode 100644 index 00000000000..6d74a826423 --- /dev/null +++ b/libs/model/src/contest/FarcasterAction.command.ts @@ -0,0 +1,52 @@ +import { EventNames, InvalidState, type Command } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { models } from '../database'; +import { emitEvent } from '../utils'; + +// This webhook processes the cast action event: +// https://docs.farcaster.xyz/reference/actions/spec#actions-specification +export function FarcasterActionWebhook(): Command< + typeof schemas.FarcasterCastCreatedWebhook +> { + return { + ...schemas.FarcasterCastCreatedWebhook, + auth: [], + body: async ({ payload }) => { + // map FC Action to CW ThreadUpvoted + const contestManager = await models.ContestManager.findOne({ + where: { + farcaster_frame_hashes: payload.cast_id.hash, + }, + }); + if (!contestManager) { + throw new InvalidState( + `contest manager not found for frame: ${payload.cast_id.hash}`, + ); + } + // assuming farcaster contest only has 1 topic + const contestTopic = await models.ContestTopic.findOne({ + where: { + contest_address: contestManager.contest_address, + }, + }); + if (!contestTopic) { + throw new InvalidState( + `contest manager ${contestManager.contest_address} not associated with any topics`, + ); + } + await emitEvent(models.Outbox, [ + { + event_name: EventNames.ThreadUpvoted, + event_payload: { + address: payload.address, + address_id: 0, + reaction: 'like', + communityId: contestManager.community_id, + topicId: contestTopic.topic_id, + contestManagers: [contestManager.toJSON()], + }, + }, + ]); + }, + }; +} diff --git a/libs/model/src/contest/FarcasterAction.query.ts b/libs/model/src/contest/FarcasterAction.query.ts new file mode 100644 index 00000000000..77c30c6fbf6 --- /dev/null +++ b/libs/model/src/contest/FarcasterAction.query.ts @@ -0,0 +1,11 @@ +import { Query } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; + +export function FarcasterAction(): Query { + return { + ...schemas.FarcasterAction, + auth: [], + secure: false, + body: async ({ payload }) => {}, + }; +} diff --git a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts new file mode 100644 index 00000000000..43b8ba4cfd6 --- /dev/null +++ b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts @@ -0,0 +1,33 @@ +import { type Command } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { models } from '../database'; + +// This webhook processes the "cast.created" event from Neynar: +// https://docs.neynar.com/docs/how-to-setup-webhooks-from-the-dashboard +export function FarcasterCastCreatedWebhook(): Command< + typeof schemas.FarcasterCastCreatedWebhook +> { + return { + ...schemas.FarcasterCastCreatedWebhook, + auth: [], + body: async ({ payload }) => { + // append frame hash to Contest Manager + await models.sequelize.query( + ` + UPDATE "ContestManagers" + SET "farcaster_frame_hashes" = COALESCE( + array_append("farcaster_frame_hashes", :newHash), + ARRAY[:newHash] + ) + WHERE "farcaster_frame_url" = :farcasterFrameUrl + `, + { + replacements: { + newHash: payload.data.hash, + farcasterFrameUrl: payload.data.root_parent_url, + }, + }, + ); + }, + }; +} diff --git a/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts b/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts new file mode 100644 index 00000000000..8ba5bc54539 --- /dev/null +++ b/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts @@ -0,0 +1,60 @@ +import { EventNames, InvalidState, type Command } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { models } from '../database'; +import { emitEvent } from '../utils'; + +// This webhook processes the "cast.created" event +// from a programmatic Neynar webhook for REPLIES to a cast: +// https://docs.neynar.com/docs/how-to-setup-webhooks-from-the-dashboard +export function FarcasterReplyCastCreatedWebhook(): Command< + typeof schemas.FarcasterCastCreatedWebhook +> { + return { + ...schemas.FarcasterCastCreatedWebhook, + auth: [], + body: async ({ payload }) => { + // map FC CastCreated to CW ThreadCreated + const contestManager = await models.ContestManager.findOne({ + where: { + farcaster_frame_url: payload.data.root_parent_url, + }, + }); + if (!contestManager) { + throw new InvalidState( + `contest manager not found for frame: ${payload.data.root_parent_url}`, + ); + } + // assuming farcaster contest only has 1 topic + const contestTopic = await models.ContestTopic.findOne({ + where: { + contest_address: contestManager.contest_address, + }, + }); + if (!contestTopic) { + throw new InvalidState( + `contest manager ${contestManager.contest_address} not associated with any topics`, + ); + } + await emitEvent(models.Outbox, [ + { + event_name: EventNames.ThreadCreated, + event_payload: { + address: payload.data.author.custody_address, + address_id: 0, + community_id: contestManager.community_id, + topic_id: contestTopic.topic_id, + title: 'Farcaster Contest Reply', + kind: 'discussion', + stage: 'active', + view_count: 0, + reaction_count: 0, + reaction_weights_sum: 0, + comment_count: 0, + max_notif_id: 0, + contestManagers: [contestManager.toJSON()], + }, + }, + ]); + }, + }; +} diff --git a/libs/model/src/contest/FarcasterWebhook.ts b/libs/model/src/contest/FarcasterWebhook.ts deleted file mode 100644 index 845d024ea95..00000000000 --- a/libs/model/src/contest/FarcasterWebhook.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { EventNames, type Command } from '@hicommonwealth/core'; -import * as schemas from '@hicommonwealth/schemas'; -import { models } from '../database'; -import { emitEvent } from '../utils'; - -// This webhook processes the "cast.created" event from Neynar: -// https://docs.neynar.com/docs/how-to-setup-webhooks-from-the-dashboard -export function FarcasterWebhook(): Command { - return { - ...schemas.FarcasterWebhook, - secure: false, - // TODO: add middleware to validate webhook payload: - // https://docs.neynar.com/docs/how-to-verify-the-incoming-webhooks-using-signatures - auth: [], - body: async ({ payload }) => { - const { id, ...rest } = payload; // omit id from outbox payload - return emitEvent(models.Outbox, [ - { - event_name: EventNames.FarcasterCastCreated, - event_payload: rest, - }, - ]); - }, - }; -} diff --git a/libs/model/src/contest/index.ts b/libs/model/src/contest/index.ts index f5808fc8867..89d0f5b2a04 100644 --- a/libs/model/src/contest/index.ts +++ b/libs/model/src/contest/index.ts @@ -1,7 +1,9 @@ export * from './CancelContestManagerMetadata.command'; export * from './Contests.projection'; export * from './CreateContestManagerMetadata.command'; -export * from './FarcasterWebhook'; +export * from './FarcasterAction.command'; +export * from './FarcasterCastCreatedWebhook.command'; +export * from './FarcasterReplyCastCreatedWebhook.command'; export * from './GetActiveContestManagers.query'; export * from './GetAllContests.query'; export * from './GetContestLog.query'; diff --git a/libs/model/src/models/contest_manager.ts b/libs/model/src/models/contest_manager.ts index 39ce5023db3..910372d8e96 100644 --- a/libs/model/src/models/contest_manager.ts +++ b/libs/model/src/models/contest_manager.ts @@ -41,6 +41,10 @@ export default ( cancelled: { type: Sequelize.BOOLEAN }, ended: { type: Sequelize.BOOLEAN }, farcaster_frame_url: { type: Sequelize.STRING, allowNull: true }, + farcaster_frame_hashes: { + type: Sequelize.ARRAY(Sequelize.STRING), + allowNull: true, + }, }, { tableName: 'ContestManagers', diff --git a/libs/schemas/src/commands/contest.schemas.ts b/libs/schemas/src/commands/contest.schemas.ts index 01089c3287b..26d536944ef 100644 --- a/libs/schemas/src/commands/contest.schemas.ts +++ b/libs/schemas/src/commands/contest.schemas.ts @@ -1,6 +1,6 @@ import { commonProtocol } from '@hicommonwealth/shared'; import z from 'zod'; -import { ContestManager, FarcasterWebhookEvent } from '../entities'; +import { ContestManager } from '../entities'; import { PG_INT } from '../utils'; export const CreateContestManagerMetadata = { @@ -75,9 +75,60 @@ export const PerformContestRollovers = { output: z.object({}), }; -export const FarcasterWebhook = { - input: FarcasterWebhookEvent.extend({ - id: z.string(), // TODO: remove this since it's not relevant to webhooks +export const FarcasterCastCreatedWebhook = { + input: z.object({ + id: z.string(), // TODO: remove this + address: z.string(), + frame_url: z.string(), + button_index: z.number(), + cast_id: z.object({ + fid: z.number(), + hash: z.string(), + }), + }), + output: z.object({}), +}; + +export const FarcasterActionWebhook = { + input: z.object({ + id: z.string(), // TODO: remove this + created_at: z.number(), + type: z.literal('cast.created'), + data: z.object({ + object: z.string(), + hash: z.string(), + thread_hash: z.string(), + parent_hash: z.string().nullable(), + parent_url: z.string(), + root_parent_url: z.string(), + parent_author: z.object({ + fid: z.number().nullable(), + }), + author: z.object({ + object: z.string(), + fid: z.number(), + custody_address: z.string(), + username: z.string(), + display_name: z.string(), + pfp_url: z.string(), + profile: z.any().nullish(), // TODO: Adjust this based on the actual structure of the "profile" object + follower_count: z.number(), + following_count: z.number(), + verifications: z.array(z.string()), + active_status: z.string(), + }), + text: z.string(), + timestamp: z.string(), + embeds: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "embeds" array + reactions: z.object({ + likes: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "likes" array + recasts: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "recasts" array + }), + replies: z.object({ + count: z.number(), + }), + mentioned_profiles: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "mentioned_profiles" array + }), }), output: z.object({}), }; diff --git a/libs/schemas/src/entities/contest-manager.schemas.ts b/libs/schemas/src/entities/contest-manager.schemas.ts index c4ea1147232..e923097edeb 100644 --- a/libs/schemas/src/entities/contest-manager.schemas.ts +++ b/libs/schemas/src/entities/contest-manager.schemas.ts @@ -48,6 +48,7 @@ export const ContestManager = z topics: z.array(Topic).nullish(), contests: z.array(Contest).nullish(), farcaster_frame_url: z.string().nullish(), + farcaster_frame_hashes: z.array(z.string()).nullish(), }) .describe('On-Chain Contest Manager'); @@ -58,43 +59,3 @@ export const ContestTopic = z created_at: z.coerce.date(), }) .describe('X-Ref to topics in contest'); - -export const FarcasterWebhookEvent = z.object({ - created_at: z.number(), - type: z.literal('cast.created'), - data: z.object({ - object: z.string(), - hash: z.string(), - thread_hash: z.string(), - parent_hash: z.string().nullable(), - parent_url: z.string(), - root_parent_url: z.string(), - parent_author: z.object({ - fid: z.number().nullable(), - }), - author: z.object({ - object: z.string(), - fid: z.number(), - custody_address: z.string(), - username: z.string(), - display_name: z.string(), - pfp_url: z.string(), - profile: z.any().nullish(), // TODO: Adjust this based on the actual structure of the "profile" object - follower_count: z.number(), - following_count: z.number(), - verifications: z.array(z.string()), - active_status: z.string(), - }), - text: z.string(), - timestamp: z.string(), - embeds: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "embeds" array - reactions: z.object({ - likes: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "likes" array - recasts: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "recasts" array - }), - replies: z.object({ - count: z.number(), - }), - mentioned_profiles: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "mentioned_profiles" array - }), -}); diff --git a/libs/schemas/src/queries/contests.schemas.ts b/libs/schemas/src/queries/contests.schemas.ts index 53ef4e163b2..b983dffd4e9 100644 --- a/libs/schemas/src/queries/contests.schemas.ts +++ b/libs/schemas/src/queries/contests.schemas.ts @@ -72,3 +72,10 @@ export const GetThreadContestManagers = { }), ), }; + +export const FarcasterAction = { + input: z.object({ + contest_address: z.string(), + }), + output: z.array(ContestLogEntry), +}; diff --git a/packages/commonwealth/server/api/contest.ts b/packages/commonwealth/server/api/contest.ts index 3c466f2beb2..3904a3c7a7e 100644 --- a/packages/commonwealth/server/api/contest.ts +++ b/packages/commonwealth/server/api/contest.ts @@ -16,5 +16,8 @@ export const trpcRouter = trpc.router({ trpc.Tag.Community, ), getContestLog: trpc.query(Contest.GetContestLog, trpc.Tag.Community), - farcasterWebhook: trpc.command(Contest.FarcasterWebhook, trpc.Tag.Community), // TODO: Use different tag? + farcasterWebhook: trpc.command( + Contest.FarcasterCastCreatedWebhook, + trpc.Tag.Community, + ), // TODO: Use different tag? }); diff --git a/packages/commonwealth/server/api/internal-router.ts b/packages/commonwealth/server/api/internal-router.ts index 13c58963bee..5561a53a919 100644 --- a/packages/commonwealth/server/api/internal-router.ts +++ b/packages/commonwealth/server/api/internal-router.ts @@ -1,5 +1,5 @@ import { express, trpc } from '@hicommonwealth/adapters'; -import { ChainEvents } from '@hicommonwealth/model'; +import { ChainEvents, Contest } from '@hicommonwealth/model'; import cors from 'cors'; import { Router, raw } from 'express'; import { config } from '../config'; @@ -53,6 +53,51 @@ router.post( express.command(ChainEvents.ChainEventCreated()), ); +router.post( + '/farcaster/CastCreated', + raw({ type: '*/*', limit: '10mb', inflate: true }), + (req, _, next) => { + // TODO: verify frame signature message + return next(); + }, + // parse body as JSON (native express.json middleware doesn't work here) + (req, _, next) => { + req.body = JSON.parse(req.body); + next(); + }, + express.command(Contest.FarcasterCastCreatedWebhook()), +); + +router.post( + '/farcaster/ReplyCastCreated', + raw({ type: '*/*', limit: '10mb', inflate: true }), + (req, _, next) => { + // TODO: verify frame signature message + return next(); + }, + // parse body as JSON (native express.json middleware doesn't work here) + (req, _, next) => { + req.body = JSON.parse(req.body); + next(); + }, + express.command(Contest.FarcasterReplyCastCreatedWebhook()), +); + +router.post( + '/farcaster/action', + raw({ type: '*/*', limit: '10mb', inflate: true }), + (req, _, next) => { + // TODO: verify frame signature message + return next(); + }, + // parse body as JSON (native express.json middleware doesn't work here) + (req, _, next) => { + req.body = JSON.parse(req.body); + next(); + }, + express.command(Contest.FarcasterActionWebhook()), +); + if (config.NODE_ENV !== 'production') { router.use(cors()); trpc.useOAS(router, trpcRouter, { From b08d375401247481f8e262b89831f7943f789802 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Tue, 27 Aug 2024 13:09:05 -0700 Subject: [PATCH 007/425] detect contest frame casts --- .../CreateContestManagerMetadata.command.ts | 2 +- .../farcaster/frames/contest/contestCard.tsx | 49 +++++++++++++++++-- .../commonwealth/server/farcaster/router.tsx | 4 +- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/libs/model/src/contest/CreateContestManagerMetadata.command.ts b/libs/model/src/contest/CreateContestManagerMetadata.command.ts index 263874955c2..46bf940d534 100644 --- a/libs/model/src/contest/CreateContestManagerMetadata.command.ts +++ b/libs/model/src/contest/CreateContestManagerMetadata.command.ts @@ -44,7 +44,7 @@ export function CreateContestManagerMetadata(): Command< })); } - const farcaster_frame_url = `/api/farcaster/${payload.contest_address}`; + const farcaster_frame_url = `/api/farcaster/contests/${payload.contest_address}`; const contestManager = await models.sequelize.transaction( async (transaction) => { diff --git a/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx b/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx index 07f8f91281e..ce1d7967caf 100644 --- a/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx +++ b/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx @@ -1,3 +1,4 @@ +import { models } from '@hicommonwealth/model'; import { Button } from 'frames.js/express'; import moment from 'moment'; import React from 'react'; @@ -30,7 +31,49 @@ const PrizeRow = ({ index, prize }: { index: number; prize: number }) => { ); }; -export const contestCard = frames(async () => { +export const contestCard = frames(async (ctx) => { + // extract contest address from request url + const [, contestAddress] = ctx.url.pathname.split('/contests/'); + + const contestManager = await models.ContestManager.findOne({ + where: { + contest_address: contestAddress, + farcaster_frame_url: `/api/farcaster/contests/${contestAddress}`, + }, + }); + if (!contestManager) { + return { + title: 'Invalid Contest', + image: ( +
+

+ Contest at address {`"${contestAddress}"`} does not exist. +

+
+ ), + }; + } + + // associate frame cast with contest manager + if (!contestManager?.farcaster_frame_hashes?.includes(contestAddress)) { + contestManager.farcaster_frame_hashes = [ + ...(contestManager.farcaster_frame_hashes || []), + contestAddress, + ]; + await contestManager.save(); + } + // here we would need to be able to fetch data related to contest eg // image, title, description, prizes // check designs https://www.figma.com/design/NNqlhNPHvn0O96TCBIi6WU/Contests?node-id=960-3689&t=8ogN11dhaRqJP8ET-1 @@ -38,7 +81,7 @@ export const contestCard = frames(async () => { const prizes = [0.005, 0.003, 0.001]; return { - title: 'Contest Title', + title: contestManager.name, image: (
{ fontSize: '56px', }} > - Contest Title + {contestManager.name}

This is contest description.

diff --git a/packages/commonwealth/server/farcaster/router.tsx b/packages/commonwealth/server/farcaster/router.tsx index d2f6fda86ab..278e8e34b48 100644 --- a/packages/commonwealth/server/farcaster/router.tsx +++ b/packages/commonwealth/server/farcaster/router.tsx @@ -12,8 +12,8 @@ farcasterRouter.get('/game', startGame); farcasterRouter.post('/game', startGame); farcasterRouter.post('/result', resultGame); -farcasterRouter.get('/contestCard', contestCard); -farcasterRouter.post('/contestCard', contestCard); +farcasterRouter.get('/contests/:contestAddress', contestCard); +farcasterRouter.post('/contests/:contestAddress', contestCard); farcasterRouter.post('/viewLeaderboard', viewLeaderboard); farcasterRouter.post('/checkEligibility', checkEligibility); From 727faebbbb5e9adcec756c2ead033cb614e6a478 Mon Sep 17 00:00:00 2001 From: kassad Date: Thu, 29 Aug 2024 08:00:23 -0700 Subject: [PATCH 008/425] Added getThreads and getTopics to the external api --- libs/adapters/src/trpc/handlers.ts | 1 + libs/model/src/index.ts | 1 + libs/model/src/thread/GetThread.query.ts | 28 ------ libs/model/src/thread/GetThreads.query.ts | 93 +++++++++++++++++++ libs/model/src/thread/index.ts | 2 +- libs/model/src/topic/GetTopics.query.ts | 34 +++++++ libs/model/src/topic/index.ts | 1 + libs/schemas/src/entities/thread.schemas.ts | 4 + libs/schemas/src/queries/thread.schemas.ts | 16 ++++ libs/schemas/src/queries/topic.schemas.ts | 15 +++ .../server/api/external-router.ts | 6 ++ .../server/api/{threads.ts => thread.ts} | 1 + packages/commonwealth/server/api/topic.ts | 6 ++ 13 files changed, 179 insertions(+), 29 deletions(-) delete mode 100644 libs/model/src/thread/GetThread.query.ts create mode 100644 libs/model/src/thread/GetThreads.query.ts create mode 100644 libs/model/src/topic/GetTopics.query.ts create mode 100644 libs/model/src/topic/index.ts create mode 100644 libs/schemas/src/queries/topic.schemas.ts rename packages/commonwealth/server/api/{threads.ts => thread.ts} (77%) create mode 100644 packages/commonwealth/server/api/topic.ts diff --git a/libs/adapters/src/trpc/handlers.ts b/libs/adapters/src/trpc/handlers.ts index fcbbcf3d5e5..efc322e76a4 100644 --- a/libs/adapters/src/trpc/handlers.ts +++ b/libs/adapters/src/trpc/handlers.ts @@ -55,6 +55,7 @@ export enum Tag { User = 'User', Community = 'Community', Thread = 'Thread', + Topic = 'Topic', Comment = 'Comment', Reaction = 'Reaction', Integration = 'Integration', diff --git a/libs/model/src/index.ts b/libs/model/src/index.ts index dba84ad6ee9..d985e43bb71 100644 --- a/libs/model/src/index.ts +++ b/libs/model/src/index.ts @@ -9,6 +9,7 @@ export * as LoadTest from './load-testing'; export * as Reaction from './reaction'; export * as Subscription from './subscription'; export * as Thread from './thread'; +export * as Topic from './topic'; export * as User from './user'; export * as Webhook from './webhook'; diff --git a/libs/model/src/thread/GetThread.query.ts b/libs/model/src/thread/GetThread.query.ts deleted file mode 100644 index eca257c55cb..00000000000 --- a/libs/model/src/thread/GetThread.query.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { z } from 'zod'; - -export const GetThreadsParamsSchema = z.object({ - community_id: z.string(), - bulk: z.coerce.boolean().default(false), - thread_ids: z.coerce.number().int().array().optional(), - active: z.string().optional(), - search: z.string().optional(), - count: z.coerce.boolean().optional().default(false), - include_count: z.coerce.boolean().default(false), -}); - -export const GetBulkThreadsParamsSchema = z.object({ - topic_id: z.coerce.number().int().optional(), - includePinnedThreads: z.coerce.boolean().optional(), - limit: z.coerce.number().int().optional(), - page: z.coerce.number().int().optional(), - archived: z.coerce.boolean().optional(), - stage: z.string().optional(), - orderBy: z.string().optional(), - from_date: z.string().optional(), - to_date: z.string().optional(), - contestAddress: z.string().optional(), - status: z.string().optional(), - withXRecentComments: z.coerce.number().optional(), -}); - -export type GetThreadsParams = z.infer; diff --git a/libs/model/src/thread/GetThreads.query.ts b/libs/model/src/thread/GetThreads.query.ts new file mode 100644 index 00000000000..1f2d8186d0b --- /dev/null +++ b/libs/model/src/thread/GetThreads.query.ts @@ -0,0 +1,93 @@ +import { type Query } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { FindAndCountOptions } from 'sequelize'; +import { models } from '../database'; +import { ThreadAttributes } from '../models'; +import { removeUndefined } from '../utils'; +import { formatSequelizePagination } from '../utils/paginationUtils'; + +export function GetThreads(): Query { + return { + ...schemas.GetThreads, + auth: [], + secure: false, + body: async ({ payload }) => { + const { + community_id, + topic_id, + thread_id, + include_comments, + include_user, + include_reactions, + } = payload; + + const includeArray = []; + if (include_comments) { + includeArray.push({ + model: models.Comment, + include: [ + { + model: models.Address, + as: 'Address', + required: true, + attributes: ['address', 'last_active'], + include: [ + { + model: models.User, + as: 'User', + required: true, + attributes: ['id', 'profile'], + }, + ], + }, + ], + }); + } + if (include_user) { + includeArray.push({ + model: models.Address, + include: [ + { + model: models.User, + as: 'User', + required: true, + attributes: ['id', 'profile'], + }, + ], + }); + } + + if (include_reactions) { + includeArray.push({ + model: models.Reaction, + as: 'reactions', + include: [ + { + model: models.Address, + as: 'Address', + required: true, + attributes: ['address', 'last_active'], + include: [ + { + model: models.User, + as: 'User', + required: true, + attributes: ['id', 'profile'], + }, + ], + }, + ], + }); + } + + const { count, rows: threads } = await models.Thread.findAndCountAll({ + where: removeUndefined({ community_id, topic_id, id: thread_id }), + include: includeArray, + ...formatSequelizePagination(payload), + paranoid: false, + } as unknown as FindAndCountOptions); + + return schemas.buildPaginatedResponse(threads, count as number, payload); + }, + }; +} diff --git a/libs/model/src/thread/index.ts b/libs/model/src/thread/index.ts index c1ee9a9f43e..d0d8325d757 100644 --- a/libs/model/src/thread/index.ts +++ b/libs/model/src/thread/index.ts @@ -1,3 +1,3 @@ export * from './CreateThread.command'; export * from './GetBulkThread.query'; -export * from './GetThread.query'; +export * from './GetThreads.query'; diff --git a/libs/model/src/topic/GetTopics.query.ts b/libs/model/src/topic/GetTopics.query.ts new file mode 100644 index 00000000000..b17d08ebf10 --- /dev/null +++ b/libs/model/src/topic/GetTopics.query.ts @@ -0,0 +1,34 @@ +import { type Query } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { FindAndCountOptions } from 'sequelize'; +import { models } from '../database'; +import { TopicAttributes } from '../models'; +import { removeUndefined } from '../utils'; +import { formatSequelizePagination } from '../utils/paginationUtils'; + +export function GetTopics(): Query { + return { + ...schemas.GetTopics, + auth: [], + secure: false, + body: async ({ payload }) => { + const { community_id, topic_id, include_threads } = payload; + + const includeArray = []; + if (include_threads) { + includeArray.push({ + model: models.Thread, + }); + } + + const { count, rows: threads } = await models.Topic.findAndCountAll({ + where: removeUndefined({ community_id, id: topic_id }), + include: includeArray, + ...formatSequelizePagination(payload), + paranoid: false, + } as unknown as FindAndCountOptions); + + return schemas.buildPaginatedResponse(threads, count as number, payload); + }, + }; +} diff --git a/libs/model/src/topic/index.ts b/libs/model/src/topic/index.ts new file mode 100644 index 00000000000..81e78d16eb2 --- /dev/null +++ b/libs/model/src/topic/index.ts @@ -0,0 +1 @@ +export * from './GetTopics.query'; diff --git a/libs/schemas/src/entities/thread.schemas.ts b/libs/schemas/src/entities/thread.schemas.ts index 4e8a413e3c1..80124656eb9 100644 --- a/libs/schemas/src/entities/thread.schemas.ts +++ b/libs/schemas/src/entities/thread.schemas.ts @@ -1,5 +1,7 @@ import { z } from 'zod'; import { DiscordMetaSchema, linksSchema, PG_INT } from '../utils'; +import { Comment } from './comment.schemas'; +import { Reaction } from './reaction.schemas'; import { Topic } from './topic.schemas'; import { Address } from './user.schemas'; @@ -51,6 +53,8 @@ export const Thread = z.object({ // associations Address: Address.nullish(), + Comment: Comment.nullish(), + Reaction: Reaction.nullish(), topic: Topic.nullish(), }); diff --git a/libs/schemas/src/queries/thread.schemas.ts b/libs/schemas/src/queries/thread.schemas.ts index 5aeed8e39d9..87735c45b0b 100644 --- a/libs/schemas/src/queries/thread.schemas.ts +++ b/libs/schemas/src/queries/thread.schemas.ts @@ -1,10 +1,12 @@ import { z } from 'zod'; +import { Thread } from '../entities'; import { DiscordMetaSchema, linksSchema, paginationSchema, PG_INT, } from '../utils'; +import { PaginatedResultSchema, PaginationParamsSchema } from './pagination'; export const OrderByQueriesKeys = z.enum([ 'createdAt:asc', @@ -91,3 +93,17 @@ export const GetBulkThreads = { threads: z.array(BulkThread), }), }; + +export const GetThreads = { + input: PaginationParamsSchema.extend({ + community_id: z.string(), + topic_id: PG_INT.optional(), + thread_id: PG_INT.optional(), + include_comments: z.coerce.boolean(), + include_user: z.coerce.boolean(), + include_reactions: z.coerce.boolean(), + }), + output: PaginatedResultSchema.extend({ + result: Thread.array(), + }), +}; diff --git a/libs/schemas/src/queries/topic.schemas.ts b/libs/schemas/src/queries/topic.schemas.ts new file mode 100644 index 00000000000..2e4d7248adf --- /dev/null +++ b/libs/schemas/src/queries/topic.schemas.ts @@ -0,0 +1,15 @@ +import { z } from 'zod'; +import { Topic } from '../entities'; +import { PG_INT } from '../utils'; +import { PaginatedResultSchema, PaginationParamsSchema } from './pagination'; + +export const GetTopics = { + input: PaginationParamsSchema.extend({ + community_id: z.string(), + topic_id: PG_INT.optional(), + include_threads: z.coerce.boolean(), + }), + output: PaginatedResultSchema.extend({ + result: Topic.array(), + }), +}; diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 86c8c903e0d..40adb6b9a84 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -3,9 +3,13 @@ import cors from 'cors'; import { Router } from 'express'; import * as comment from './comment'; import * as community from './community'; +import * as thread from './thread'; +import * as topic from './topic'; const { getCommunities, getCommunity, getMembers } = community.trpcRouter; const { getComments } = comment.trpcRouter; +const { getThreads } = thread.trpcRouter; +const { getTopics } = topic.trpcRouter; //const { getBulkThreads } = thread.trpcRouter; const api = { @@ -13,6 +17,8 @@ const api = { getCommunity, getMembers, getComments, + getThreads, + getTopics, //getBulkThreads, }; diff --git a/packages/commonwealth/server/api/threads.ts b/packages/commonwealth/server/api/thread.ts similarity index 77% rename from packages/commonwealth/server/api/threads.ts rename to packages/commonwealth/server/api/thread.ts index a2afb7dde84..fc729ee7ffc 100644 --- a/packages/commonwealth/server/api/threads.ts +++ b/packages/commonwealth/server/api/thread.ts @@ -3,4 +3,5 @@ import { Thread } from '@hicommonwealth/model'; export const trpcRouter = trpc.router({ getBulkThreads: trpc.query(Thread.GetBulkThreads, trpc.Tag.Thread), + getThreads: trpc.query(Thread.GetThreads, trpc.Tag.Thread), }); diff --git a/packages/commonwealth/server/api/topic.ts b/packages/commonwealth/server/api/topic.ts new file mode 100644 index 00000000000..ce580945140 --- /dev/null +++ b/packages/commonwealth/server/api/topic.ts @@ -0,0 +1,6 @@ +import { trpc } from '@hicommonwealth/adapters'; +import { Topic } from '@hicommonwealth/model'; + +export const trpcRouter = trpc.router({ + getTopics: trpc.query(Topic.GetTopics, trpc.Tag.Topic), +}); From 052ee324d2a7e774e5f4dee881f79177c2c9f819 Mon Sep 17 00:00:00 2001 From: kassad Date: Tue, 3 Sep 2024 08:17:28 -0700 Subject: [PATCH 009/425] Fixed external API routes --- libs/model/src/thread/GetThreads.query.ts | 9 +++---- libs/model/src/topic/GetTopics.query.ts | 1 + libs/schemas/src/entities/thread.schemas.ts | 2 +- libs/schemas/src/queries/index.ts | 1 + libs/schemas/src/queries/thread.schemas.ts | 27 ++++++++++++++++++- libs/schemas/src/queries/topic.schemas.ts | 2 +- .../server/api/internal-router.ts | 2 +- packages/commonwealth/server/routes/feed.ts | 7 ++--- .../routes/threads/get_threads_handler.ts | 6 ++--- 9 files changed, 42 insertions(+), 15 deletions(-) diff --git a/libs/model/src/thread/GetThreads.query.ts b/libs/model/src/thread/GetThreads.query.ts index 1f2d8186d0b..12b77a27e00 100644 --- a/libs/model/src/thread/GetThreads.query.ts +++ b/libs/model/src/thread/GetThreads.query.ts @@ -25,12 +25,12 @@ export function GetThreads(): Query { if (include_comments) { includeArray.push({ model: models.Comment, + as: 'Comments', include: [ { model: models.Address, as: 'Address', - required: true, - attributes: ['address', 'last_active'], + attributes: ['id', 'address', 'last_active'], include: [ { model: models.User, @@ -46,6 +46,7 @@ export function GetThreads(): Query { if (include_user) { includeArray.push({ model: models.Address, + as: 'Address', include: [ { model: models.User, @@ -66,12 +67,10 @@ export function GetThreads(): Query { model: models.Address, as: 'Address', required: true, - attributes: ['address', 'last_active'], + attributes: ['id', 'address', 'last_active'], include: [ { model: models.User, - as: 'User', - required: true, attributes: ['id', 'profile'], }, ], diff --git a/libs/model/src/topic/GetTopics.query.ts b/libs/model/src/topic/GetTopics.query.ts index b17d08ebf10..8c087ec1cd9 100644 --- a/libs/model/src/topic/GetTopics.query.ts +++ b/libs/model/src/topic/GetTopics.query.ts @@ -18,6 +18,7 @@ export function GetTopics(): Query { if (include_threads) { includeArray.push({ model: models.Thread, + as: 'threads', }); } diff --git a/libs/schemas/src/entities/thread.schemas.ts b/libs/schemas/src/entities/thread.schemas.ts index 80124656eb9..63755eb1c3b 100644 --- a/libs/schemas/src/entities/thread.schemas.ts +++ b/libs/schemas/src/entities/thread.schemas.ts @@ -53,7 +53,7 @@ export const Thread = z.object({ // associations Address: Address.nullish(), - Comment: Comment.nullish(), + Comment: z.lazy(() => Comment.nullish()), Reaction: Reaction.nullish(), topic: Topic.nullish(), }); diff --git a/libs/schemas/src/queries/index.ts b/libs/schemas/src/queries/index.ts index 2e7ee3c5dfb..4d39c42292e 100644 --- a/libs/schemas/src/queries/index.ts +++ b/libs/schemas/src/queries/index.ts @@ -5,4 +5,5 @@ export * from './feed.schemas'; export * from './pagination'; export * from './subscription.schemas'; export * from './thread.schemas'; +export * from './topic.schemas'; export * from './user.schemas'; diff --git a/libs/schemas/src/queries/thread.schemas.ts b/libs/schemas/src/queries/thread.schemas.ts index 87735c45b0b..bed916ca2fc 100644 --- a/libs/schemas/src/queries/thread.schemas.ts +++ b/libs/schemas/src/queries/thread.schemas.ts @@ -104,6 +104,31 @@ export const GetThreads = { include_reactions: z.coerce.boolean(), }), output: PaginatedResultSchema.extend({ - result: Thread.array(), + results: Thread.array(), }), }; + +export const DEPRECATED_GetThreads = z.object({ + community_id: z.string(), + bulk: z.coerce.boolean().default(false), + thread_ids: z.coerce.number().int().array().optional(), + active: z.string().optional(), + search: z.string().optional(), + count: z.coerce.boolean().optional().default(false), + include_count: z.coerce.boolean().default(false), +}); + +export const DEPRECATED_GetBulkThreads = z.object({ + topic_id: z.coerce.number().int().optional(), + includePinnedThreads: z.coerce.boolean().optional(), + limit: z.coerce.number().int().optional(), + page: z.coerce.number().int().optional(), + archived: z.coerce.boolean().optional(), + stage: z.string().optional(), + orderBy: z.string().optional(), + from_date: z.string().optional(), + to_date: z.string().optional(), + contestAddress: z.string().optional(), + status: z.string().optional(), + withXRecentComments: z.coerce.number().optional(), +}); diff --git a/libs/schemas/src/queries/topic.schemas.ts b/libs/schemas/src/queries/topic.schemas.ts index 2e4d7248adf..c2eb5e363db 100644 --- a/libs/schemas/src/queries/topic.schemas.ts +++ b/libs/schemas/src/queries/topic.schemas.ts @@ -10,6 +10,6 @@ export const GetTopics = { include_threads: z.coerce.boolean(), }), output: PaginatedResultSchema.extend({ - result: Topic.array(), + results: Topic.array(), }), }; diff --git a/packages/commonwealth/server/api/internal-router.ts b/packages/commonwealth/server/api/internal-router.ts index bb6da0190fd..2034eecebc6 100644 --- a/packages/commonwealth/server/api/internal-router.ts +++ b/packages/commonwealth/server/api/internal-router.ts @@ -10,7 +10,7 @@ import * as feed from './feed'; import * as integrations from './integrations'; import * as loadTest from './load-test'; import * as subscription from './subscription'; -import * as thread from './threads'; +import * as thread from './thread'; import * as user from './user'; import * as webhook from './webhook'; diff --git a/packages/commonwealth/server/routes/feed.ts b/packages/commonwealth/server/routes/feed.ts index f54ec48293a..bb775b6bf02 100644 --- a/packages/commonwealth/server/routes/feed.ts +++ b/packages/commonwealth/server/routes/feed.ts @@ -1,5 +1,6 @@ import { AppError } from '@hicommonwealth/core'; -import { Thread, ThreadAttributes, type DB } from '@hicommonwealth/model'; +import { ThreadAttributes, type DB } from '@hicommonwealth/model'; +import * as schemas from '@hicommonwealth/schemas'; import { slugify } from '@hicommonwealth/shared'; import { Feed } from 'feed'; import { GetBulkThreadsResult } from '../controllers/server_threads_methods/get_bulk_threads'; @@ -47,7 +48,7 @@ export const getFeedHandler = async ( >, res: TypedResponse, ) => { - const queryValidationResult = Thread.GetThreadsParamsSchema.safeParse( + const queryValidationResult = schemas.DEPRECATED_GetBulkThreads.safeParse( req.query, ); @@ -65,7 +66,7 @@ export const getFeedHandler = async ( // get bulk threads if (bulk) { const bulkQueryValidationResult = - Thread.GetBulkThreadsParamsSchema.safeParse(req.query); + schemas.DEPRECATED_GetBulkThreads.safeParse(req.query); if (bulkQueryValidationResult.success === false) { throw new AppError(formatErrorPretty(bulkQueryValidationResult)); diff --git a/packages/commonwealth/server/routes/threads/get_threads_handler.ts b/packages/commonwealth/server/routes/threads/get_threads_handler.ts index ac711c70161..4a18acd24aa 100644 --- a/packages/commonwealth/server/routes/threads/get_threads_handler.ts +++ b/packages/commonwealth/server/routes/threads/get_threads_handler.ts @@ -1,5 +1,5 @@ import { AppError } from '@hicommonwealth/core'; -import { Thread } from '@hicommonwealth/model'; +import * as schemas from '@hicommonwealth/schemas'; import { ALL_COMMUNITIES } from '../../middleware/databaseValidationService'; import { ServerControllers } from '../../routing/router'; import { @@ -66,7 +66,7 @@ export const getThreadsHandler = async ( >, res: TypedResponse, ) => { - const queryValidationResult = Thread.GetThreadsParamsSchema.safeParse( + const queryValidationResult = schemas.DEPRECATED_GetThreads.safeParse( req.query, ); @@ -95,7 +95,7 @@ export const getThreadsHandler = async ( // get bulk threads if (bulk) { const bulkQueryValidationResult = - Thread.GetBulkThreadsParamsSchema.safeParse(req.query); + schemas.DEPRECATED_GetBulkThreads.safeParse(req.query); if (bulkQueryValidationResult.success === false) { throw new AppError(formatErrorPretty(bulkQueryValidationResult)); From 4cc14702389eeae7f2eeb896cbecdc7f9334f1e7 Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 4 Sep 2024 06:14:09 -0700 Subject: [PATCH 010/425] Fixed recursive reference --- libs/model/src/thread/GetThreads.query.ts | 4 +++- libs/schemas/src/entities/thread.schemas.ts | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/model/src/thread/GetThreads.query.ts b/libs/model/src/thread/GetThreads.query.ts index 12b77a27e00..f080b166e2e 100644 --- a/libs/model/src/thread/GetThreads.query.ts +++ b/libs/model/src/thread/GetThreads.query.ts @@ -1,5 +1,6 @@ import { type Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; +import { Comment } from '@hicommonwealth/schemas'; import { FindAndCountOptions } from 'sequelize'; import { models } from '../database'; import { ThreadAttributes } from '../models'; @@ -8,7 +9,8 @@ import { formatSequelizePagination } from '../utils/paginationUtils'; export function GetThreads(): Query { return { - ...schemas.GetThreads, + input: schemas.GetThreads.input, + output: schemas.GetThreads.output.extend({ Comment: Comment.nullish() }), auth: [], secure: false, body: async ({ payload }) => { diff --git a/libs/schemas/src/entities/thread.schemas.ts b/libs/schemas/src/entities/thread.schemas.ts index 63755eb1c3b..33aed7cc292 100644 --- a/libs/schemas/src/entities/thread.schemas.ts +++ b/libs/schemas/src/entities/thread.schemas.ts @@ -1,6 +1,5 @@ import { z } from 'zod'; import { DiscordMetaSchema, linksSchema, PG_INT } from '../utils'; -import { Comment } from './comment.schemas'; import { Reaction } from './reaction.schemas'; import { Topic } from './topic.schemas'; import { Address } from './user.schemas'; @@ -53,7 +52,6 @@ export const Thread = z.object({ // associations Address: Address.nullish(), - Comment: z.lazy(() => Comment.nullish()), Reaction: Reaction.nullish(), topic: Topic.nullish(), }); From 54f71b9e44ec235894613bc2ddf5691523f3003f Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 4 Sep 2024 06:38:28 -0700 Subject: [PATCH 011/425] Fixed type issue --- libs/model/src/topic/GetTopics.query.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libs/model/src/topic/GetTopics.query.ts b/libs/model/src/topic/GetTopics.query.ts index 8c087ec1cd9..5849c9be944 100644 --- a/libs/model/src/topic/GetTopics.query.ts +++ b/libs/model/src/topic/GetTopics.query.ts @@ -2,7 +2,7 @@ import { type Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; import { FindAndCountOptions } from 'sequelize'; import { models } from '../database'; -import { TopicAttributes } from '../models'; +import { TopicAttributes } from '../models/index'; import { removeUndefined } from '../utils'; import { formatSequelizePagination } from '../utils/paginationUtils'; @@ -22,14 +22,19 @@ export function GetTopics(): Query { }); } - const { count, rows: threads } = await models.Topic.findAndCountAll({ + const { count, rows: topics } = await models.Topic.findAndCountAll({ where: removeUndefined({ community_id, id: topic_id }), include: includeArray, ...formatSequelizePagination(payload), paranoid: false, } as unknown as FindAndCountOptions); - return schemas.buildPaginatedResponse(threads, count as number, payload); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return schemas.buildPaginatedResponse( + topics, + count as number, + payload, + ) as any; }, }; } From 46711b9b08cf39fc8c1289085efed3e35ecf2a78 Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 4 Sep 2024 06:44:11 -0700 Subject: [PATCH 012/425] Fixed type issue --- packages/commonwealth/server/routes/feed.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/server/routes/feed.ts b/packages/commonwealth/server/routes/feed.ts index bb775b6bf02..c11bb7e25da 100644 --- a/packages/commonwealth/server/routes/feed.ts +++ b/packages/commonwealth/server/routes/feed.ts @@ -48,7 +48,7 @@ export const getFeedHandler = async ( >, res: TypedResponse, ) => { - const queryValidationResult = schemas.DEPRECATED_GetBulkThreads.safeParse( + const queryValidationResult = schemas.DEPRECATED_GetThreads.safeParse( req.query, ); From 078e9467c64e229d2b1477f1cd51ced48f5a5a3e Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 4 Sep 2024 06:48:53 -0700 Subject: [PATCH 013/425] Fixed linter error --- libs/model/src/topic/GetTopics.query.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/model/src/topic/GetTopics.query.ts b/libs/model/src/topic/GetTopics.query.ts index 5849c9be944..7372c57dcac 100644 --- a/libs/model/src/topic/GetTopics.query.ts +++ b/libs/model/src/topic/GetTopics.query.ts @@ -29,11 +29,11 @@ export function GetTopics(): Query { paranoid: false, } as unknown as FindAndCountOptions); - // eslint-disable-next-line @typescript-eslint/no-explicit-any return schemas.buildPaginatedResponse( topics, count as number, payload, + // eslint-disable-next-line @typescript-eslint/no-explicit-any ) as any; }, }; From 538ebd29ce459670f685661d33b10734f7f24249 Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 4 Sep 2024 07:06:37 -0700 Subject: [PATCH 014/425] Fixed PR comment --- libs/model/src/thread/GetThreads.query.ts | 4 +--- libs/schemas/src/queries/thread.schemas.ts | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/libs/model/src/thread/GetThreads.query.ts b/libs/model/src/thread/GetThreads.query.ts index f080b166e2e..12b77a27e00 100644 --- a/libs/model/src/thread/GetThreads.query.ts +++ b/libs/model/src/thread/GetThreads.query.ts @@ -1,6 +1,5 @@ import { type Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { Comment } from '@hicommonwealth/schemas'; import { FindAndCountOptions } from 'sequelize'; import { models } from '../database'; import { ThreadAttributes } from '../models'; @@ -9,8 +8,7 @@ import { formatSequelizePagination } from '../utils/paginationUtils'; export function GetThreads(): Query { return { - input: schemas.GetThreads.input, - output: schemas.GetThreads.output.extend({ Comment: Comment.nullish() }), + ...schemas.GetThreads, auth: [], secure: false, body: async ({ payload }) => { diff --git a/libs/schemas/src/queries/thread.schemas.ts b/libs/schemas/src/queries/thread.schemas.ts index bed916ca2fc..d8242bc3dee 100644 --- a/libs/schemas/src/queries/thread.schemas.ts +++ b/libs/schemas/src/queries/thread.schemas.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; -import { Thread } from '../entities'; +import { Comment, Thread } from '../entities'; import { DiscordMetaSchema, + PG_INT, linksSchema, paginationSchema, - PG_INT, } from '../utils'; import { PaginatedResultSchema, PaginationParamsSchema } from './pagination'; @@ -104,7 +104,7 @@ export const GetThreads = { include_reactions: z.coerce.boolean(), }), output: PaginatedResultSchema.extend({ - results: Thread.array(), + results: Thread.extend({ Comment: Comment.nullish() }).array(), }), }; From 3a346590ba1a6f0281d2eb1904cf089c81bd3b72 Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 4 Sep 2024 07:13:11 -0700 Subject: [PATCH 015/425] Resolved merge conflicts --- libs/adapters/src/trpc/middleware.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/adapters/src/trpc/middleware.ts b/libs/adapters/src/trpc/middleware.ts index 330b186426a..67aae54c19a 100644 --- a/libs/adapters/src/trpc/middleware.ts +++ b/libs/adapters/src/trpc/middleware.ts @@ -40,6 +40,7 @@ export enum Tag { User = 'User', Community = 'Community', Thread = 'Thread', + Topic = 'Topic', Comment = 'Comment', Reaction = 'Reaction', Integration = 'Integration', From 8b17eaa377f9be78704c0055dbe19ec3fd99c751 Mon Sep 17 00:00:00 2001 From: kassad Date: Thu, 5 Sep 2024 10:48:45 -0700 Subject: [PATCH 016/425] Fixed PR comment --- libs/model/src/topic/GetTopics.query.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/model/src/topic/GetTopics.query.ts b/libs/model/src/topic/GetTopics.query.ts index 7372c57dcac..1f1542bf20c 100644 --- a/libs/model/src/topic/GetTopics.query.ts +++ b/libs/model/src/topic/GetTopics.query.ts @@ -1,6 +1,7 @@ import { type Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; import { FindAndCountOptions } from 'sequelize'; +import z from 'zod'; import { models } from '../database'; import { TopicAttributes } from '../models/index'; import { removeUndefined } from '../utils'; @@ -33,8 +34,7 @@ export function GetTopics(): Query { topics, count as number, payload, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ) as any; + ) as unknown as z.infer; }, }; } From d06f5926d32a7b2d0cb424f6106c4338b95d6f6f Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 9 Sep 2024 08:45:56 -0700 Subject: [PATCH 017/425] Fixed PR comments --- libs/model/src/comment/GetComments.query.ts | 4 +--- libs/model/src/thread/GetThreads.query.ts | 4 +--- libs/model/src/topic/GetTopics.query.ts | 4 +--- libs/model/src/utils/paginationUtils.ts | 12 +++++------- libs/schemas/src/queries/comment.schemas.ts | 6 +++--- libs/schemas/src/queries/thread.schemas.ts | 7 ++++--- libs/schemas/src/queries/topic.schemas.ts | 4 ++-- libs/schemas/src/utils.ts | 2 ++ 8 files changed, 19 insertions(+), 24 deletions(-) diff --git a/libs/model/src/comment/GetComments.query.ts b/libs/model/src/comment/GetComments.query.ts index 24e5b45b400..6218764cea7 100644 --- a/libs/model/src/comment/GetComments.query.ts +++ b/libs/model/src/comment/GetComments.query.ts @@ -1,8 +1,6 @@ import { type Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { FindAndCountOptions } from 'sequelize'; import { models } from '../database'; -import { CommentAttributes } from '../models/index'; import { removeUndefined } from '../utils/index'; import { formatSequelizePagination } from '../utils/paginationUtils'; @@ -58,7 +56,7 @@ export function GetComments(): Query { include: includeArray, ...formatSequelizePagination(payload), paranoid: false, - } as unknown as FindAndCountOptions); + }); return schemas.buildPaginatedResponse(comments, count as number, payload); }, diff --git a/libs/model/src/thread/GetThreads.query.ts b/libs/model/src/thread/GetThreads.query.ts index 12b77a27e00..c326aa3e3d3 100644 --- a/libs/model/src/thread/GetThreads.query.ts +++ b/libs/model/src/thread/GetThreads.query.ts @@ -1,8 +1,6 @@ import { type Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { FindAndCountOptions } from 'sequelize'; import { models } from '../database'; -import { ThreadAttributes } from '../models'; import { removeUndefined } from '../utils'; import { formatSequelizePagination } from '../utils/paginationUtils'; @@ -84,7 +82,7 @@ export function GetThreads(): Query { include: includeArray, ...formatSequelizePagination(payload), paranoid: false, - } as unknown as FindAndCountOptions); + }); return schemas.buildPaginatedResponse(threads, count as number, payload); }, diff --git a/libs/model/src/topic/GetTopics.query.ts b/libs/model/src/topic/GetTopics.query.ts index 1f1542bf20c..f20ec0f10bf 100644 --- a/libs/model/src/topic/GetTopics.query.ts +++ b/libs/model/src/topic/GetTopics.query.ts @@ -1,9 +1,7 @@ import { type Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { FindAndCountOptions } from 'sequelize'; import z from 'zod'; import { models } from '../database'; -import { TopicAttributes } from '../models/index'; import { removeUndefined } from '../utils'; import { formatSequelizePagination } from '../utils/paginationUtils'; @@ -28,7 +26,7 @@ export function GetTopics(): Query { include: includeArray, ...formatSequelizePagination(payload), paranoid: false, - } as unknown as FindAndCountOptions); + }); return schemas.buildPaginatedResponse( topics, diff --git a/libs/model/src/utils/paginationUtils.ts b/libs/model/src/utils/paginationUtils.ts index a3976819a87..17b71f5aa9d 100644 --- a/libs/model/src/utils/paginationUtils.ts +++ b/libs/model/src/utils/paginationUtils.ts @@ -1,20 +1,18 @@ -type PaginationReturnType = { - offset: number; - limit: number | undefined; - order: [(string | 'ASC' | 'DESC')[]] | undefined; -}; +import { Order } from 'sequelize/types/model'; export function formatSequelizePagination(params: { limit?: number; cursor?: number; order_by?: string; order_direction?: 'ASC' | 'DESC'; -}): PaginationReturnType { +}): { offset: number; limit: number | undefined; order?: Order } { const { limit, cursor, order_by, order_direction } = params; return { limit, offset: (limit ?? 20) * ((cursor ?? 1) - 1), order: - order_by && order_direction ? [[order_by, order_direction]] : undefined, + order_by && order_direction + ? ([[order_by, order_direction]] as Order) + : undefined, }; } diff --git a/libs/schemas/src/queries/comment.schemas.ts b/libs/schemas/src/queries/comment.schemas.ts index 521f778d906..cbd8b9aa0a0 100644 --- a/libs/schemas/src/queries/comment.schemas.ts +++ b/libs/schemas/src/queries/comment.schemas.ts @@ -1,6 +1,6 @@ import z from 'zod'; import { Comment } from '../entities'; -import { PG_INT } from '../utils'; +import { PG_INT, zBoolean } from '../utils'; import { PaginatedResultSchema, PaginationParamsSchema } from './pagination'; export const SearchComments = { @@ -21,8 +21,8 @@ export const GetComments = { input: PaginationParamsSchema.extend({ thread_id: PG_INT, comment_id: PG_INT.optional(), - include_user: z.coerce.boolean(), - include_reactions: z.coerce.boolean(), + include_user: zBoolean.default(false), + include_reactions: zBoolean.default(false), }), output: PaginatedResultSchema.extend({ results: Comment.array(), diff --git a/libs/schemas/src/queries/thread.schemas.ts b/libs/schemas/src/queries/thread.schemas.ts index d8242bc3dee..9e360e6b0e2 100644 --- a/libs/schemas/src/queries/thread.schemas.ts +++ b/libs/schemas/src/queries/thread.schemas.ts @@ -5,6 +5,7 @@ import { PG_INT, linksSchema, paginationSchema, + zBoolean, } from '../utils'; import { PaginatedResultSchema, PaginationParamsSchema } from './pagination'; @@ -99,9 +100,9 @@ export const GetThreads = { community_id: z.string(), topic_id: PG_INT.optional(), thread_id: PG_INT.optional(), - include_comments: z.coerce.boolean(), - include_user: z.coerce.boolean(), - include_reactions: z.coerce.boolean(), + include_comments: zBoolean.default(false), + include_user: zBoolean.default(false), + include_reactions: zBoolean.default(false), }), output: PaginatedResultSchema.extend({ results: Thread.extend({ Comment: Comment.nullish() }).array(), diff --git a/libs/schemas/src/queries/topic.schemas.ts b/libs/schemas/src/queries/topic.schemas.ts index c2eb5e363db..68fa06180bd 100644 --- a/libs/schemas/src/queries/topic.schemas.ts +++ b/libs/schemas/src/queries/topic.schemas.ts @@ -1,13 +1,13 @@ import { z } from 'zod'; import { Topic } from '../entities'; -import { PG_INT } from '../utils'; +import { PG_INT, zBoolean } from '../utils'; import { PaginatedResultSchema, PaginationParamsSchema } from './pagination'; export const GetTopics = { input: PaginationParamsSchema.extend({ community_id: z.string(), topic_id: PG_INT.optional(), - include_threads: z.coerce.boolean(), + include_threads: zBoolean.default(false), }), output: PaginatedResultSchema.extend({ results: Topic.array(), diff --git a/libs/schemas/src/utils.ts b/libs/schemas/src/utils.ts index 36ae1cc620f..dfcb959b3b2 100644 --- a/libs/schemas/src/utils.ts +++ b/libs/schemas/src/utils.ts @@ -38,6 +38,8 @@ export const linksSchema = { export const PG_INT = z.number().int().min(MIN_SCHEMA_INT).max(MAX_SCHEMA_INT); +export const zBoolean = z.preprocess((v) => v && v !== 'false', z.boolean()); + export const ETHERS_BIG_NUMBER = z.object({ hex: z.string().regex(/^0x[0-9a-fA-F]+$/), type: z.literal('BigNumber'), From 8ab54d6f2885004ff3f25446bb85b5c91445c7ab Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 9 Sep 2024 08:48:11 -0700 Subject: [PATCH 018/425] Resolved merge conflicts --- packages/commonwealth/server/api/external-router.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 81b8fea8b92..a2d0aba3000 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -5,7 +5,6 @@ import passport from 'passport'; import { config } from '../config'; import * as comment from './comment'; import * as community from './community'; -import * as thread from './threads'; import * as thread from './thread'; import * as topic from './topic'; From 41466fb16e39f5bdce31e5fb9fa5aba883413454 Mon Sep 17 00:00:00 2001 From: israellund Date: Tue, 10 Sep 2024 13:47:27 -0400 Subject: [PATCH 019/425] made small changes, commiting to change branches --- .../components/Comments/CommentEditor/CommentEditor.scss | 7 ++++++- .../components/react_quill_editor/react_quill_editor.tsx | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/Comments/CommentEditor/CommentEditor.scss b/packages/commonwealth/client/scripts/views/components/Comments/CommentEditor/CommentEditor.scss index 0d9bf31067b..eb4251dd982 100644 --- a/packages/commonwealth/client/scripts/views/components/Comments/CommentEditor/CommentEditor.scss +++ b/packages/commonwealth/client/scripts/views/components/Comments/CommentEditor/CommentEditor.scss @@ -14,6 +14,11 @@ display: flex; gap: 4px; + .caption { + display: inline-block; + vertical-align: baseline; + } + .user-link-text { &.disabled { .user-display-name { @@ -50,4 +55,4 @@ .token-req-text.Text { color: $neutral-500; } -} \ No newline at end of file +} diff --git a/packages/commonwealth/client/scripts/views/components/react_quill_editor/react_quill_editor.tsx b/packages/commonwealth/client/scripts/views/components/react_quill_editor/react_quill_editor.tsx index 85359701e32..749337cc28a 100644 --- a/packages/commonwealth/client/scripts/views/components/react_quill_editor/react_quill_editor.tsx +++ b/packages/commonwealth/client/scripts/views/components/react_quill_editor/react_quill_editor.tsx @@ -92,8 +92,11 @@ const ReactQuillEditor = ({ const formFieldErrorMessage = hookToForm && name && - (formContext?.formState?.errors?.[name] as SerializableDeltaStatic) - ?.ops?.[0]?.insert?.message; + ( + formContext?.formState?.errors?.[ + name + ] as unknown as SerializableDeltaStatic + )?.ops?.[0]?.insert?.message; const isHookedToFormProper = hookToForm && name && formContext; From e3c682fae38c989fdba90dea0760cfa2d81c2954 Mon Sep 17 00:00:00 2001 From: israellund Date: Fri, 13 Sep 2024 10:33:16 -0400 Subject: [PATCH 020/425] reply now triggers scroll --- .../discussions/CommentTree/CommentTree.tsx | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx index 358ebb4063b..5c67aa18d50 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx @@ -155,6 +155,7 @@ export const CommentTree = ({ }); const scrollToRef = useRef(null); + const scrollToEditorRef = useRef(null); const scrollToElement = () => { if (scrollToRef.current) { @@ -166,6 +167,17 @@ export const CommentTree = ({ } }; + const scrollToEditor = () => { + // @ts-expect-error + scrollToEditorRef.current?.scrollIntoView({ behavior: 'smooth' }); + }; + + useEffect(() => { + if (isReplying) { + scrollToEditor(); + } + }, [isReplying]); + // eslint-disable-next-line @typescript-eslint/no-shadow const handleIsReplying = (isReplying: boolean, id?: number) => { if (isReplying) { @@ -525,12 +537,15 @@ export const CommentTree = ({
{isReplying && parentCommentId === comment.id && ( - + <> + +
+ )} ); From 5290b737692886a6ce2e8d7741afc0a62c1447e9 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 19 Sep 2024 12:46:43 -0700 Subject: [PATCH 021/425] support disabled... --- .../components/MarkdownEditor/MarkdownEditor.scss | 11 +++++++++++ .../MarkdownEditorPage/MarkdownEditorPage.tsx | 15 +++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss index db21d01aa6a..8506418136a 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss @@ -41,6 +41,17 @@ body, } .mdxeditor-container-disabled { + background-color: $neutral-50; + cursor: not-allowed !important; + + .DesktopEditorFooter { + background-color: $neutral-50; + } + + * { + pointer-events: none; + } + .mdxeditor-root-contenteditable { // TODO: disable editing here... } diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx index 4c54e61645a..01ff5e68e25 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx @@ -54,11 +54,14 @@ const SubmitButton = () => { // eslint-disable-next-line react/no-multi-comp const Inner = (props: Pick) => { return ( - + <> + + ); }; From 4600f8fa6094f17645ff4a9957762d35c32e8f5d Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 19 Sep 2024 12:51:35 -0700 Subject: [PATCH 022/425] don't allow the user to type when the content editable is disabled. --- .../MarkdownEditor/MarkdownEditor.tsx | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx index 139b8a71141..f3b8e27dd2e 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx @@ -85,12 +85,19 @@ export type MarkdownEditorProps = Readonly<{ tooltip?: ReactNode; onMarkdownEditorMethods?: (methods: MarkdownEditorMethods) => void; onChange?: (markdown: MarkdownStr) => void; + autoFocus?: boolean; }>; export const MarkdownEditor = memo(function MarkdownEditor( props: MarkdownEditorProps, ) { - const { SubmitButton, onMarkdownEditorMethods, disabled, onChange } = props; + const { + SubmitButton, + onMarkdownEditorMethods, + disabled, + onChange, + autoFocus, + } = props; const errorHandler = useMarkdownEditorErrorHandler(); const [dragging, setDragging] = useState(false); const [uploading, setUploading] = useState(false); @@ -291,6 +298,17 @@ export const MarkdownEditor = memo(function MarkdownEditor( }; }, []); + const handleKeyDown = useCallback( + (event: React.KeyboardEvent) => { + if (disabled) { + // needed to prevent the user from typing into the contenteditable + event.preventDefault(); + event.stopPropagation(); + } + }, + [disabled], + ); + return ( @@ -304,6 +322,7 @@ export const MarkdownEditor = memo(function MarkdownEditor( active ? 'mdxeditor-container-active' : null, disabled ? 'mdxeditor-container-disabled' : null, )} + onKeyDownCapture={handleKeyDown} onDrop={handleDrop} onDragEnter={handleDragEnter} onDragOver={handleDragOver} @@ -311,6 +330,7 @@ export const MarkdownEditor = memo(function MarkdownEditor( onPaste={(event) => handlePaste(event)} onFocus={() => setActive(true)} onBlur={() => setActive(false)} + autoFocus={autoFocus} > Date: Thu, 19 Sep 2024 13:11:36 -0700 Subject: [PATCH 023/425] disabled and tooltip works now.. --- .../MarkdownEditor/MarkdownEditor.tsx | 10 +++++- .../indicators/TooltipIndicator.scss | 34 +++++++++++++++++++ .../indicators/TooltipIndicator.tsx | 15 ++++++++ .../MarkdownEditorPage/MarkdownEditorPage.tsx | 3 +- 4 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/indicators/TooltipIndicator.scss create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/indicators/TooltipIndicator.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx index f3b8e27dd2e..92afd8893e6 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx @@ -28,6 +28,7 @@ import React, { useRef, useState, } from 'react'; +import { TooltipIndicator } from 'views/components/MarkdownEditor/indicators/TooltipIndicator'; import { MarkdownEditorModeContext } from 'views/components/MarkdownEditor/MarkdownEditorModeContext'; import { useDeviceProfile } from 'views/components/MarkdownEditor/useDeviceProfile'; import { MarkdownEditorMethods } from 'views/components/MarkdownEditor/useMarkdownEditorMethods'; @@ -82,7 +83,7 @@ export type MarkdownEditorProps = Readonly<{ placeholder?: string; imageHandler?: ImageHandler; SubmitButton?: () => ReactNode; - tooltip?: ReactNode; + tooltip?: string; onMarkdownEditorMethods?: (methods: MarkdownEditorMethods) => void; onChange?: (markdown: MarkdownStr) => void; autoFocus?: boolean; @@ -97,11 +98,13 @@ export const MarkdownEditor = memo(function MarkdownEditor( disabled, onChange, autoFocus, + tooltip, } = props; const errorHandler = useMarkdownEditorErrorHandler(); const [dragging, setDragging] = useState(false); const [uploading, setUploading] = useState(false); const [active, setActive] = useState(false); + const [hovering, setHovering] = useState(false); const dragCounterRef = useRef(0); @@ -330,6 +333,8 @@ export const MarkdownEditor = memo(function MarkdownEditor( onPaste={(event) => handlePaste(event)} onFocus={() => setActive(true)} onBlur={() => setActive(false)} + onMouseEnter={() => setHovering(true)} + onMouseLeave={() => setHovering(false)} autoFocus={autoFocus} > )} + {disabled && hovering && tooltip && ( + + )} {dragging && } {uploading && } diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/indicators/TooltipIndicator.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/indicators/TooltipIndicator.scss new file mode 100644 index 00000000000..bcdbc47e0b4 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/indicators/TooltipIndicator.scss @@ -0,0 +1,34 @@ +@import '../../../../../styles/shared'; + +.TooltipIndicator { + // cover the parent + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + + // needed so that drag operations don't get hijacked by the indicator which + // would prevent dropping images and markdown files into the editor. + pointer-events: none; + + // the z-index is needed because the 'select' in MDXEditor has its own z-index + // which we have to sit on top of. + z-index: 10; + + // needed so that the .inner progress indicator can be centered + display: flex; + + .inner { + // center the contnts + margin: auto auto; + + font-size: 12px; + letter-spacing: 0.24px; + border-radius: 4px; + background-color: $neutral-900; + padding: 4px 8px; + color: $white; + text-align: center; + } +} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/indicators/TooltipIndicator.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/indicators/TooltipIndicator.tsx new file mode 100644 index 00000000000..9a049665218 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/indicators/TooltipIndicator.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import './TooltipIndicator.scss'; + +type TooltipIndicatorProps = Readonly<{ + label: string; +}>; + +export const TooltipIndicator = (props: TooltipIndicatorProps) => { + const { label } = props; + return ( +
+
{label}
+
+ ); +}; diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx index 01ff5e68e25..d7ed1173481 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx @@ -59,7 +59,8 @@ const Inner = (props: Pick) => { {...props} markdown={`${overview}\n${supported}`} imageHandler="local" - disabled={true} + // disabled={true} + // tooltip="this is a tooltip" SubmitButton={SubmitButton} /> From 726c5cd0e5399d4dcbd633fea858e791d8b2163a Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 19 Sep 2024 13:19:22 -0700 Subject: [PATCH 024/425] workaround for button layout being wrong. --- .../views/components/MarkdownEditor/MarkdownEditor.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss index 8506418136a..6d5011d21d7 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss @@ -104,6 +104,12 @@ body, font-size: inherit !important; } + div[data-editor-block-type='image'] { + button { + height: 24px; + } + } + button { outline: none; } From 67c46445af44dd8cbc748ce905625ade884a370c Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 19 Sep 2024 13:52:16 -0700 Subject: [PATCH 025/425] better way to hide the settings button. --- .../components/MarkdownEditor/MarkdownEditor.scss | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss index 6d5011d21d7..ecb7d4feb91 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss @@ -105,8 +105,14 @@ body, } div[data-editor-block-type='image'] { - button { - height: 24px; + // this can be used to get rid of all button options. + //div:has(button) { + // display: none; + //} + + // this selects and hides the settings button + button:nth-of-type(2) { + display: none; } } From 1811800a2bcf00e26549d31bf40bcce8ce5c20d2 Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 23 Sep 2024 07:24:12 -0700 Subject: [PATCH 026/425] Migrated client usage for topics --- libs/model/src/topic/GetTopics.query.ts | 103 ++++++++++++++---- libs/schemas/src/queries/topic.schemas.ts | 16 ++- .../scripts/state/api/topics/fetchTopics.ts | 18 ++- .../server/api/external-router.ts | 9 +- .../server/api/internal-router.ts | 2 + .../commonwealth/server/routing/router.ts | 8 -- 6 files changed, 111 insertions(+), 45 deletions(-) diff --git a/libs/model/src/topic/GetTopics.query.ts b/libs/model/src/topic/GetTopics.query.ts index f20ec0f10bf..28284329339 100644 --- a/libs/model/src/topic/GetTopics.query.ts +++ b/libs/model/src/topic/GetTopics.query.ts @@ -1,9 +1,19 @@ import { type Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; +import { QueryTypes } from 'sequelize'; import z from 'zod'; import { models } from '../database'; -import { removeUndefined } from '../utils'; -import { formatSequelizePagination } from '../utils/paginationUtils'; +import { TopicAttributes } from '../models/index'; + +const ActiveContestManagers = schemas.ContestManager.extend({ + content: z.array(schemas.ContestAction), + contest_manager: schemas.ContestManager, +}); + +type TopicWithTotalThreads = TopicAttributes & { + total_threads: number; + active_contest_managers: Array>; +}; export function GetTopics(): Query { return { @@ -11,28 +21,81 @@ export function GetTopics(): Query { auth: [], secure: false, body: async ({ payload }) => { - const { community_id, topic_id, include_threads } = payload; - - const includeArray = []; - if (include_threads) { - includeArray.push({ - model: models.Thread, - as: 'threads', - }); + const { + community_id, + topic_id, + include_threads, + include_contest_managers, + } = payload; + + const includeThreads = include_threads + ? ` JOIN "Threads" th + ON t.id = th.topic_id ` + : ''; + + const baseQuery = ` + WITH topic_data AS ( + SELECT t.*, ( + SELECT COUNT(*)::int + FROM "Threads" + WHERE community_id = :community_id AND topic_id = t.id AND deleted_at IS NULL + ) as total_threads + FROM "Topics" t + ${includeThreads} + WHERE t.community_id = :community_id AND (:topic_id IS NULL OR t.id = :topic_id) AND t.deleted_at IS NULL + ) + `; + + let sql = baseQuery; + + if (include_contest_managers) { + sql += ` + SELECT td.*, + COALESCE( + ( + SELECT JSON_AGG( + JSON_BUILD_OBJECT( + 'contest_manager', cm, + 'content', ( + SELECT JSON_AGG(ca) + FROM "ContestActions" ca + WHERE ca.contest_address = cm.contest_address + AND ca.action = 'added' + AND ca.created_at > co.start_time + AND ca.created_at < co.end_time + ) + ) + ) + FROM "ContestTopics" ct + LEFT JOIN "ContestManagers" cm ON cm.contest_address = ct.contest_address + JOIN ( + SELECT contest_address, MAX(contest_id) AS max_contest_id, + MAX(start_time) as start_time, MAX(end_time) as end_time + FROM "Contests" + GROUP BY contest_address + ) co ON cm.contest_address = co.contest_address + WHERE ct.topic_id = td.id + AND cm.community_id = :community_id + AND cm.cancelled = false + AND ( + cm.interval = 0 AND NOW() < co.end_time + OR cm.interval > 0 + ) + ), + '[]'::json + ) as active_contest_managers + FROM topic_data td + `; + } else { + sql += `SELECT *, '[]'::json as active_contest_managers FROM topic_data`; } - const { count, rows: topics } = await models.Topic.findAndCountAll({ - where: removeUndefined({ community_id, id: topic_id }), - include: includeArray, - ...formatSequelizePagination(payload), - paranoid: false, + const topics = await models.sequelize.query(sql, { + replacements: { community_id, topic_id: topic_id ?? null }, + type: QueryTypes.SELECT, }); - return schemas.buildPaginatedResponse( - topics, - count as number, - payload, - ) as unknown as z.infer; + return topics; }, }; } diff --git a/libs/schemas/src/queries/topic.schemas.ts b/libs/schemas/src/queries/topic.schemas.ts index 68fa06180bd..29f54789118 100644 --- a/libs/schemas/src/queries/topic.schemas.ts +++ b/libs/schemas/src/queries/topic.schemas.ts @@ -1,15 +1,21 @@ import { z } from 'zod'; import { Topic } from '../entities'; +import * as schemas from '../index'; import { PG_INT, zBoolean } from '../utils'; -import { PaginatedResultSchema, PaginationParamsSchema } from './pagination'; export const GetTopics = { - input: PaginationParamsSchema.extend({ + input: z.object({ community_id: z.string(), topic_id: PG_INT.optional(), include_threads: zBoolean.default(false), }), - output: PaginatedResultSchema.extend({ - results: Topic.array(), - }), + output: Topic.extend({ + total_threads: z.number(), + active_contest_managers: z.array( + schemas.ContestManager.extend({ + content: z.array(schemas.ContestAction), + contest_manager: schemas.ContestManager, + }), + ), + }).array(), }; diff --git a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts index bd5ea38d7e6..028a42cce3a 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts @@ -1,8 +1,7 @@ -import { useQuery } from '@tanstack/react-query'; -import axios from 'axios'; import Topic from 'models/Topic'; import app from 'state'; -import { ApiEndpoints, SERVER_URL } from 'state/api/config'; +import { ApiEndpoints } from 'state/api/config'; +import { trpc } from '../../../utils/trpcClient'; const TOPICS_STALE_TIME = 30 * 1_000; // 30 s @@ -16,11 +15,9 @@ const fetchTopics = async ({ communityId, includeContestData = false, }: FetchTopicsProps): Promise => { - const response = await axios.get(`${SERVER_URL}${ApiEndpoints.BULK_TOPICS}`, { - params: { - community_id: communityId || app.activeChainId(), - with_contest_managers: includeContestData, - }, + const response = await trpc.topic.getTopics.useQuery({ + community_id: communityId || app.activeChainId(), + include_contest_managers: includeContestData, }); return response.data.result.map((t) => new Topic(t)); @@ -31,9 +28,10 @@ const useFetchTopicsQuery = ({ apiEnabled = true, includeContestData, }: FetchTopicsProps) => { - return useQuery({ + return trpc.topic.getTopics.useQuery({ queryKey: [ApiEndpoints.BULK_TOPICS, communityId, includeContestData], - queryFn: () => fetchTopics({ communityId, includeContestData }), + community_id: communityId || app.activeChainId(), + include_contest_managers: includeContestData, staleTime: TOPICS_STALE_TIME, enabled: apiEnabled, }); diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 0fd0a436630..ea9d3d6cc2e 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -17,8 +17,13 @@ const { deleteTopic, deleteGroup, } = community.trpcRouter; -const { getThreads, createThread, updateThread, createThreadReaction, deleteThread } = - thread.trpcRouter; +const { + getThreads, + createThread, + updateThread, + createThreadReaction, + deleteThread, +} = thread.trpcRouter; const { createComment, createCommentReaction, diff --git a/packages/commonwealth/server/api/internal-router.ts b/packages/commonwealth/server/api/internal-router.ts index 9d9147fc384..69b9f03e0aa 100644 --- a/packages/commonwealth/server/api/internal-router.ts +++ b/packages/commonwealth/server/api/internal-router.ts @@ -12,6 +12,7 @@ import * as loadTest from './load-test'; import * as subscription from './subscription'; import * as superAdmin from './super-admin'; import * as thread from './thread'; +import * as topic from './topic'; import * as user from './user'; import * as wallet from './wallet'; import * as webhook from './webhook'; @@ -20,6 +21,7 @@ const api = { user: user.trpcRouter, community: community.trpcRouter, thread: thread.trpcRouter, + topic: topic.trpcRouter, comment: comment.trpcRouter, integrations: integrations.trpcRouter, feed: feed.trpcRouter, diff --git a/packages/commonwealth/server/routing/router.ts b/packages/commonwealth/server/routing/router.ts index ae6a43f20d8..3a0016553a7 100644 --- a/packages/commonwealth/server/routing/router.ts +++ b/packages/commonwealth/server/routing/router.ts @@ -111,7 +111,6 @@ import { getTagsHandler } from '../routes/tags/get_tags_handler'; import { createThreadPollHandler } from '../routes/threads/create_thread_poll_handler'; import { getThreadPollsHandler } from '../routes/threads/get_thread_polls_handler'; import { getThreadsHandler } from '../routes/threads/get_threads_handler'; -import { getTopicsHandler } from '../routes/topics/get_topics_handler'; import { updateTopicChannelHandler } from '../routes/topics/update_topic_channel_handler'; import { updateTopicsOrderHandler } from '../routes/topics/update_topics_order_handler'; import { failure } from '../types'; @@ -423,13 +422,6 @@ function setupRouter( databaseValidationService.validateCommunity, updateTopicsOrderHandler.bind(this, serverControllers), ); - registerRoute( - router, - 'get', - '/topics' /* OLD: /bulkTopics */, - databaseValidationService.validateCommunity, - getTopicsHandler.bind(this, serverControllers), - ); // reactions registerRoute( From 8fe3c699a86a10cfe03ee574392644d8d697bb60 Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 23 Sep 2024 07:43:44 -0700 Subject: [PATCH 027/425] Fixed lint errors --- libs/schemas/src/queries/topic.schemas.ts | 1 + .../scripts/state/api/topics/fetchTopics.ts | 15 +--- .../controllers/server_topics_controller.ts | 9 -- .../server_topics_methods/get_topics.ts | 89 ------------------- .../routes/topics/get_topics_handler.ts | 22 ----- .../server_topics_controller.spec.ts | 10 --- 6 files changed, 2 insertions(+), 144 deletions(-) delete mode 100644 packages/commonwealth/server/controllers/server_topics_methods/get_topics.ts delete mode 100644 packages/commonwealth/server/routes/topics/get_topics_handler.ts diff --git a/libs/schemas/src/queries/topic.schemas.ts b/libs/schemas/src/queries/topic.schemas.ts index 29f54789118..de84806ca13 100644 --- a/libs/schemas/src/queries/topic.schemas.ts +++ b/libs/schemas/src/queries/topic.schemas.ts @@ -8,6 +8,7 @@ export const GetTopics = { community_id: z.string(), topic_id: PG_INT.optional(), include_threads: zBoolean.default(false), + include_contest_managers: zBoolean.default(false), }), output: Topic.extend({ total_threads: z.number(), diff --git a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts index 028a42cce3a..a495a6fd244 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts @@ -1,4 +1,3 @@ -import Topic from 'models/Topic'; import app from 'state'; import { ApiEndpoints } from 'state/api/config'; import { trpc } from '../../../utils/trpcClient'; @@ -11,18 +10,6 @@ interface FetchTopicsProps { includeContestData?: boolean; } -const fetchTopics = async ({ - communityId, - includeContestData = false, -}: FetchTopicsProps): Promise => { - const response = await trpc.topic.getTopics.useQuery({ - community_id: communityId || app.activeChainId(), - include_contest_managers: includeContestData, - }); - - return response.data.result.map((t) => new Topic(t)); -}; - const useFetchTopicsQuery = ({ communityId, apiEnabled = true, @@ -30,7 +17,7 @@ const useFetchTopicsQuery = ({ }: FetchTopicsProps) => { return trpc.topic.getTopics.useQuery({ queryKey: [ApiEndpoints.BULK_TOPICS, communityId, includeContestData], - community_id: communityId || app.activeChainId(), + community_id: communityId || app.activeChainId()!, include_contest_managers: includeContestData, staleTime: TOPICS_STALE_TIME, enabled: apiEnabled, diff --git a/packages/commonwealth/server/controllers/server_topics_controller.ts b/packages/commonwealth/server/controllers/server_topics_controller.ts index 31aa6f96d48..fc4b4d83214 100644 --- a/packages/commonwealth/server/controllers/server_topics_controller.ts +++ b/packages/commonwealth/server/controllers/server_topics_controller.ts @@ -1,9 +1,4 @@ import { DB } from '@hicommonwealth/model'; -import { - GetTopicsOptions, - GetTopicsResult, - __getTopics, -} from './server_topics_methods/get_topics'; import { UpdateTopicChannelOptions, UpdateTopicChannelResult, @@ -21,10 +16,6 @@ import { export class ServerTopicsController { constructor(public models: DB) {} - async getTopics(options: GetTopicsOptions): Promise { - return __getTopics.call(this, options); - } - async updateTopicsOrder( options: UpdateTopicsOrderOptions, ): Promise { diff --git a/packages/commonwealth/server/controllers/server_topics_methods/get_topics.ts b/packages/commonwealth/server/controllers/server_topics_methods/get_topics.ts deleted file mode 100644 index c9991ae0510..00000000000 --- a/packages/commonwealth/server/controllers/server_topics_methods/get_topics.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { CommunityInstance, TopicAttributes } from '@hicommonwealth/model'; -import * as schemas from '@hicommonwealth/schemas'; -import { QueryTypes } from 'sequelize'; -import { z } from 'zod'; -import { ServerTopicsController } from '../server_topics_controller'; - -export type GetTopicsOptions = { - community: CommunityInstance; - with_contest_managers: boolean; -}; - -const ActiveContestManagers = schemas.ContestManager.extend({ - content: z.array(schemas.ContestAction), - contest_manager: schemas.ContestManager, -}); - -type TopicWithTotalThreads = TopicAttributes & { - total_threads: number; - active_contest_managers: Array>; -}; - -export type GetTopicsResult = TopicWithTotalThreads[]; -export async function __getTopics( - this: ServerTopicsController, - { community, with_contest_managers }: GetTopicsOptions, -): Promise { - const baseQuery = ` - WITH topic_data AS ( - SELECT t.*, ( - SELECT COUNT(*)::int - FROM "Threads" - WHERE community_id = :community_id AND topic_id = t.id AND deleted_at IS NULL - ) as total_threads - FROM "Topics" t - WHERE t.community_id = :community_id AND t.deleted_at IS NULL - ) - `; - - let sql = baseQuery; - - if (with_contest_managers) { - sql += ` - SELECT td.*, - COALESCE( - ( - SELECT JSON_AGG( - JSON_BUILD_OBJECT( - 'contest_manager', cm, - 'content', ( - SELECT JSON_AGG(ca) - FROM "ContestActions" ca - WHERE ca.contest_address = cm.contest_address - AND ca.action = 'added' - AND ca.created_at > co.start_time - AND ca.created_at < co.end_time - ) - ) - ) - FROM "ContestTopics" ct - LEFT JOIN "ContestManagers" cm ON cm.contest_address = ct.contest_address - JOIN ( - SELECT contest_address, MAX(contest_id) AS max_contest_id, - MAX(start_time) as start_time, MAX(end_time) as end_time - FROM "Contests" - GROUP BY contest_address - ) co ON cm.contest_address = co.contest_address - WHERE ct.topic_id = td.id - AND cm.community_id = :community_id - AND cm.cancelled = false - AND ( - cm.interval = 0 AND NOW() < co.end_time - OR cm.interval > 0 - ) - ), - '[]'::json - ) as active_contest_managers - FROM topic_data td - `; - } else { - sql += `SELECT *, '[]'::json as active_contest_managers FROM topic_data`; - } - - const topics = await this.models.sequelize.query(sql, { - replacements: { community_id: community.id }, - type: QueryTypes.SELECT, - }); - - return topics; -} diff --git a/packages/commonwealth/server/routes/topics/get_topics_handler.ts b/packages/commonwealth/server/routes/topics/get_topics_handler.ts deleted file mode 100644 index cb886003d79..00000000000 --- a/packages/commonwealth/server/routes/topics/get_topics_handler.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TopicAttributes } from '@hicommonwealth/model'; -import { Request } from 'express'; -import { ServerControllers } from '../../routing/router'; -import { TypedResponse, success } from '../../types'; - -type GetTopicsResponse = TopicAttributes[]; - -export const getTopicsHandler = async ( - controllers: ServerControllers, - req: Request, - res: TypedResponse, -) => { - const { community } = req; - const { with_contest_managers } = req.query; - - const topics = await controllers.topics.getTopics({ - community: community!, - with_contest_managers: with_contest_managers === 'true', - }); - - return success(res, topics); -}; diff --git a/packages/commonwealth/test/unit/server_controllers/server_topics_controller.spec.ts b/packages/commonwealth/test/unit/server_controllers/server_topics_controller.spec.ts index b2fdaf46aaa..ab2707906ad 100644 --- a/packages/commonwealth/test/unit/server_controllers/server_topics_controller.spec.ts +++ b/packages/commonwealth/test/unit/server_controllers/server_topics_controller.spec.ts @@ -1,5 +1,4 @@ import { CommunityInstance, UserInstance } from '@hicommonwealth/model'; -import { expect } from 'chai'; import { ServerTopicsController } from 'server/controllers/server_topics_controller'; import { describe, test } from 'vitest'; @@ -79,15 +78,6 @@ const createMockedTopicsController = (isAdmin: boolean = false) => { }; describe('ServerTopicsController', () => { - test('#getTopics', async () => { - const { controller, chain } = createMockedTopicsController(); - const topics = await controller.getTopics({ - community: chain, - with_contest_managers: false, - }); - expect(topics).to.have.length(1); - }); - test('#updateTopicChannel', async () => { const { controller, user } = createMockedTopicsController(true); await controller.updateTopicChannel({ From abfcb10e6a06205b650518576c14e087ac1f6d86 Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 23 Sep 2024 08:55:54 -0700 Subject: [PATCH 028/425] Fixed lint errors --- libs/model/src/topic/GetTopics.query.ts | 4 ++-- libs/schemas/src/queries/topic.schemas.ts | 1 + libs/schemas/src/utils.ts | 10 +++++++++- .../scripts/state/api/topics/fetchTopics.ts | 19 +++++++++---------- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/libs/model/src/topic/GetTopics.query.ts b/libs/model/src/topic/GetTopics.query.ts index 28284329339..e296272a39e 100644 --- a/libs/model/src/topic/GetTopics.query.ts +++ b/libs/model/src/topic/GetTopics.query.ts @@ -3,14 +3,14 @@ import * as schemas from '@hicommonwealth/schemas'; import { QueryTypes } from 'sequelize'; import z from 'zod'; import { models } from '../database'; -import { TopicAttributes } from '../models/index'; +import { TopicAttributes } from '../models'; const ActiveContestManagers = schemas.ContestManager.extend({ content: z.array(schemas.ContestAction), contest_manager: schemas.ContestManager, }); -type TopicWithTotalThreads = TopicAttributes & { +type TopicWithTotalThreads = TopicAttributes & { id: number } & { total_threads: number; active_contest_managers: Array>; }; diff --git a/libs/schemas/src/queries/topic.schemas.ts b/libs/schemas/src/queries/topic.schemas.ts index de84806ca13..22465813a4e 100644 --- a/libs/schemas/src/queries/topic.schemas.ts +++ b/libs/schemas/src/queries/topic.schemas.ts @@ -11,6 +11,7 @@ export const GetTopics = { include_contest_managers: zBoolean.default(false), }), output: Topic.extend({ + id: z.number(), total_threads: z.number(), active_contest_managers: z.array( schemas.ContestManager.extend({ diff --git a/libs/schemas/src/utils.ts b/libs/schemas/src/utils.ts index dfcb959b3b2..c2debf83cf9 100644 --- a/libs/schemas/src/utils.ts +++ b/libs/schemas/src/utils.ts @@ -5,7 +5,7 @@ import { MIN_SCHEMA_INT, getFileSizeBytes, } from '@hicommonwealth/shared'; -import { z } from 'zod'; +import { ZodObject, z } from 'zod'; export const paginationSchema = { limit: z.coerce @@ -40,6 +40,14 @@ export const PG_INT = z.number().int().min(MIN_SCHEMA_INT).max(MAX_SCHEMA_INT); export const zBoolean = z.preprocess((v) => v && v !== 'false', z.boolean()); +// turns id: number | undefined -> number. Gets around sequelize restrictions +export const strict = >(schema: T): ZodObject => { + return z.object({ + ...schema.shape, + id: z.number(), + }); +}; + export const ETHERS_BIG_NUMBER = z.object({ hex: z.string().regex(/^0x[0-9a-fA-F]+$/), type: z.literal('BigNumber'), diff --git a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts index a495a6fd244..b34b77256c8 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts @@ -1,9 +1,6 @@ import app from 'state'; -import { ApiEndpoints } from 'state/api/config'; import { trpc } from '../../../utils/trpcClient'; -const TOPICS_STALE_TIME = 30 * 1_000; // 30 s - interface FetchTopicsProps { communityId: string; apiEnabled?: boolean; @@ -15,13 +12,15 @@ const useFetchTopicsQuery = ({ apiEnabled = true, includeContestData, }: FetchTopicsProps) => { - return trpc.topic.getTopics.useQuery({ - queryKey: [ApiEndpoints.BULK_TOPICS, communityId, includeContestData], - community_id: communityId || app.activeChainId()!, - include_contest_managers: includeContestData, - staleTime: TOPICS_STALE_TIME, - enabled: apiEnabled, - }); + return trpc.topic.getTopics.useQuery( + { + community_id: communityId || app.activeChainId()!, + include_contest_managers: includeContestData, + }, + { + enabled: apiEnabled ?? true, + }, + ); }; export default useFetchTopicsQuery; From 4ce424ade735e13296af446692eea505972c5313 Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 23 Sep 2024 14:09:36 -0700 Subject: [PATCH 029/425] Fixed type errors --- .../client/scripts/models/Topic.ts | 28 +++++++++---------- .../api/topics/updateFeaturedTopicsOrder.ts | 2 +- .../NewThreadForm/CustomTopicOption.tsx | 2 +- .../NewThreadForm/NewThreadForm.tsx | 9 +++--- .../NewThreadForm/helpers/useNewThreadForm.ts | 4 +-- .../scripts/views/modals/edit_topic_modal.tsx | 2 +- .../ManageTopicsSection.tsx | 4 +-- .../ManageTopicsSectionOld.tsx | 4 +-- .../views/pages/overview/TopicSummaryRow.tsx | 2 +- 9 files changed, 29 insertions(+), 28 deletions(-) diff --git a/packages/commonwealth/client/scripts/models/Topic.ts b/packages/commonwealth/client/scripts/models/Topic.ts index 0a405841bf0..53631abbd38 100644 --- a/packages/commonwealth/client/scripts/models/Topic.ts +++ b/packages/commonwealth/client/scripts/models/Topic.ts @@ -26,14 +26,14 @@ class Topic { public readonly id: number; public readonly description: string; public readonly telegram?: string; - public readonly communityId: string; - public readonly channelId?: string; - public readonly featuredInSidebar?: boolean; - public readonly featuredInNewPost?: boolean; + public readonly community_id: string; + public readonly channel_id?: string; + public readonly feature_in_sidebar?: boolean; + public readonly featured_in_new_post?: boolean; public order?: number; - public readonly defaultOffchainTemplate?: string; - public totalThreads?: number; - public readonly activeContestManagers: Array< + public readonly default_offchain_template?: string; + public total_threads?: number; + public readonly active_contest_managers: Array< z.infer >; @@ -56,14 +56,14 @@ class Topic { this.description = description; this.telegram = telegram; // @ts-expect-error StrictNullChecks - this.communityId = community_id; - this.featuredInSidebar = featured_in_sidebar; - this.featuredInNewPost = featured_in_new_post; + this.community_id = community_id; + this.feature_in_sidebar = featured_in_sidebar; + this.featured_in_new_post = featured_in_new_post; this.order = order; - this.defaultOffchainTemplate = default_offchain_template; - this.totalThreads = total_threads || 0; - this.channelId = channel_id; - this.activeContestManagers = active_contest_managers || []; + this.default_offchain_template = default_offchain_template; + this.total_threads = total_threads || 0; + this.channel_id = channel_id; + this.active_contest_managers = active_contest_managers || []; } } diff --git a/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts b/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts index 4ae70c3e304..34f42f08bb7 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts @@ -28,7 +28,7 @@ const useUpdateFeaturedTopicsOrderMutation = () => { return useMutation({ mutationFn: updateFeaturedTopicsOrder, onSuccess: async (data, variables) => { - const communityId = variables.featuredTopics[0].communityId; + const communityId = variables.featuredTopics[0].community_id; await queryClient.invalidateQueries({ queryKey: [ApiEndpoints.BULK_TOPICS, communityId], }); diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadForm/CustomTopicOption.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadForm/CustomTopicOption.tsx index ab695f2a11d..c8479cf081f 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadForm/CustomTopicOption.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadForm/CustomTopicOption.tsx @@ -15,7 +15,7 @@ const CustomTopicOption = ({ return ( // @ts-expect-error - {(topic?.activeContestManagers?.length || 0) > 0 && ( + {(topic?.active_contest_managers?.length || 0) > 0 && ( )} {originalProps.label} diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadForm/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadForm/NewThreadForm.tsx index 5f46cebbb4f..bc088918204 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadForm/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadForm/NewThreadForm.tsx @@ -86,13 +86,14 @@ export const NewThreadForm = () => { setCanShowGatingBanner, } = useNewThreadForm(communityId, topicsForSelector); - const hasTopicOngoingContest = threadTopic?.activeContestManagers?.length > 0; + const hasTopicOngoingContest = + threadTopic?.active_contest_managers?.length > 0; const user = useUserStore(); const { checkForSessionKeyRevalidationErrors } = useAuthModalStore(); - const contestTopicError = threadTopic?.activeContestManagers?.length - ? threadTopic?.activeContestManagers + const contestTopicError = threadTopic?.active_contest_managers?.length + ? threadTopic?.active_contest_managers ?.map( (acm) => acm?.content?.filter( @@ -319,7 +320,7 @@ export const NewThreadForm = () => { {contestTopicAffordanceVisible && ( { + contests={threadTopic?.active_contest_managers.map((acm) => { return { name: acm?.contest_manager?.name, address: acm?.contest_manager?.contest_address, diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadForm/helpers/useNewThreadForm.ts b/packages/commonwealth/client/scripts/views/components/NewThreadForm/helpers/useNewThreadForm.ts index c1784d23d2c..1634e8472f8 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadForm/helpers/useNewThreadForm.ts +++ b/packages/commonwealth/client/scripts/views/components/NewThreadForm/helpers/useNewThreadForm.ts @@ -83,10 +83,10 @@ const useNewThreadForm = (communityId: string, topicsForSelector: Topic[]) => { } saveDraft(draft); - if (!threadContentDelta && threadTopic?.defaultOffchainTemplate) { + if (!threadContentDelta && threadTopic?.default_offchain_template) { try { const template = JSON.parse( - threadTopic.defaultOffchainTemplate, + threadTopic.default_offchain_template, ) as DeltaStatic; setThreadContentDelta(template); } catch (e) { diff --git a/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx b/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx index cd172e5a21b..88bc132fd81 100644 --- a/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx +++ b/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx @@ -34,7 +34,7 @@ export const EditTopicModal = ({ }: EditTopicModalProps) => { const { description: descriptionProp, - featuredInSidebar: featuredInSidebarProp, + feature_in_sidebar: featuredInSidebarProp, id, name: nameProp, } = topic; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx index d4c889867d6..d2123f79776 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx @@ -18,7 +18,7 @@ import './ManageTopicsSection.scss'; export const ManageTopicsSection = () => { const getFeaturedTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => topic.featuredInSidebar) + .filter((topic) => topic.feature_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; @@ -37,7 +37,7 @@ export const ManageTopicsSection = () => { const getRegularTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => !topic.featuredInSidebar) + .filter((topic) => !topic.feature_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx index f8fcd81fffa..5ab7e6d9140 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx @@ -18,7 +18,7 @@ import './ManageTopicsSectionOld.scss'; export const ManageTopicsSectionOld = () => { const getFeaturedTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => topic.featuredInSidebar) + .filter((topic) => topic.feature_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; @@ -37,7 +37,7 @@ export const ManageTopicsSectionOld = () => { const getRegularTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => !topic.featuredInSidebar) + .filter((topic) => !topic.feature_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; diff --git a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx index 7817d48f8bf..36dddb41efa 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx @@ -71,7 +71,7 @@ export const TopicSummaryRow = ({ fontWeight="medium" className="threads-count-text" > - {topic.totalThreads || 0} Threads + {topic.total_threads || 0} Threads {topic.description && {topic.description}} From 9f5ef6bd7ec965a7a7f4c8d49b293d6d5f5c601a Mon Sep 17 00:00:00 2001 From: kassad Date: Tue, 24 Sep 2024 07:36:25 -0700 Subject: [PATCH 030/425] Fixed type errors --- .../client/scripts/models/Topic.ts | 71 ++----------------- .../NewThreadForm/NewThreadForm.tsx | 5 +- .../components/sidebar/discussion_section.tsx | 6 +- .../scripts/views/modals/edit_topic_modal.tsx | 3 +- .../Integrations/Discord/Discord.tsx | 3 +- .../Discord/DiscordConnections.tsx | 2 +- .../ManageTopicsSection.tsx | 4 +- .../ManageTopicsSectionOld.tsx | 4 +- .../HeaderWithFilters/HeaderWithFilters.tsx | 24 +++---- .../scripts/views/pages/overview/index.tsx | 6 +- 10 files changed, 30 insertions(+), 98 deletions(-) diff --git a/packages/commonwealth/client/scripts/models/Topic.ts b/packages/commonwealth/client/scripts/models/Topic.ts index 53631abbd38..78ce2829c86 100644 --- a/packages/commonwealth/client/scripts/models/Topic.ts +++ b/packages/commonwealth/client/scripts/models/Topic.ts @@ -1,70 +1,7 @@ import * as schemas from '@hicommonwealth/schemas'; -import { z } from 'zod'; - -const ActiveContestManagers = z.object({ - content: z.array(schemas.ContestAction), - contest_manager: schemas.ContestManager, -}); - -export type TopicAttributes = { - name: string; - id: number; - description: string; - telegram?: string; - community_id?: string; - featured_in_sidebar?: boolean; - featured_in_new_post?: boolean; - order?: number; - default_offchain_template?: string; - total_threads: number; - channel_id?: string; - active_contest_managers: Array>; -}; - -class Topic { - public readonly name: string; - public readonly id: number; - public readonly description: string; - public readonly telegram?: string; - public readonly community_id: string; - public readonly channel_id?: string; - public readonly feature_in_sidebar?: boolean; - public readonly featured_in_new_post?: boolean; - public order?: number; - public readonly default_offchain_template?: string; - public total_threads?: number; - public readonly active_contest_managers: Array< - z.infer - >; - - constructor({ - name, - id, - description, - telegram, - community_id, - featured_in_sidebar, - featured_in_new_post, - order, - default_offchain_template, - total_threads, - channel_id, - active_contest_managers, - }: TopicAttributes) { - this.name = name; - this.id = id; - this.description = description; - this.telegram = telegram; - // @ts-expect-error StrictNullChecks - this.community_id = community_id; - this.feature_in_sidebar = featured_in_sidebar; - this.featured_in_new_post = featured_in_new_post; - this.order = order; - this.default_offchain_template = default_offchain_template; - this.total_threads = total_threads || 0; - this.channel_id = channel_id; - this.active_contest_managers = active_contest_managers || []; - } -} +import z from 'zod'; +// TODO: Inline these types (Current PR is getting too big) +export type TopicAttributes = z.infer[0]; +type Topic = TopicAttributes; export default Topic; diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadForm/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadForm/NewThreadForm.tsx index bc088918204..fcde860f6e0 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadForm/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadForm/NewThreadForm.tsx @@ -1,3 +1,4 @@ +import Topic from 'client/scripts/models/Topic'; import { buildCreateThreadInput } from 'client/scripts/state/api/threads/createThread'; import { useAuthModalStore } from 'client/scripts/state/ui/modals'; import { notifyError } from 'controllers/app/notifications'; @@ -84,7 +85,7 @@ export const NewThreadForm = () => { clearDraft, canShowGatingBanner, setCanShowGatingBanner, - } = useNewThreadForm(communityId, topicsForSelector); + } = useNewThreadForm(communityId, topicsForSelector as unknown as Topic[]); const hasTopicOngoingContest = threadTopic?.active_contest_managers?.length > 0; @@ -275,7 +276,7 @@ export const NewThreadForm = () => { originalProps, topic: topicsForSelector.find( (t) => String(t.id) === originalProps.data.value, - ), + ) as unknown as Topic, }), }} formatOptionLabel={(option) => ( diff --git a/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx b/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx index 1525452f3dd..20d140b2dc7 100644 --- a/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx +++ b/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx @@ -86,7 +86,7 @@ export const DiscussionSection = ({ }); const topics = (topicsData || []) - .filter((t) => t.featuredInSidebar) + .filter((t) => t.featured_in_sidebar) .sort((a, b) => a.name.localeCompare(b.name)) // @ts-expect-error .sort((a, b) => a.order - b.order); @@ -102,7 +102,7 @@ export const DiscussionSection = ({ }; for (const topic of topics) { - if (topic.featuredInSidebar) { + if (topic.featured_in_sidebar) { discussionsDefaultToggleTree.children[topic.name] = { toggledState: true, children: { @@ -193,7 +193,7 @@ export const DiscussionSection = ({ ]; for (const topic of topics) { - if (topic.featuredInSidebar) { + if (topic.featured_in_sidebar) { const topicInvolvedInActiveContest = contestsEnabled && topicIdsIncludedInContest.includes(topic.id); diff --git a/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx b/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx index 88bc132fd81..1d3dfa8eedf 100644 --- a/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx +++ b/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx @@ -34,7 +34,7 @@ export const EditTopicModal = ({ }: EditTopicModalProps) => { const { description: descriptionProp, - feature_in_sidebar: featuredInSidebarProp, + featured_in_sidebar: featuredInSidebarProp, id, name: nameProp, } = topic; @@ -46,7 +46,6 @@ export const EditTopicModal = ({ const [isSaving, setIsSaving] = useState(false); const [description, setDescription] = useState(descriptionProp); const [featuredInSidebar, setFeaturedInSidebar] = useState( - // @ts-expect-error featuredInSidebarProp, ); const [name, setName] = useState(nameProp); diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx index 73615f6481a..6e899b2813d 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx @@ -213,11 +213,10 @@ const Discord = () => { }; }, )} - // @ts-expect-error topics={topics.map((topic) => ({ name: topic.name, id: `${topic.id}`, - channelId: topic.channelId, + channelId: topic.channel_id, }))} refetchTopics={async () => { await refetchTopics(); diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/DiscordConnections.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/DiscordConnections.tsx index f66c377c7ed..24525567491 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/DiscordConnections.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/DiscordConnections.tsx @@ -17,7 +17,7 @@ export const DiscordConnections = ({ refetchTopics, }: { channels: DiscordChannels[]; - topics: { id: string; name: string; channelId: string | null }[]; + topics: { id: string; name: string; channelId: string | null | undefined }[]; refetchTopics: () => Promise; }) => { const topicOptions = topics.map((topic) => { diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx index d2123f79776..f370806508a 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx @@ -18,7 +18,7 @@ import './ManageTopicsSection.scss'; export const ManageTopicsSection = () => { const getFeaturedTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => topic.feature_in_sidebar) + .filter((topic) => topic.featured_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; @@ -37,7 +37,7 @@ export const ManageTopicsSection = () => { const getRegularTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => !topic.feature_in_sidebar) + .filter((topic) => !topic.featured_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx index 5ab7e6d9140..7c6e23aedfc 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx @@ -18,7 +18,7 @@ import './ManageTopicsSectionOld.scss'; export const ManageTopicsSectionOld = () => { const getFeaturedTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => topic.feature_in_sidebar) + .filter((topic) => topic.featured_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; @@ -37,7 +37,7 @@ export const ManageTopicsSectionOld = () => { const getRegularTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => !topic.feature_in_sidebar) + .filter((topic) => !topic.featured_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx index 2b354108848..608d9637b07 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx @@ -121,13 +121,13 @@ export const HeaderWithFilters = ({ ); const featuredTopics = (topics || []) - .filter((t) => t.featuredInSidebar) + .filter((t) => t.featured_in_sidebar) .sort((a, b) => a.name.localeCompare(b.name)) // @ts-expect-error .sort((a, b) => a.order - b.order); const otherTopics = (topics || []) - .filter((t) => !t.featuredInSidebar) + .filter((t) => !t.featured_in_sidebar) .sort((a, b) => a.name.localeCompare(b.name)); const selectedTopic = (topics || []).find((t) => topic && topic === t.name); @@ -367,7 +367,7 @@ export const HeaderWithFilters = ({ setTopicSelectedToEdit( [...featuredTopics, ...otherTopics].find( (x) => x.id === item.id, - ), + ) as unknown as Topic, ) } /> @@ -490,23 +490,19 @@ export const HeaderWithFilters = ({ {(activeContests || []).map((contest) => { - const { end_time, score } = - // @ts-expect-error - contest?.contests[0] || {}; + if (!contest) return; + + const { end_time, score } = contest.contests?.[0] || {}; return ( - address={contest.contest_address} - // @ts-expect-error - name={contest.name} + address={contest!.contest_address!} + name={contest!.name!} imageUrl={contest.image_url} - // @ts-expect-error - topics={contest.topics} - // @ts-expect-error - score={score} + topics={contest!.topics!} + score={score!} decimals={contest.decimals} ticker={contest.ticker} finishDate={end_time ? moment(end_time).toISOString() : ''} diff --git a/packages/commonwealth/client/scripts/views/pages/overview/index.tsx b/packages/commonwealth/client/scripts/views/pages/overview/index.tsx index a1e32dd85ee..5642af47fe5 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/index.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/index.tsx @@ -35,10 +35,10 @@ const OverviewPage = () => { apiEnabled: !!communityId, }); - const anyTopicsFeatured = topics.some((t) => t.featuredInSidebar); + const anyTopicsFeatured = topics.some((t) => t.featured_in_sidebar); const topicsFiltered = anyTopicsFeatured - ? topics.filter((t) => t.featuredInSidebar) + ? topics.filter((t) => t.featured_in_sidebar) : topics; const topicsSorted = anyTopicsFeatured @@ -63,7 +63,7 @@ const OverviewPage = () => { return { monthlyThreads, pinnedThreads: [], // TODO: ask for a pinned thread prop in /threads?active=true api to show pinned threads - topic, + topic: topic as unknown as Topic, }; }); From d4d44c05f76d3ccf33119e69799a287069aba998 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Fri, 27 Sep 2024 13:13:28 -0700 Subject: [PATCH 031/425] neynar webhooks WIP --- .../src/contest/FarcasterAction.command.ts | 17 ++++- .../FarcasterCastCreatedWebhook.command.ts | 14 +++- libs/schemas/src/commands/contest.schemas.ts | 68 ++++++++++++------- libs/schemas/src/entities/topic.schemas.ts | 2 + .../server/api/integration-router.ts | 48 ++++++++++++- .../server/api/internal-router.ts | 50 +------------- 6 files changed, 121 insertions(+), 78 deletions(-) diff --git a/libs/model/src/contest/FarcasterAction.command.ts b/libs/model/src/contest/FarcasterAction.command.ts index 6d74a826423..913f25ea263 100644 --- a/libs/model/src/contest/FarcasterAction.command.ts +++ b/libs/model/src/contest/FarcasterAction.command.ts @@ -1,6 +1,7 @@ import { EventNames, InvalidState, type Command } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; import { models } from '../database'; +import { mustExist } from '../middleware/guards'; import { emitEvent } from '../utils'; // This webhook processes the cast action event: @@ -34,14 +35,24 @@ export function FarcasterActionWebhook(): Command< `contest manager ${contestManager.contest_address} not associated with any topics`, ); } + + const address = (await models.Address.findOne({ + where: { + address: payload.address, + community_id: contestManager.community_id, + }, + }))!; + mustExist('Address', address); + const { id: address_id } = address; + await emitEvent(models.Outbox, [ { event_name: EventNames.ThreadUpvoted, event_payload: { - address: payload.address, - address_id: 0, + address_id: address_id!, reaction: 'like', - communityId: contestManager.community_id, + community_id: contestManager.community_id, + thread_id: 0, topicId: contestTopic.topic_id, contestManagers: [contestManager.toJSON()], }, diff --git a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts index 43b8ba4cfd6..262b4388bb6 100644 --- a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts +++ b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts @@ -11,6 +11,16 @@ export function FarcasterCastCreatedWebhook(): Command< ...schemas.FarcasterCastCreatedWebhook, auth: [], body: async ({ payload }) => { + console.log('PAYLOAD: ', payload); + + if (payload.data.embeds.length === 0) { + // not const embed + return; + } + + const url = new URL(payload.data.embeds[0].url); + console.log('url pathname: ', url.pathname); + // append frame hash to Contest Manager await models.sequelize.query( ` @@ -24,10 +34,12 @@ export function FarcasterCastCreatedWebhook(): Command< { replacements: { newHash: payload.data.hash, - farcasterFrameUrl: payload.data.root_parent_url, + farcasterFrameUrl: url.pathname, }, }, ); + + return { status: 'ok' }; }, }; } diff --git a/libs/schemas/src/commands/contest.schemas.ts b/libs/schemas/src/commands/contest.schemas.ts index 53f12c8932f..772b843ac4a 100644 --- a/libs/schemas/src/commands/contest.schemas.ts +++ b/libs/schemas/src/commands/contest.schemas.ts @@ -77,30 +77,15 @@ export const PerformContestRollovers = { export const FarcasterCastCreatedWebhook = { input: z.object({ - id: z.string(), // TODO: remove this - address: z.string(), - frame_url: z.string(), - button_index: z.number(), - cast_id: z.object({ - fid: z.number(), - hash: z.string(), - }), - }), - output: z.object({}), -}; - -export const FarcasterActionWebhook = { - input: z.object({ - id: z.string(), // TODO: remove this created_at: z.number(), - type: z.literal('cast.created'), + type: z.string(), data: z.object({ object: z.string(), hash: z.string(), thread_hash: z.string(), parent_hash: z.string().nullable(), - parent_url: z.string(), - root_parent_url: z.string(), + parent_url: z.string().nullable(), + root_parent_url: z.string().nullable(), parent_author: z.object({ fid: z.number().nullable(), }), @@ -110,25 +95,58 @@ export const FarcasterActionWebhook = { custody_address: z.string(), username: z.string(), display_name: z.string(), - pfp_url: z.string(), - profile: z.any().nullish(), // TODO: Adjust this based on the actual structure of the "profile" object + pfp_url: z.string().url(), + profile: z.object({ + bio: z.object({ + text: z.string(), + }), + }), follower_count: z.number(), following_count: z.number(), - verifications: z.array(z.string()), + verifications: z.array(z.unknown()), + verified_addresses: z.object({ + eth_addresses: z.array(z.string()), + sol_addresses: z.array(z.string()), + }), active_status: z.string(), + power_badge: z.boolean(), }), text: z.string(), timestamp: z.string(), - embeds: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "embeds" array + embeds: z.array( + z.object({ + url: z.string().url(), + metadata: z.object({ + content_type: z.string(), + content_length: z.string(), + _status: z.string(), + image: z.object({ + width_px: z.number(), + height_px: z.number(), + }), + }), + }), + ), reactions: z.object({ - likes: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "likes" array - recasts: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "recasts" array + likes_count: z.number(), + recasts_count: z.number(), + likes: z.array(z.unknown()), + recasts: z.array(z.unknown()), }), replies: z.object({ count: z.number(), }), - mentioned_profiles: z.array(z.any()), // TODO: Adjust this based on the actual structure of the "mentioned_profiles" array + channel: z.string().nullable(), + mentioned_profiles: z.array(z.unknown()), + event_timestamp: z.string(), }), }), + output: z.object({ + status: z.literal('ok'), + }), +}; + +export const FarcasterActionWebhook = { + input: z.object({}), output: z.object({}), }; diff --git a/libs/schemas/src/entities/topic.schemas.ts b/libs/schemas/src/entities/topic.schemas.ts index 3d6b9b0290d..a5e230c68be 100644 --- a/libs/schemas/src/entities/topic.schemas.ts +++ b/libs/schemas/src/entities/topic.schemas.ts @@ -105,5 +105,7 @@ export const ContestManager = z ), topics: z.array(Topic).nullish(), contests: z.array(Contest).nullish(), + farcaster_frame_url: z.string().nullish(), + farcaster_frame_hashes: z.array(z.string()).nullish(), }) .describe('On-Chain Contest Manager'); diff --git a/packages/commonwealth/server/api/integration-router.ts b/packages/commonwealth/server/api/integration-router.ts index f0b39cbed4b..4fa44203c10 100644 --- a/packages/commonwealth/server/api/integration-router.ts +++ b/packages/commonwealth/server/api/integration-router.ts @@ -1,5 +1,11 @@ import { express } from '@hicommonwealth/adapters'; -import { ChainEvents, Comment, Thread, models } from '@hicommonwealth/model'; +import { + ChainEvents, + Comment, + Contest, + Thread, + models, +} from '@hicommonwealth/model'; import { RequestHandler, Router, raw } from 'express'; import DatabaseValidationService from 'server/middleware/databaseValidationService'; @@ -66,6 +72,46 @@ function build(validator: DatabaseValidationService) { express.command(ChainEvents.ChainEventCreated()), ); + // Farcaster webhooks + router.post( + '/farcaster/CastCreated', + (req, _, next) => { + console.log('BODY: ', JSON.stringify(req.body, null, 2)); + next(); + }, + express.command(Contest.FarcasterCastCreatedWebhook()), + ); + + // router.post( + // '/farcaster/ReplyCastCreated', + // raw({ type: '*/*', limit: '10mb', inflate: true }), + // (req, _, next) => { + // // TODO: verify frame signature message + // return next(); + // }, + // // parse body as JSON (native express.json middleware doesn't work here) + // (req, _, next) => { + // req.body = JSON.parse(req.body); + // next(); + // }, + // express.command(Contest.FarcasterReplyCastCreatedWebhook()), + // ); + + // router.post( + // '/farcaster/action', + // raw({ type: '*/*', limit: '10mb', inflate: true }), + // (req, _, next) => { + // // TODO: verify frame signature message + // return next(); + // }, + // // parse body as JSON (native express.json middleware doesn't work here) + // (req, _, next) => { + // req.body = JSON.parse(req.body); + // next(); + // }, + // express.command(Contest.FarcasterActionWebhook()), + // ); + // Discord BOT integration router.post( '/bot/threads', diff --git a/packages/commonwealth/server/api/internal-router.ts b/packages/commonwealth/server/api/internal-router.ts index f9e3397bc6c..00c90b4a128 100644 --- a/packages/commonwealth/server/api/internal-router.ts +++ b/packages/commonwealth/server/api/internal-router.ts @@ -1,7 +1,6 @@ -import { express, trpc } from '@hicommonwealth/adapters'; -import { Contest } from '@hicommonwealth/model'; +import { trpc } from '@hicommonwealth/adapters'; import cors from 'cors'; -import { Router, raw } from 'express'; +import { Router } from 'express'; import { config } from '../config'; import * as comment from './comment'; import * as community from './community'; @@ -46,51 +45,6 @@ export type API = typeof trpcRouter; router.use('/trpc', trpc.toExpress(trpcRouter)); -router.post( - '/farcaster/CastCreated', - raw({ type: '*/*', limit: '10mb', inflate: true }), - (req, _, next) => { - // TODO: verify frame signature message - return next(); - }, - // parse body as JSON (native express.json middleware doesn't work here) - (req, _, next) => { - req.body = JSON.parse(req.body); - next(); - }, - express.command(Contest.FarcasterCastCreatedWebhook()), -); - -router.post( - '/farcaster/ReplyCastCreated', - raw({ type: '*/*', limit: '10mb', inflate: true }), - (req, _, next) => { - // TODO: verify frame signature message - return next(); - }, - // parse body as JSON (native express.json middleware doesn't work here) - (req, _, next) => { - req.body = JSON.parse(req.body); - next(); - }, - express.command(Contest.FarcasterReplyCastCreatedWebhook()), -); - -router.post( - '/farcaster/action', - raw({ type: '*/*', limit: '10mb', inflate: true }), - (req, _, next) => { - // TODO: verify frame signature message - return next(); - }, - // parse body as JSON (native express.json middleware doesn't work here) - (req, _, next) => { - req.body = JSON.parse(req.body); - next(); - }, - express.command(Contest.FarcasterActionWebhook()), -); - if (config.NODE_ENV !== 'production') { router.use(cors()); trpc.useOAS(router, trpcRouter, { From 351727bc21acc8f41004b7f3d0d0e57154405e76 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Tue, 1 Oct 2024 08:06:37 -0700 Subject: [PATCH 032/425] neynar reply webhook --- libs/core/src/integration/events.schemas.ts | 1 + libs/model/package.json | 1 + libs/model/src/config.ts | 8 +- .../FarcasterCastCreatedWebhook.command.ts | 51 +++- ...arcasterReplyCastCreatedWebhook.command.ts | 42 +-- .../src/utils/buildFarcasterWebhookName.ts | 6 + .../server/api/integration-router.ts | 24 +- pnpm-lock.yaml | 261 +++++++++++++----- 8 files changed, 281 insertions(+), 113 deletions(-) create mode 100644 libs/model/src/utils/buildFarcasterWebhookName.ts diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index bf49d1c0966..447034bee1d 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -20,6 +20,7 @@ import { import { EventMetadata } from './util.schemas'; export const ThreadCreated = Thread.omit({ search: true }).extend({ + address: z.string().nullish(), contestManagers: z.array(z.object({ contest_address: z.string() })).nullish(), }); export const ThreadUpvoted = Reaction.omit({ comment_id: true }).extend({ diff --git a/libs/model/package.json b/libs/model/package.json index e5cb9b38059..84f086f9518 100644 --- a/libs/model/package.json +++ b/libs/model/package.json @@ -35,6 +35,7 @@ "@hicommonwealth/core": "workspace:*", "@hicommonwealth/schemas": "workspace:*", "@hicommonwealth/shared": "workspace:*", + "@neynar/nodejs-sdk": "^1.55.0", "@solana/spl-token": "^0.4.6", "@solana/web3.js": "^1.91.6", "async-mutex": "^0.5.0", diff --git a/libs/model/src/config.ts b/libs/model/src/config.ts index 3966cbd3429..eaf1039038f 100644 --- a/libs/model/src/config.ts +++ b/libs/model/src/config.ts @@ -32,6 +32,8 @@ const { ALCHEMY_PUBLIC_APP_KEY, MEMBERSHIP_REFRESH_BATCH_SIZE, MEMBERSHIP_REFRESH_TTL_SECONDS, + NEYNAR_API_KEY, + NEYNAR_REPLY_WEBHOOK_URL, } = process.env; const NAME = @@ -82,6 +84,8 @@ export const config = configure( ? parseInt(MAX_USER_POSTS_PER_CONTEST, 10) : 2, FLAG_FARCASTER_CONTEST: FLAG_FARCASTER_CONTEST === 'true', + NEYNAR_API_KEY: NEYNAR_API_KEY, + NEYNAR_REPLY_WEBHOOK_URL: NEYNAR_REPLY_WEBHOOK_URL, }, AUTH: { JWT_SECRET: JWT_SECRET || DEFAULTS.JWT_SECRET, @@ -171,7 +175,9 @@ export const config = configure( CONTESTS: z.object({ MIN_USER_ETH: z.number(), MAX_USER_POSTS_PER_CONTEST: z.number().int(), - FLAG_FARCASTER_CONTEST: z.boolean(), + FLAG_FARCASTER_CONTEST: z.boolean().nullish(), + NEYNAR_API_KEY: z.string().nullish(), + NEYNAR_REPLY_WEBHOOK_URL: z.string().nullish(), }), AUTH: z .object({ diff --git a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts index 262b4388bb6..506f12820b1 100644 --- a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts +++ b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts @@ -1,6 +1,12 @@ import { type Command } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; +import { NeynarAPIClient } from '@neynar/nodejs-sdk'; +import { config } from '../config'; import { models } from '../database'; +import { mustExist } from '../middleware/guards'; +import { buildFarcasterWebhookName } from '../utils/buildFarcasterWebhookName'; + +const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); // This webhook processes the "cast.created" event from Neynar: // https://docs.neynar.com/docs/how-to-setup-webhooks-from-the-dashboard @@ -11,34 +17,57 @@ export function FarcasterCastCreatedWebhook(): Command< ...schemas.FarcasterCastCreatedWebhook, auth: [], body: async ({ payload }) => { - console.log('PAYLOAD: ', payload); + // console.log('PAYLOAD: ', payload); if (payload.data.embeds.length === 0) { - // not const embed return; } - const url = new URL(payload.data.embeds[0].url); - console.log('url pathname: ', url.pathname); + // get frame URL from embed + const url = new URL(payload.data.embeds[0].url).pathname; + console.log('URL: ', url); + const castHash = payload.data.hash; // append frame hash to Contest Manager - await models.sequelize.query( + const [results] = await models.sequelize.query( ` UPDATE "ContestManagers" SET "farcaster_frame_hashes" = COALESCE( - array_append("farcaster_frame_hashes", :newHash), - ARRAY[:newHash] + array_append("farcaster_frame_hashes", :cast_hash), + ARRAY[:cast_hash] ) - WHERE "farcaster_frame_url" = :farcasterFrameUrl - `, + WHERE + "farcaster_frame_url" = :farcaster_frame_url + RETURNING "contest_address" + `, { replacements: { - newHash: payload.data.hash, - farcasterFrameUrl: url.pathname, + cast_hash: castHash, + farcaster_frame_url: url, + }, + }, + ); + + const contestAddress = (results as Array<{ contest_address?: string }>)[0] + ?.contest_address; + mustExist('Contest Manager', contestAddress); + + // create webhook to listen for replies on this cast + const webhookName = buildFarcasterWebhookName(contestAddress, castHash); + const webhook = await client.publishWebhook( + webhookName, + config.CONTESTS.NEYNAR_REPLY_WEBHOOK_URL!, + { + subscription: { + 'cast.created': { + parent_hashes: [payload.data.hash], + }, }, }, ); + console.log(webhook); + return { status: 'ok' }; }, }; diff --git a/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts b/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts index 8ba5bc54539..3851ad008ea 100644 --- a/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts +++ b/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts @@ -1,6 +1,8 @@ -import { EventNames, InvalidState, type Command } from '@hicommonwealth/core'; +import { EventNames, type Command } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; +import { Op } from 'sequelize'; import { models } from '../database'; +import { mustExist } from '../middleware/guards'; import { emitEvent } from '../utils'; // This webhook processes the "cast.created" event @@ -13,28 +15,32 @@ export function FarcasterReplyCastCreatedWebhook(): Command< ...schemas.FarcasterCastCreatedWebhook, auth: [], body: async ({ payload }) => { - // map FC CastCreated to CW ThreadCreated + // console.log('REPLY: ', payload); + + mustExist('Parent Hash', payload.data.parent_hash); + const contestManager = await models.ContestManager.findOne({ where: { - farcaster_frame_url: payload.data.root_parent_url, + cancelled: false, + ended: { + [Op.not]: true, + }, + farcaster_frame_hashes: { + [Op.contains]: [payload.data.parent_hash!], + }, }, }); - if (!contestManager) { - throw new InvalidState( - `contest manager not found for frame: ${payload.data.root_parent_url}`, - ); - } - // assuming farcaster contest only has 1 topic + mustExist('Contest Manager', contestManager); + + console.log(contestManager); + const contestTopic = await models.ContestTopic.findOne({ where: { contest_address: contestManager.contest_address, }, }); - if (!contestTopic) { - throw new InvalidState( - `contest manager ${contestManager.contest_address} not associated with any topics`, - ); - } + mustExist('Contest Topic', contestTopic); + await emitEvent(models.Outbox, [ { event_name: EventNames.ThreadCreated, @@ -44,14 +50,18 @@ export function FarcasterReplyCastCreatedWebhook(): Command< community_id: contestManager.community_id, topic_id: contestTopic.topic_id, title: 'Farcaster Contest Reply', + body: payload.data.text, kind: 'discussion', stage: 'active', view_count: 0, reaction_count: 0, reaction_weights_sum: 0, comment_count: 0, - max_notif_id: 0, - contestManagers: [contestManager.toJSON()], + contestManagers: [ + { + contest_address: contestManager.contest_address, + }, + ], }, }, ]); diff --git a/libs/model/src/utils/buildFarcasterWebhookName.ts b/libs/model/src/utils/buildFarcasterWebhookName.ts new file mode 100644 index 00000000000..8ecfc03ec9a --- /dev/null +++ b/libs/model/src/utils/buildFarcasterWebhookName.ts @@ -0,0 +1,6 @@ +export function buildFarcasterWebhookName( + contestAddress: string, + castHash: string, +) { + return `farcaster-contest-webhook-${contestAddress}-${castHash}`; +} diff --git a/packages/commonwealth/server/api/integration-router.ts b/packages/commonwealth/server/api/integration-router.ts index 4fa44203c10..d0730ffceec 100644 --- a/packages/commonwealth/server/api/integration-router.ts +++ b/packages/commonwealth/server/api/integration-router.ts @@ -76,26 +76,20 @@ function build(validator: DatabaseValidationService) { router.post( '/farcaster/CastCreated', (req, _, next) => { - console.log('BODY: ', JSON.stringify(req.body, null, 2)); + console.log('CastCreated BODY: ', JSON.stringify(req.body, null, 2)); next(); }, express.command(Contest.FarcasterCastCreatedWebhook()), ); - // router.post( - // '/farcaster/ReplyCastCreated', - // raw({ type: '*/*', limit: '10mb', inflate: true }), - // (req, _, next) => { - // // TODO: verify frame signature message - // return next(); - // }, - // // parse body as JSON (native express.json middleware doesn't work here) - // (req, _, next) => { - // req.body = JSON.parse(req.body); - // next(); - // }, - // express.command(Contest.FarcasterReplyCastCreatedWebhook()), - // ); + router.post( + '/farcaster/ReplyCastCreated', + (req, _, next) => { + console.log('ReplyCastCreated BODY: ', JSON.stringify(req.body, null, 2)); + next(); + }, + express.command(Contest.FarcasterReplyCastCreatedWebhook()), + ); // router.post( // '/farcaster/action', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af00949e871..4454557c0c6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -173,7 +173,7 @@ importers: version: 3.7.0(@swc/helpers@0.5.12)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)) '@vitest/coverage-istanbul': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0)(sass@1.77.0)(terser@5.31.0)) + version: 1.6.0(vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0)) chai: specifier: ^4.3.6 version: 4.4.1 @@ -311,7 +311,7 @@ importers: version: 4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@20.12.10)(jsdom@24.0.0)(sass@1.77.0)(terser@5.31.0) + version: 1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0) wait-on: specifier: ^7.2.0 version: 7.2.0 @@ -505,7 +505,7 @@ importers: version: 6.11.4 web3: specifier: ^4.7.0 - version: 4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + version: 4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) web3-core: specifier: ^4.3.2 version: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -551,7 +551,7 @@ importers: version: 16.4.5 ethers: specifier: 5.7.2 - version: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + version: 5.7.2(bufferutil@4.0.8)(utf-8-validate@6.0.3) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -692,6 +692,9 @@ importers: '@hicommonwealth/shared': specifier: workspace:* version: link:../shared + '@neynar/nodejs-sdk': + specifier: ^1.55.0 + version: 1.55.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) '@solana/spl-token': specifier: ^0.4.6 version: 0.4.6(@solana/web3.js@1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10) @@ -4248,6 +4251,10 @@ packages: '@nestjs/websockets': optional: true + '@neynar/nodejs-sdk@1.55.0': + resolution: {integrity: sha512-gWg9bzfmW6p8CNW+kLMiMKIZkFzVQn6SA+3+l5XMC7uUbRqvzwd3TH85rCTY6dFW7pMijkSGTLzvxvJXmPK+tQ==} + engines: {node: '>=19.9.0'} + '@noble/ciphers@0.5.3': resolution: {integrity: sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==} @@ -4284,6 +4291,10 @@ packages: resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + '@noble/secp256k1@1.7.1': resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} @@ -5911,6 +5922,9 @@ packages: '@scure/base@1.1.6': resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + '@scure/bip32@1.1.5': resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} @@ -5935,6 +5949,9 @@ packages: '@scure/bip39@1.3.0': resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + '@scure/bip39@1.4.0': + resolution: {integrity: sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==} + '@sendgrid/client@6.5.5': resolution: {integrity: sha512-Nbfgo94gbWSL8PIgJfuHoifyOJJepvV8NQkkglctAEfb1hyozKhrzE6v1kPG/z4j0RodaTtXD5LJj/t0q/VhLA==} engines: {node: '>=6.0.0'} @@ -14937,6 +14954,14 @@ packages: typescript: optional: true + viem@2.21.16: + resolution: {integrity: sha512-SvhaPzTj3a+zR/5OmtJ0acjA6oGDrgPg4vtO8KboXtvbjksXEkz+oFaNjZDgxpkqbps2SLi8oPCjdpRm6WgDmw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + vite-bundle-visualizer@1.2.1: resolution: {integrity: sha512-cwz/Pg6+95YbgIDp+RPwEToc4TKxfsFWSG/tsl2DSZd9YZicUag1tQXjJ5xcL7ydvEoaC2FOZeaXOU60t9BRXw==} engines: {node: ^18.19.0 || >=20.6.0} @@ -15773,8 +15798,8 @@ snapshots: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-bucket-endpoint': 3.577.0 @@ -15831,11 +15856,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0)': + '@aws-sdk/client-sso-oidc@3.577.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15874,7 +15899,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.577.0': @@ -15920,11 +15944,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.577.0': + '@aws-sdk/client-sts@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15963,6 +15987,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.576.0': @@ -15996,7 +16021,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-process': 3.577.0 '@aws-sdk/credential-provider-sso': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) @@ -16053,7 +16078,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/types': 3.0.0 @@ -16191,7 +16216,7 @@ snapshots: '@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/shared-ini-file-loader': 3.0.0 @@ -18550,6 +18575,32 @@ snapshots: - bufferutil - utf-8-validate + '@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@6.0.3)': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6(bufferutil@4.0.8)(utf-8-validate@6.0.3) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@ethersproject/random@5.7.0': dependencies: '@ethersproject/bytes': 5.7.0 @@ -20288,6 +20339,26 @@ snapshots: transitivePeerDependencies: - encoding + '@neynar/nodejs-sdk@1.55.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)': + dependencies: + '@openapitools/openapi-generator-cli': 2.13.4 + axios: 1.7.5 + semver: 7.6.0 + viem: 2.21.16(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + transitivePeerDependencies: + - '@nestjs/microservices' + - '@nestjs/platform-express' + - '@nestjs/websockets' + - bufferutil + - class-transformer + - class-validator + - debug + - encoding + - supports-color + - typescript + - utf-8-validate + - zod + '@noble/ciphers@0.5.3': {} '@noble/ciphers@0.6.0': {} @@ -20320,6 +20391,8 @@ snapshots: '@noble/hashes@1.4.0': {} + '@noble/hashes@1.5.0': {} + '@noble/secp256k1@1.7.1': {} '@nodelib/fs.scandir@2.1.5': @@ -22450,6 +22523,8 @@ snapshots: '@scure/base@1.1.6': {} + '@scure/base@1.1.9': {} + '@scure/bip32@1.1.5': dependencies: '@noble/hashes': 1.2.0 @@ -22494,6 +22569,11 @@ snapshots: '@noble/hashes': 1.4.0 '@scure/base': 1.1.6 + '@scure/bip39@1.4.0': + dependencies: + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 + '@sendgrid/client@6.5.5': dependencies: '@sendgrid/helpers': 6.5.5 @@ -24121,7 +24201,7 @@ snapshots: transitivePeerDependencies: - '@swc/helpers' - '@vitest/coverage-istanbul@1.6.0(vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0)(sass@1.77.0)(terser@5.31.0))': + '@vitest/coverage-istanbul@1.6.0(vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0))': dependencies: debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 @@ -24132,7 +24212,7 @@ snapshots: magicast: 0.3.4 picocolors: 1.0.0 test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@20.12.10)(jsdom@24.0.0)(sass@1.77.0)(terser@5.31.0) + vitest: 1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0) transitivePeerDependencies: - supports-color @@ -25059,12 +25139,6 @@ snapshots: optionalDependencies: zod: 3.23.6 - abitype@0.7.1(typescript@5.4.5)(zod@3.23.8): - dependencies: - typescript: 5.4.5 - optionalDependencies: - zod: 3.23.8 - abitype@0.8.11(typescript@5.4.5)(zod@3.23.6): dependencies: typescript: 5.4.5 @@ -25479,7 +25553,6 @@ snapshots: proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - optional: true babel-core@7.0.0-bridge.0(@babel/core@7.24.5): dependencies: @@ -27630,6 +27703,42 @@ snapshots: - bufferutil - utf-8-validate + ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@6.0.3): + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@6.0.3) + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + ethers@6.12.1(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@adraffy/ens-normalize': 1.10.1 @@ -29489,7 +29598,7 @@ snapshots: dependencies: jsdom: 24.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - jsdom@24.0.0: + jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: cssstyle: 4.1.0 data-urls: 5.0.0 @@ -29510,15 +29619,14 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - optional: true - jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3): dependencies: cssstyle: 4.1.0 data-urls: 5.0.0 @@ -29539,12 +29647,13 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + optional: true jsesc@0.5.0: {} @@ -34513,6 +34622,24 @@ snapshots: - utf-8-validate - zod + viem@2.21.16(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.4.0 + abitype: 1.0.5(typescript@5.4.5)(zod@3.23.6) + isows: 1.0.4(ws@8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + webauthn-p256: 0.0.5 + ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + vite-bundle-visualizer@1.2.1(rollup@4.18.0): dependencies: cac: 6.7.14 @@ -34586,7 +34713,7 @@ snapshots: sass: 1.77.0 terser: 5.31.0 - vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0)(sass@1.77.0)(terser@5.31.0): + vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -34610,7 +34737,7 @@ snapshots: why-is-node-running: 2.2.2 optionalDependencies: '@types/node': 20.12.10 - jsdom: 24.0.0 + jsdom: 24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) transitivePeerDependencies: - less - lightningcss @@ -34796,17 +34923,6 @@ snapshots: - typescript - zod - web3-eth-abi@4.2.1(typescript@5.4.5)(zod@3.23.8): - dependencies: - abitype: 0.7.1(typescript@5.4.5)(zod@3.23.8) - web3-errors: 1.1.4 - web3-types: 1.6.0 - web3-utils: 4.2.3 - web3-validator: 2.0.5 - transitivePeerDependencies: - - typescript - - zod - web3-eth-accounts@4.1.2: dependencies: '@ethereumjs/rlp': 4.0.1 @@ -34817,11 +34933,11 @@ snapshots: web3-utils: 4.2.3 web3-validator: 2.0.5 - web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -34833,12 +34949,12 @@ snapshots: - utf-8-validate - zod - web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): + web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) - web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.8) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) web3-types: 1.6.0 web3-utils: 4.2.3 web3-validator: 2.0.5 @@ -34865,13 +34981,13 @@ snapshots: - utf-8-validate - zod - web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): dependencies: '@adraffy/ens-normalize': 1.10.1 web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) + web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -34883,13 +34999,13 @@ snapshots: - utf-8-validate - zod - web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): + web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: '@adraffy/ens-normalize': 1.10.1 web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -34931,10 +35047,10 @@ snapshots: web3-utils: 4.2.3 web3-validator: 2.0.5 - web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) web3-rpc-methods: 1.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -34946,10 +35062,10 @@ snapshots: - utf-8-validate - zod - web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): + web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-rpc-methods: 1.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -34976,7 +35092,7 @@ snapshots: - utf-8-validate - zod - web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): dependencies: setimmediate: 1.0.5 web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -34996,12 +35112,12 @@ snapshots: - utf-8-validate - zod - web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): + web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: setimmediate: 1.0.5 web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.8) + web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) web3-eth-accounts: 4.1.2 web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-providers-ws: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -35164,17 +35280,17 @@ snapshots: web3-types: 1.6.0 zod: 3.23.6 - web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) web3-eth-accounts: 4.1.2 - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) - web3-eth-ens: 4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) + web3-eth-ens: 4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) web3-eth-iban: 4.0.7 - web3-eth-personal: 4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-personal: 4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-providers-http: 4.1.0 web3-providers-ws: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -35189,17 +35305,17 @@ snapshots: - utf-8-validate - zod - web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): + web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) - web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.8) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) web3-eth-accounts: 4.1.2 - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) - web3-eth-ens: 4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-ens: 4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-eth-iban: 4.0.7 - web3-eth-personal: 4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + web3-eth-personal: 4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-providers-http: 4.1.0 web3-providers-ws: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -35427,6 +35543,11 @@ snapshots: bufferutil: 4.0.8 utf-8-validate: 5.0.10 + ws@7.4.6(bufferutil@4.0.8)(utf-8-validate@6.0.3): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 6.0.3 + ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.8 From 8c0c07de6e5ae1674abba19643b21dffd2c06fdd Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 2 Oct 2024 09:34:14 -0700 Subject: [PATCH 033/425] Resolved merge conflicts --- packages/commonwealth/server/api/external-router-middleware.ts | 2 +- packages/commonwealth/server/api/external-router.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/commonwealth/server/api/external-router-middleware.ts b/packages/commonwealth/server/api/external-router-middleware.ts index ce7707d292f..39900aa927c 100644 --- a/packages/commonwealth/server/api/external-router-middleware.ts +++ b/packages/commonwealth/server/api/external-router-middleware.ts @@ -9,7 +9,7 @@ import { config } from '../config'; import * as comment from './comment'; import * as community from './community'; import { router } from './external-router'; -import * as thread from './threads'; +import * as thread from './thread'; const log = logger(import.meta); diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index bc35cdd536a..89eef70bc45 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -57,7 +57,6 @@ const api = { deleteGroup, createThread, updateThread, - createThreadReaction, getThreads, deleteThread, getTopics, From f9254ce540ec398b3cc5677e1f5f56ecd8e87d28 Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 2 Oct 2024 09:41:59 -0700 Subject: [PATCH 034/425] Fixed merge conflicts --- .../scripts/views/pages/discussions/DiscussionsPage.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index 232fdad64d4..18b90cb12f0 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -110,7 +110,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { (domain?.isCustomDomain ? `/archived` : `/${app.activeChainId()}/archived`); const { data: tokenMetadata } = useTokenMetadataQuery({ - tokenId: topicObj?.tokenAddress || '', + tokenId: topicObj?.token_address || '', chainId: ETH_CHAIN_NODE_ID, }); @@ -177,7 +177,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { const isTopicWeighted = weightedVotingEnabled && topicId && - topicObj.weightedVoting === TopicWeightedVoting.ERC20; + topicObj.weighted_voting === TopicWeightedVoting.ERC20; const activeContestsInTopic = contestsData?.filter((contest) => { const isContestInTopic = (contest.topics || []).find( @@ -281,11 +281,11 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { {isTopicWeighted && ( )} From 03a025805c4b7ed39eeed420cd8e60859a04300c Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 2 Oct 2024 10:31:41 -0700 Subject: [PATCH 035/425] Resolved merge conflicts --- packages/commonwealth/client/scripts/models/Thread.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index 74a1837c5e5..faee71e7a84 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -10,7 +10,7 @@ import moment, { Moment } from 'moment'; import { z } from 'zod'; import Comment from './Comment'; import type { ReactionType } from './Reaction'; -import Topic from './Topic'; +import type Topic from './Topic'; import type { IUniqueId } from './interfaces'; import type { ThreadKind, ThreadStage } from './types'; @@ -382,7 +382,7 @@ export class Thread implements IUniqueId { this.createdAt = moment(created_at); this.updatedAt = moment(updated_at); // @ts-expect-error StrictNullChecks - this.topic = topic?.id ? new Topic({ ...(topic || {}) } as any) : null; + this.topic = topic ?? null; this.kind = kind; this.stage = stage; this.authorCommunity = Address?.community_id; From a9aa03d53fca485c4cdf9282c31e6431e4343eee Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 2 Oct 2024 10:36:11 -0700 Subject: [PATCH 036/425] Resolved merge conflicts --- packages/commonwealth/client/scripts/models/Thread.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index faee71e7a84..834d8418a91 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -381,7 +381,6 @@ export class Thread implements IUniqueId { this.identifier = `${id}`; this.createdAt = moment(created_at); this.updatedAt = moment(updated_at); - // @ts-expect-error StrictNullChecks this.topic = topic ?? null; this.kind = kind; this.stage = stage; From b6b3244a0c237755bfabcfd1c702c803375a33f9 Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 2 Oct 2024 10:41:05 -0700 Subject: [PATCH 037/425] Fixed lint errors --- libs/schemas/src/utils.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/libs/schemas/src/utils.ts b/libs/schemas/src/utils.ts index c2debf83cf9..dfcb959b3b2 100644 --- a/libs/schemas/src/utils.ts +++ b/libs/schemas/src/utils.ts @@ -5,7 +5,7 @@ import { MIN_SCHEMA_INT, getFileSizeBytes, } from '@hicommonwealth/shared'; -import { ZodObject, z } from 'zod'; +import { z } from 'zod'; export const paginationSchema = { limit: z.coerce @@ -40,14 +40,6 @@ export const PG_INT = z.number().int().min(MIN_SCHEMA_INT).max(MAX_SCHEMA_INT); export const zBoolean = z.preprocess((v) => v && v !== 'false', z.boolean()); -// turns id: number | undefined -> number. Gets around sequelize restrictions -export const strict = >(schema: T): ZodObject => { - return z.object({ - ...schema.shape, - id: z.number(), - }); -}; - export const ETHERS_BIG_NUMBER = z.object({ hex: z.string().regex(/^0x[0-9a-fA-F]+$/), type: z.literal('BigNumber'), From 8ee95b73f9530ee3d9a4aebae2c65d87abb53e3c Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 2 Oct 2024 13:59:24 -0700 Subject: [PATCH 038/425] Fixed bug on Safari desktop that has the buttons too wide. --- .../components/MarkdownEditor/toolbars/FileUploadButton.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.scss index 08e999c5f4a..c81f4c39796 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.scss @@ -13,8 +13,8 @@ .FilePickerInput { visibility: hidden; - width: 0; - height: 0; + width: 1px; + height: 1px; } .FilePickerButton { From 26fdca06909b162ee7e264b69d58b19c525f5fb2 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 2 Oct 2024 14:06:03 -0700 Subject: [PATCH 039/425] The editor does not have a max height now. --- .../scripts/views/components/MarkdownEditor/MarkdownEditor.scss | 2 +- .../views/pages/MarkdownEditorPage/MarkdownEditorPage.scss | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss index ecb7d4feb91..dc885ed5bb5 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss @@ -62,7 +62,7 @@ body, border-top: 1px solid $neutral-200; min-height: 150px; - max-height: 450px; + //max-height: 450px; } .mdxeditor-toolbar { diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.scss b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.scss index c5336abab0d..3e59f477cec 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.scss +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.scss @@ -4,5 +4,6 @@ .desktop { flex-grow: 1; margin: 16px; + overflow: auto; } } From 1fa82bdc632a5c1984bdd35305c1b0d2c249a419 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 2 Oct 2024 15:16:52 -0700 Subject: [PATCH 040/425] make the outline show. --- .../views/pages/MarkdownEditorPage/MarkdownEditorPage.scss | 7 +++++-- .../views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.scss b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.scss index 3e59f477cec..cacd261242a 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.scss +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.scss @@ -1,9 +1,12 @@ .MarkdownEditorPage { display: flex; flex-grow: 1; - .desktop { + .DesktopInner { flex-grow: 1; margin: 16px; - overflow: auto; } } + +.MarkdownEditorPageDesktop { + overflow: auto; +} diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx index d7ed1173481..c30846ce864 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx @@ -29,8 +29,8 @@ export const MarkdownEditorPage = () => { if (mode === 'desktop') { return ( -
-
+
+
From f62f57837d468e785faf671fa0c86fcc6b73f484 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Wed, 2 Oct 2024 16:02:26 -0700 Subject: [PATCH 041/425] event handling WIP --- libs/core/src/integration/events.schemas.ts | 18 +++- libs/core/src/integration/events.ts | 14 +++ libs/core/src/integration/outbox.schema.ts | 12 +++ .../src/contest/FarcasterAction.command.ts | 93 +++++++++---------- .../FarcasterCastCreatedWebhook.command.ts | 67 ++++--------- libs/model/src/models/reaction.ts | 16 +++- libs/model/src/models/thread.ts | 1 + .../src/policies/ContestWorker.policy.ts | 17 ++-- .../src/policies/FarcasterWorker.policy.ts | 68 ++++++++++++++ libs/model/src/policies/index.ts | 1 + libs/schemas/src/queries/contests.schemas.ts | 2 +- 11 files changed, 197 insertions(+), 112 deletions(-) create mode 100644 libs/model/src/policies/FarcasterWorker.policy.ts diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index 447034bee1d..04d0882ddf6 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -19,11 +19,16 @@ import { } from './chain-event.schemas'; import { EventMetadata } from './util.schemas'; -export const ThreadCreated = Thread.omit({ search: true }).extend({ +export const ThreadCreated = Thread.omit({ + search: true, +}).extend({ address: z.string().nullish(), contestManagers: z.array(z.object({ contest_address: z.string() })).nullish(), }); -export const ThreadUpvoted = Reaction.omit({ comment_id: true }).extend({ +export const ThreadUpvoted = Reaction.omit({ + comment_id: true, +}).extend({ + address: z.string().nullish(), thread_id: PG_INT, community_id: z.string(), topicId: z.number().optional(), @@ -243,3 +248,12 @@ export const SubscriptionPreferencesUpdated = SubscriptionPreference.partial({ created_at: true, updated_at: true, }).merge(SubscriptionPreference.pick({ user_id: true })); + +export const FarcasterCastCreated = EventMetadata.extend({ + cast_hash: z.string(), + frame_url: z.string(), +}).describe('When a farcaster contest cast has been posted'); + +export const FarcasterReplyCastCreated = EventMetadata.extend({ + parent_cast_hash: z.string(), +}).describe('When a reply is posted to a farcaster contest cast'); diff --git a/libs/core/src/integration/events.ts b/libs/core/src/integration/events.ts index 6f7940b036a..473b590a227 100644 --- a/libs/core/src/integration/events.ts +++ b/libs/core/src/integration/events.ts @@ -24,6 +24,8 @@ export enum EventNames { ContestStarted = 'ContestStarted', ContestContentAdded = 'ContestContentAdded', ContestContentUpvoted = 'ContestContentUpvoted', + FarcasterCastCreated = 'FarcasterCastCreated', + FarcasterReplyCastCreated = 'FarcasterReplyCastCreated', // Preferences SubscriptionPreferencesUpdated = 'SubscriptionPreferencesUpdated', @@ -81,4 +83,16 @@ export type EventPairs = | { event_name: EventNames.CommentUpvoted; event_payload: z.infer; + } + | { + event_name: EventNames.CommentUpvoted; + event_payload: z.infer; + } + | { + event_name: EventNames.FarcasterCastCreated; + event_payload: z.infer; + } + | { + event_name: EventNames.FarcasterReplyCastCreated; + event_payload: z.infer; }; diff --git a/libs/core/src/integration/outbox.schema.ts b/libs/core/src/integration/outbox.schema.ts index 9f5f4c1ce77..208aacb95a7 100644 --- a/libs/core/src/integration/outbox.schema.ts +++ b/libs/core/src/integration/outbox.schema.ts @@ -107,4 +107,16 @@ export const Outbox = z.union([ event_payload: events.CommentUpvoted, }) .merge(BaseOutboxProperties), + z + .object({ + event_name: z.literal(EventNames.FarcasterCastCreated), + event_payload: events.FarcasterCastCreated, + }) + .merge(BaseOutboxProperties), + z + .object({ + event_name: z.literal(EventNames.FarcasterReplyCastCreated), + event_payload: events.FarcasterReplyCastCreated, + }) + .merge(BaseOutboxProperties), ]); diff --git a/libs/model/src/contest/FarcasterAction.command.ts b/libs/model/src/contest/FarcasterAction.command.ts index 913f25ea263..82081fc8c45 100644 --- a/libs/model/src/contest/FarcasterAction.command.ts +++ b/libs/model/src/contest/FarcasterAction.command.ts @@ -1,8 +1,5 @@ -import { EventNames, InvalidState, type Command } from '@hicommonwealth/core'; +import { type Command } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { models } from '../database'; -import { mustExist } from '../middleware/guards'; -import { emitEvent } from '../utils'; // This webhook processes the cast action event: // https://docs.farcaster.xyz/reference/actions/spec#actions-specification @@ -13,51 +10,49 @@ export function FarcasterActionWebhook(): Command< ...schemas.FarcasterCastCreatedWebhook, auth: [], body: async ({ payload }) => { - // map FC Action to CW ThreadUpvoted - const contestManager = await models.ContestManager.findOne({ - where: { - farcaster_frame_hashes: payload.cast_id.hash, - }, - }); - if (!contestManager) { - throw new InvalidState( - `contest manager not found for frame: ${payload.cast_id.hash}`, - ); - } - // assuming farcaster contest only has 1 topic - const contestTopic = await models.ContestTopic.findOne({ - where: { - contest_address: contestManager.contest_address, - }, - }); - if (!contestTopic) { - throw new InvalidState( - `contest manager ${contestManager.contest_address} not associated with any topics`, - ); - } - - const address = (await models.Address.findOne({ - where: { - address: payload.address, - community_id: contestManager.community_id, - }, - }))!; - mustExist('Address', address); - const { id: address_id } = address; - - await emitEvent(models.Outbox, [ - { - event_name: EventNames.ThreadUpvoted, - event_payload: { - address_id: address_id!, - reaction: 'like', - community_id: contestManager.community_id, - thread_id: 0, - topicId: contestTopic.topic_id, - contestManagers: [contestManager.toJSON()], - }, - }, - ]); + // // map FC Action to CW ThreadUpvoted + // const contestManager = await models.ContestManager.findOne({ + // where: { + // farcaster_frame_hashes: payload.cast_id.hash, + // }, + // }); + // if (!contestManager) { + // throw new InvalidState( + // `contest manager not found for frame: ${payload.cast_id.hash}`, + // ); + // } + // // assuming farcaster contest only has 1 topic + // const contestTopic = await models.ContestTopic.findOne({ + // where: { + // contest_address: contestManager.contest_address, + // }, + // }); + // if (!contestTopic) { + // throw new InvalidState( + // `contest manager ${contestManager.contest_address} not associated with any topics`, + // ); + // } + // const address = (await models.Address.findOne({ + // where: { + // address: payload.address, + // community_id: contestManager.community_id, + // }, + // }))!; + // mustExist('Address', address); + // const { id: address_id } = address; + // await emitEvent(models.Outbox, [ + // { + // event_name: EventNames.ThreadUpvoted, + // event_payload: { + // address_id: address_id!, + // reaction: 'like', + // community_id: contestManager.community_id, + // thread_id: 0, + // topicId: contestTopic.topic_id, + // contestManagers: [contestManager.toJSON()], + // }, + // }, + // ]); }, }; } diff --git a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts index 506f12820b1..cc7ed805244 100644 --- a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts +++ b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts @@ -1,12 +1,7 @@ -import { type Command } from '@hicommonwealth/core'; +import { EventNames, type Command } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { NeynarAPIClient } from '@neynar/nodejs-sdk'; -import { config } from '../config'; import { models } from '../database'; -import { mustExist } from '../middleware/guards'; -import { buildFarcasterWebhookName } from '../utils/buildFarcasterWebhookName'; - -const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); +import { emitEvent } from '../utils'; // This webhook processes the "cast.created" event from Neynar: // https://docs.neynar.com/docs/how-to-setup-webhooks-from-the-dashboard @@ -18,57 +13,27 @@ export function FarcasterCastCreatedWebhook(): Command< auth: [], body: async ({ payload }) => { // console.log('PAYLOAD: ', payload); - if (payload.data.embeds.length === 0) { + // ignore if no embed return; } - // get frame URL from embed - const url = new URL(payload.data.embeds[0].url).pathname; - console.log('URL: ', url); - const castHash = payload.data.hash; - - // append frame hash to Contest Manager - const [results] = await models.sequelize.query( - ` - UPDATE "ContestManagers" - SET "farcaster_frame_hashes" = COALESCE( - array_append("farcaster_frame_hashes", :cast_hash), - ARRAY[:cast_hash] - ) - WHERE - "farcaster_frame_url" = :farcaster_frame_url - RETURNING "contest_address" - `, - { - replacements: { - cast_hash: castHash, - farcaster_frame_url: url, - }, - }, - ); - - const contestAddress = (results as Array<{ contest_address?: string }>)[0] - ?.contest_address; - mustExist('Contest Manager', contestAddress); - - // create webhook to listen for replies on this cast - const webhookName = buildFarcasterWebhookName(contestAddress, castHash); - const webhook = await client.publishWebhook( - webhookName, - config.CONTESTS.NEYNAR_REPLY_WEBHOOK_URL!, - { - subscription: { - 'cast.created': { - parent_hashes: [payload.data.hash], + const frame_url = new URL(payload.data.embeds[0].url).pathname; + const cast_hash = payload.data.hash; + + await emitEvent( + models.Outbox, + [ + { + event_name: EventNames.FarcasterCastCreated, + event_payload: { + frame_url, + cast_hash, }, }, - }, + ], + null, ); - - console.log(webhook); - - return { status: 'ok' }; }, }; } diff --git a/libs/model/src/models/reaction.ts b/libs/model/src/models/reaction.ts index 64cd60b42f2..ba54ad21cc4 100644 --- a/libs/model/src/models/reaction.ts +++ b/libs/model/src/models/reaction.ts @@ -2,7 +2,12 @@ import { EventNames, stats } from '@hicommonwealth/core'; import { Reaction } from '@hicommonwealth/schemas'; import Sequelize from 'sequelize'; import { z } from 'zod'; -import type { CommentInstance, ModelInstance, ThreadInstance } from '.'; +import type { + AddressAttributes, + CommentInstance, + ModelInstance, + ThreadInstance, +} from '.'; import { emitEvent, getThreadContestManagers } from '../utils'; export type ReactionAttributes = z.infer; @@ -28,6 +33,7 @@ export default ( { hooks: { afterCreate: async (reaction, options) => { + const { Outbox, Address } = sequelize.models; const { thread_id, comment_id } = reaction; if (thread_id) { const [, threads] = await ( @@ -56,13 +62,19 @@ export default ( thread.topic_id, thread.community_id, ); + + const address = (await Address.findByPk( + reaction.address_id, + )) as AddressAttributes | null; + await emitEvent( - sequelize.models.Outbox, + Outbox, [ { event_name: EventNames.ThreadUpvoted, event_payload: { ...reaction.toJSON(), + address: address?.address, community_id: thread.community_id, contestManagers, }, diff --git a/libs/model/src/models/thread.ts b/libs/model/src/models/thread.ts index 3aa75219a10..772f6629523 100644 --- a/libs/model/src/models/thread.ts +++ b/libs/model/src/models/thread.ts @@ -4,6 +4,7 @@ import { getDecodedString } from '@hicommonwealth/shared'; import Sequelize from 'sequelize'; import { z } from 'zod'; import { emitEvent, getThreadContestManagers } from '../utils'; +import { AddressAttributes } from './address'; import type { CommunityAttributes } from './community'; import type { ThreadSubscriptionAttributes } from './thread_subscriptions'; import type { ModelInstance } from './types'; diff --git a/libs/model/src/policies/ContestWorker.policy.ts b/libs/model/src/policies/ContestWorker.policy.ts index 9901f419436..d9eb9c4bf23 100644 --- a/libs/model/src/policies/ContestWorker.policy.ts +++ b/libs/model/src/policies/ContestWorker.policy.ts @@ -20,9 +20,6 @@ export function ContestWorker(): Policy { log.warn('ThreadCreated: payload does not contain topic ID'); return; } - const { address: userAddress } = (await models.Address.findByPk( - payload.address_id, - ))!; const contentUrl = buildThreadContentUrl( payload.community_id!, @@ -51,7 +48,7 @@ export function ContestWorker(): Policy { // on the latest contest const userPostsInContest = c.actions.filter( (action) => - action.actor_address === userAddress && + action.actor_address === payload.address && action.action === 'added', ); const quotaReached = @@ -77,7 +74,7 @@ export function ContestWorker(): Policy { const results = await contestHelper.addContentBatch( chainNodeUrl!, addressesToProcess, - userAddress, + payload.address!, contentUrl, ); @@ -96,11 +93,17 @@ export function ContestWorker(): Policy { } }, ThreadUpvoted: async ({ payload }) => { - const { communityId, topicId, address: userAddress } = payload; + // use address is used instead of address_id because the address + // may belong to a non-CW user (e.g. Farcaster) + const { community_id, topicId, address: userAddress } = payload; if (!topicId) { log.warn('ThreadUpvoted: thread does not contain topic ID'); return; } + if (!userAddress) { + log.warn('ThreadUpvoted: address must be included'); + return; + } const activeContestManagersWithoutVote = await models.sequelize.query<{ url: string; @@ -154,7 +157,7 @@ export function ContestWorker(): Policy { thread_id: payload.thread_id!, actor_address: userAddress, topic_id: topicId, - community_id: communityId, + community_id, }, }, ); diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts new file mode 100644 index 00000000000..076ff857ce9 --- /dev/null +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -0,0 +1,68 @@ +import { events, logger, Policy } from '@hicommonwealth/core'; +import { NeynarAPIClient } from '@neynar/nodejs-sdk'; +import { config, models } from '..'; +import { mustExist } from '../middleware/guards'; +import { buildFarcasterWebhookName } from '../utils/buildFarcasterWebhookName'; + +const log = logger(import.meta); + +const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); + +const inputs = { + CastCreated: events.FarcasterCastCreated, + // ReplyCastCreated: events.FarcasterReplyCastCreated, +}; + +export function FarcasterWorker(): Policy { + return { + inputs, + body: { + CastCreated: async ({ payload }) => { + // append frame hash to Contest Manager + const [results] = await models.sequelize.query( + ` + UPDATE "ContestManagers" + SET "farcaster_frame_hashes" = COALESCE( + array_append("farcaster_frame_hashes", :cast_hash), + ARRAY[:cast_hash] + ) + WHERE + "farcaster_frame_url" = :frame_url + RETURNING "contest_address" + `, + { + replacements: { + cast_hash: payload.cast_hash, + frame_url: payload.frame_url, + }, + }, + ); + + const contestAddress = ( + results as Array<{ contest_address?: string }> + )[0]?.contest_address; + mustExist('Contest Manager', contestAddress); + + // create webhook to listen for replies on this cast + const webhookName = buildFarcasterWebhookName( + contestAddress, + payload.cast_hash, + ); + const webhook = await client.publishWebhook( + webhookName, + config.CONTESTS.NEYNAR_REPLY_WEBHOOK_URL!, + { + subscription: { + 'cast.created': { + parent_hashes: [payload.data.hash], + }, + }, + }, + ); + + log.debug(`created webhook: ${JSON.stringify(webhook, null, 2)}`); + }, + // ReplyCastCreated: async ({ payload }) => {}, + }, + }; +} diff --git a/libs/model/src/policies/index.ts b/libs/model/src/policies/index.ts index c3ce9e53199..8a03459f5e3 100644 --- a/libs/model/src/policies/index.ts +++ b/libs/model/src/policies/index.ts @@ -1 +1,2 @@ export * from './ContestWorker.policy'; +export * from './FarcasterWorker.policy'; diff --git a/libs/schemas/src/queries/contests.schemas.ts b/libs/schemas/src/queries/contests.schemas.ts index b983dffd4e9..085a0e7dcd9 100644 --- a/libs/schemas/src/queries/contests.schemas.ts +++ b/libs/schemas/src/queries/contests.schemas.ts @@ -77,5 +77,5 @@ export const FarcasterAction = { input: z.object({ contest_address: z.string(), }), - output: z.array(ContestLogEntry), + output: z.void(), }; From 6ccdb7700e2e612b5cd8f991dbc42c6cd567c08f Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 3 Oct 2024 04:33:53 -0700 Subject: [PATCH 042/425] fix + cleanup events --- libs/core/src/integration/events.schemas.ts | 16 +- .../FarcasterCastCreatedWebhook.command.ts | 17 +- ...arcasterReplyCastCreatedWebhook.command.ts | 67 ++---- libs/model/src/models/reaction.ts | 1 + .../src/policies/ContestWorker.policy.ts | 206 ++---------------- .../src/policies/FarcasterWorker.policy.ts | 85 +++++--- libs/model/src/policies/utils.ts | 179 +++++++++++++++ libs/schemas/src/commands/contest.schemas.ts | 124 +++++------ pnpm-lock.yaml | 77 ++++--- 9 files changed, 389 insertions(+), 383 deletions(-) create mode 100644 libs/model/src/policies/utils.ts diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index 04d0882ddf6..182516073e1 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -1,5 +1,6 @@ import { Comment, + FarcasterCast, PG_INT, Reaction, SubscriptionPreference, @@ -31,7 +32,7 @@ export const ThreadUpvoted = Reaction.omit({ address: z.string().nullish(), thread_id: PG_INT, community_id: z.string(), - topicId: z.number().optional(), + topic_id: z.number().optional(), contestManagers: z.array(z.object({ contest_address: z.string() })).nullish(), }); export const CommentCreated = Comment.omit({ search: true }).extend({ @@ -249,11 +250,10 @@ export const SubscriptionPreferencesUpdated = SubscriptionPreference.partial({ updated_at: true, }).merge(SubscriptionPreference.pick({ user_id: true })); -export const FarcasterCastCreated = EventMetadata.extend({ - cast_hash: z.string(), - frame_url: z.string(), -}).describe('When a farcaster contest cast has been posted'); +export const FarcasterCastCreated = FarcasterCast.describe( + 'When a farcaster contest cast has been posted', +); -export const FarcasterReplyCastCreated = EventMetadata.extend({ - parent_cast_hash: z.string(), -}).describe('When a reply is posted to a farcaster contest cast'); +export const FarcasterReplyCastCreated = FarcasterCast.describe( + 'When a reply is posted to a farcaster contest cast', +); diff --git a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts index cc7ed805244..49e77db0dbf 100644 --- a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts +++ b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts @@ -1,10 +1,9 @@ -import { EventNames, type Command } from '@hicommonwealth/core'; +import { EventNames, InvalidInput, type Command } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; import { models } from '../database'; import { emitEvent } from '../utils'; -// This webhook processes the "cast.created" event from Neynar: -// https://docs.neynar.com/docs/how-to-setup-webhooks-from-the-dashboard +// This webhook processes the "cast.created" event from Neynar export function FarcasterCastCreatedWebhook(): Command< typeof schemas.FarcasterCastCreatedWebhook > { @@ -12,24 +11,16 @@ export function FarcasterCastCreatedWebhook(): Command< ...schemas.FarcasterCastCreatedWebhook, auth: [], body: async ({ payload }) => { - // console.log('PAYLOAD: ', payload); if (payload.data.embeds.length === 0) { - // ignore if no embed - return; + throw new InvalidInput('embed must exist'); } - // get frame URL from embed - const frame_url = new URL(payload.data.embeds[0].url).pathname; - const cast_hash = payload.data.hash; await emitEvent( models.Outbox, [ { event_name: EventNames.FarcasterCastCreated, - event_payload: { - frame_url, - cast_hash, - }, + event_payload: payload.data, }, ], null, diff --git a/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts b/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts index 3851ad008ea..ad38bda356e 100644 --- a/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts +++ b/libs/model/src/contest/FarcasterReplyCastCreatedWebhook.command.ts @@ -1,13 +1,10 @@ -import { EventNames, type Command } from '@hicommonwealth/core'; +import { EventNames, InvalidInput, type Command } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { Op } from 'sequelize'; import { models } from '../database'; -import { mustExist } from '../middleware/guards'; import { emitEvent } from '../utils'; // This webhook processes the "cast.created" event -// from a programmatic Neynar webhook for REPLIES to a cast: -// https://docs.neynar.com/docs/how-to-setup-webhooks-from-the-dashboard +// from a programmatic Neynar webhook for REPLIES to a cast export function FarcasterReplyCastCreatedWebhook(): Command< typeof schemas.FarcasterCastCreatedWebhook > { @@ -15,56 +12,20 @@ export function FarcasterReplyCastCreatedWebhook(): Command< ...schemas.FarcasterCastCreatedWebhook, auth: [], body: async ({ payload }) => { - // console.log('REPLY: ', payload); + if (!payload.data.parent_hash) { + throw new InvalidInput('parent hash must exist'); + } - mustExist('Parent Hash', payload.data.parent_hash); - - const contestManager = await models.ContestManager.findOne({ - where: { - cancelled: false, - ended: { - [Op.not]: true, - }, - farcaster_frame_hashes: { - [Op.contains]: [payload.data.parent_hash!], - }, - }, - }); - mustExist('Contest Manager', contestManager); - - console.log(contestManager); - - const contestTopic = await models.ContestTopic.findOne({ - where: { - contest_address: contestManager.contest_address, - }, - }); - mustExist('Contest Topic', contestTopic); - - await emitEvent(models.Outbox, [ - { - event_name: EventNames.ThreadCreated, - event_payload: { - address: payload.data.author.custody_address, - address_id: 0, - community_id: contestManager.community_id, - topic_id: contestTopic.topic_id, - title: 'Farcaster Contest Reply', - body: payload.data.text, - kind: 'discussion', - stage: 'active', - view_count: 0, - reaction_count: 0, - reaction_weights_sum: 0, - comment_count: 0, - contestManagers: [ - { - contest_address: contestManager.contest_address, - }, - ], + await emitEvent( + models.Outbox, + [ + { + event_name: EventNames.FarcasterReplyCastCreated, + event_payload: payload.data, }, - }, - ]); + ], + null, + ); }, }; } diff --git a/libs/model/src/models/reaction.ts b/libs/model/src/models/reaction.ts index ba54ad21cc4..80a78be7ae5 100644 --- a/libs/model/src/models/reaction.ts +++ b/libs/model/src/models/reaction.ts @@ -74,6 +74,7 @@ export default ( event_name: EventNames.ThreadUpvoted, event_payload: { ...reaction.toJSON(), + topic_id: thread.topic_id!, address: address?.address, community_id: thread.community_id, contestManagers, diff --git a/libs/model/src/policies/ContestWorker.policy.ts b/libs/model/src/policies/ContestWorker.policy.ts index d9eb9c4bf23..22186aeef31 100644 --- a/libs/model/src/policies/ContestWorker.policy.ts +++ b/libs/model/src/policies/ContestWorker.policy.ts @@ -1,10 +1,6 @@ -import { Actor, events, logger, Policy } from '@hicommonwealth/core'; -import { QueryTypes } from 'sequelize'; -import { config, Contest, getChainNodeUrl, models } from '..'; -import { contestHelper } from '../services/commonProtocol'; +import { events, Policy } from '@hicommonwealth/core'; import { buildThreadContentUrl } from '../utils'; - -const log = logger(import.meta); +import { createOnchainContestContent } from './utils'; const inputs = { ThreadCreated: events.ThreadCreated, @@ -16,192 +12,28 @@ export function ContestWorker(): Policy { inputs, body: { ThreadCreated: async ({ payload }) => { - if (!payload.topic_id) { - log.warn('ThreadCreated: payload does not contain topic ID'); - return; - } - - const contentUrl = buildThreadContentUrl( - payload.community_id!, + const content_url = buildThreadContentUrl( + payload.community_id, payload.id!, ); - - const activeContestManagers = - await Contest.GetActiveContestManagers().body({ - actor: {} as Actor, - payload: { - community_id: payload.community_id, - topic_id: payload.topic_id, - }, - }); - if (!activeContestManagers?.length) { - log.warn('ThreadCreated: no matching contest managers found'); - return; - } - - const chainNodeUrl = activeContestManagers[0]!.url; - - const addressesToProcess = activeContestManagers - .filter((c) => { - // only process contest managers for which - // the user has not exceeded the post limit - // on the latest contest - const userPostsInContest = c.actions.filter( - (action) => - action.actor_address === payload.address && - action.action === 'added', - ); - const quotaReached = - userPostsInContest.length >= - config.CONTESTS.MAX_USER_POSTS_PER_CONTEST; - if (quotaReached) { - log.warn( - `ThreadCreated: user reached post limit for contest ${c.contest_address} (ID ${c.max_contest_id})`, - ); - } - return !quotaReached; - }) - .map((c) => c.contest_address); - - log.debug( - `ThreadCreated: addresses to process: ${JSON.stringify( - addressesToProcess, - null, - 2, - )}`, - ); - - const results = await contestHelper.addContentBatch( - chainNodeUrl!, - addressesToProcess, - payload.address!, - contentUrl, - ); - - const errors = results - .filter(({ status }) => status === 'rejected') - .map( - (result) => - (result as PromiseRejectedResult).reason || '', - ); - - if (errors.length > 0) { - // TODO: ignore duplicate content error - throw new Error( - `addContent failed with errors: ${errors.join(', ')}"`, - ); - } + await createOnchainContestContent({ + community_id: payload.community_id, + topic_id: payload.topic_id!, + content_url, + author_address: payload.address!, + }); }, ThreadUpvoted: async ({ payload }) => { - // use address is used instead of address_id because the address - // may belong to a non-CW user (e.g. Farcaster) - const { community_id, topicId, address: userAddress } = payload; - if (!topicId) { - log.warn('ThreadUpvoted: thread does not contain topic ID'); - return; - } - if (!userAddress) { - log.warn('ThreadUpvoted: address must be included'); - return; - } - - const activeContestManagersWithoutVote = await models.sequelize.query<{ - url: string; - private_url: string; - contest_address: string; - content_id: number; - }>( - ` - SELECT cn.private_url, cn.url, cm.contest_address, added.content_id - FROM "Communities" c - JOIN "ChainNodes" cn ON c.chain_node_id = cn.id - JOIN "ContestManagers" cm ON cm.community_id = c.id - JOIN "ContestTopics" ct ON cm.contest_address = ct.contest_address - JOIN "Contests" co ON cm.contest_address = co.contest_address - AND co.contest_id = ( - SELECT MAX(contest_id) AS max_id - FROM "Contests" c1 - WHERE c1.contest_address = cm.contest_address - ) - JOIN "ContestActions" added on co.contest_address = added.contest_address - AND added.thread_id = :thread_id - AND added.action = 'added' - WHERE ct.topic_id = :topic_id - AND cm.community_id = :community_id - AND cm.cancelled = false - AND ( - cm.interval = 0 AND NOW() < co.end_time - OR - cm.interval > 0 - ) - -- content cannot be a winner in a previous contest - AND NOT EXISTS ( - WITH max_contest AS ( - SELECT MAX(contest_id) AS max_id - FROM "Contests" c1 - WHERE c1.contest_address = cm.contest_address - ) - SELECT c2.score - FROM "Contests" c2, - jsonb_array_elements(c2.score) AS score_result - WHERE - c2.contest_address = cm.contest_address AND - (score_result->>'content_id')::int = added.content_id::int AND - (score_result->>'prize')::float > 0 AND - c2.contest_id != (SELECT max_id FROM max_contest) - ) - `, - { - type: QueryTypes.SELECT, - replacements: { - thread_id: payload.thread_id!, - actor_address: userAddress, - topic_id: topicId, - community_id, - }, - }, - ); - - if (!activeContestManagersWithoutVote?.length) { - // throw to trigger retry in case the content is pending creation - throw new Error( - 'ThreadUpvoted: no matching active contests without actions', - ); - } - - const chainNodeUrl = getChainNodeUrl( - activeContestManagersWithoutVote[0]!, - ); - - log.debug( - `ThreadUpvoted: contest managers to process: ${JSON.stringify( - activeContestManagersWithoutVote, - null, - 2, - )}`, - ); - - const results = await contestHelper.voteContentBatch( - chainNodeUrl!, - userAddress, - activeContestManagersWithoutVote.map((m) => ({ - contestAddress: m.contest_address, - contentId: m.content_id.toString(), - })), + const content_url = buildThreadContentUrl( + payload.community_id, + payload.thread_id, ); - - const errors = results - .filter(({ status }) => status === 'rejected') - .map( - (result) => - (result as PromiseRejectedResult).reason || '', - ); - - if (errors.length > 0) { - throw new Error( - `voteContent failed ${errors.length} times: ${errors.join(', ')}"`, - ); - } + await createOnchainContestContent({ + community_id: payload.community_id, + topic_id: payload.topic_id!, + content_url, + author_address: payload.address!, + }); }, }, }; diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts index 076ff857ce9..aab63ee1c9a 100644 --- a/libs/model/src/policies/FarcasterWorker.policy.ts +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -1,68 +1,91 @@ import { events, logger, Policy } from '@hicommonwealth/core'; import { NeynarAPIClient } from '@neynar/nodejs-sdk'; +import { Op } from 'sequelize'; import { config, models } from '..'; import { mustExist } from '../middleware/guards'; import { buildFarcasterWebhookName } from '../utils/buildFarcasterWebhookName'; +import { createOnchainContestContent } from './utils'; const log = logger(import.meta); const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); const inputs = { - CastCreated: events.FarcasterCastCreated, - // ReplyCastCreated: events.FarcasterReplyCastCreated, + FarcasterCastCreated: events.FarcasterCastCreated, + FarcasterReplyCastCreated: events.FarcasterReplyCastCreated, }; export function FarcasterWorker(): Policy { return { inputs, body: { - CastCreated: async ({ payload }) => { - // append frame hash to Contest Manager - const [results] = await models.sequelize.query( - ` - UPDATE "ContestManagers" - SET "farcaster_frame_hashes" = COALESCE( - array_append("farcaster_frame_hashes", :cast_hash), - ARRAY[:cast_hash] - ) - WHERE - "farcaster_frame_url" = :frame_url - RETURNING "contest_address" - `, - { - replacements: { - cast_hash: payload.cast_hash, - frame_url: payload.frame_url, - }, + FarcasterCastCreated: async ({ payload }) => { + const frame_url = new URL(payload.embeds[0].url).pathname; + + const contestManager = await models.ContestManager.findOne({ + where: { + farcaster_frame_url: frame_url, }, - ); + }); + mustExist('Contest Manager', contestManager); - const contestAddress = ( - results as Array<{ contest_address?: string }> - )[0]?.contest_address; - mustExist('Contest Manager', contestAddress); + // append frame hash to Contest Manager + // NOTE: this will never execute concurrently + contestManager.farcaster_frame_hashes = + contestManager.farcaster_frame_hashes || []; + if (!contestManager.farcaster_frame_hashes.includes(payload.hash)) { + contestManager.farcaster_frame_hashes.push(payload.hash); + } + await contestManager.save(); // create webhook to listen for replies on this cast const webhookName = buildFarcasterWebhookName( - contestAddress, - payload.cast_hash, + contestManager.contest_address, + payload.hash, ); - const webhook = await client.publishWebhook( + await client.publishWebhook( webhookName, config.CONTESTS.NEYNAR_REPLY_WEBHOOK_URL!, { subscription: { 'cast.created': { - parent_hashes: [payload.data.hash], + parent_hashes: [payload.hash], }, }, }, ); + }, + FarcasterReplyCastCreated: async ({ payload }) => { + // find associated contest manager by parent cast hash + const contestManager = await models.ContestManager.findOne({ + where: { + cancelled: false, + ended: { + [Op.not]: true, + }, + farcaster_frame_hashes: { + [Op.contains]: [payload.parent_hash!], + }, + }, + }); + mustExist('Contest Manager', contestManager); + + const contestTopic = await models.ContestTopic.findOne({ + where: { + contest_address: contestManager.contest_address, + }, + }); + mustExist('Contest Topic', contestTopic); - log.debug(`created webhook: ${JSON.stringify(webhook, null, 2)}`); + // create onchain content from reply cast + const content_url = `/farcaster/${payload.hash}`; + await createOnchainContestContent({ + community_id: contestManager.community_id, + topic_id: contestTopic.topic_id, + author_address: payload.author.custody_address, + content_url, + }); }, - // ReplyCastCreated: async ({ payload }) => {}, }, }; } diff --git a/libs/model/src/policies/utils.ts b/libs/model/src/policies/utils.ts new file mode 100644 index 00000000000..848eef9895a --- /dev/null +++ b/libs/model/src/policies/utils.ts @@ -0,0 +1,179 @@ +import { Actor, logger } from '@hicommonwealth/core'; +import { QueryTypes } from 'sequelize'; +import { Contest, config, models } from '..'; +import { contestHelper } from '../services/commonProtocol'; +import { getChainNodeUrl } from '../utils'; + +const log = logger(import.meta); + +export async function createOnchainContestContent(payload: { + community_id: string; + topic_id: number; + content_url: string; + author_address: string; +}) { + const activeContestManagers = await Contest.GetActiveContestManagers().body({ + actor: {} as Actor, + payload: { + community_id: payload.community_id!, + topic_id: payload.topic_id, + }, + }); + if (!activeContestManagers?.length) { + log.warn('createOnchainContestContent: no matching contest managers found'); + return; + } + + const chainNodeUrl = activeContestManagers[0]!.url; + + const addressesToProcess = activeContestManagers + .filter((c) => { + // only process contest managers for which + // the user has not exceeded the post limit + // on the latest contest + const userPostsInContest = c.actions.filter( + (action) => + action.actor_address === payload.author_address && + action.action === 'added', + ); + const quotaReached = + userPostsInContest.length >= config.CONTESTS.MAX_USER_POSTS_PER_CONTEST; + if (quotaReached) { + log.warn( + `createContestContent: user reached post limit for contest ${c.contest_address} (ID ${c.max_contest_id})`, + ); + } + return !quotaReached; + }) + .map((c) => c.contest_address); + + log.debug( + `createContestContent: addresses to process: ${JSON.stringify( + addressesToProcess, + null, + 2, + )}`, + ); + + const results = await contestHelper.addContentBatch( + chainNodeUrl!, + addressesToProcess, + payload.author_address!, + payload.content_url, + ); + + const errors = results + .filter(({ status }) => status === 'rejected') + .map( + (result) => + (result as PromiseRejectedResult).reason || '', + ); + + if (errors.length > 0) { + // TODO: ignore duplicate content error + throw new Error(`addContent failed with errors: ${errors.join(', ')}"`); + } +} + +export async function createOnchainContestVote(payload: { + community_id: string; + topic_id: number; + content_url: string; + author_address: string; +}) { + const activeContestManagersWithoutVote = await models.sequelize.query<{ + url: string; + private_url: string; + contest_address: string; + content_id: number; + }>( + ` + SELECT cn.private_url, cn.url, cm.contest_address, added.content_id + FROM "Communities" c + JOIN "ChainNodes" cn ON c.chain_node_id = cn.id + JOIN "ContestManagers" cm ON cm.community_id = c.id + JOIN "ContestTopics" ct ON cm.contest_address = ct.contest_address + JOIN "Contests" co ON cm.contest_address = co.contest_address + AND co.contest_id = ( + SELECT MAX(contest_id) AS max_id + FROM "Contests" c1 + WHERE c1.contest_address = cm.contest_address + ) + JOIN "ContestActions" added on co.contest_address = added.contest_address + AND added.content_url = :content_url + AND added.action = 'added' + WHERE ct.topic_id = :topic_id + AND cm.community_id = :community_id + AND cm.cancelled = false + AND ( + cm.interval = 0 AND NOW() < co.end_time + OR + cm.interval > 0 + ) + -- content cannot be a winner in a previous contest + AND NOT EXISTS ( + WITH max_contest AS ( + SELECT MAX(contest_id) AS max_id + FROM "Contests" c1 + WHERE c1.contest_address = cm.contest_address + ) + SELECT c2.score + FROM "Contests" c2, + jsonb_array_elements(c2.score) AS score_result + WHERE + c2.contest_address = cm.contest_address AND + (score_result->>'content_id')::int = added.content_id::int AND + (score_result->>'prize')::float > 0 AND + c2.contest_id != (SELECT max_id FROM max_contest) + ) + `, + { + type: QueryTypes.SELECT, + replacements: { + content_url: payload.content_url!, + actor_address: payload.author_address, + topic_id: payload.topic_id, + community_id: payload.community_id, + }, + }, + ); + + if (!activeContestManagersWithoutVote?.length) { + // throw to trigger retry in case the content is pending creation + throw new Error( + 'createOnchainContestVote: no matching active contests without actions', + ); + } + + const chainNodeUrl = getChainNodeUrl(activeContestManagersWithoutVote[0]!); + + log.debug( + `createOnchainContestVote: contest managers to process: ${JSON.stringify( + activeContestManagersWithoutVote, + null, + 2, + )}`, + ); + + const results = await contestHelper.voteContentBatch( + chainNodeUrl!, + payload.author_address, + activeContestManagersWithoutVote.map((m) => ({ + contestAddress: m.contest_address, + contentId: m.content_id.toString(), + })), + ); + + const errors = results + .filter(({ status }) => status === 'rejected') + .map( + (result) => + (result as PromiseRejectedResult).reason || '', + ); + + if (errors.length > 0) { + throw new Error( + `voteContent failed ${errors.length} times: ${errors.join(', ')}"`, + ); + } +} diff --git a/libs/schemas/src/commands/contest.schemas.ts b/libs/schemas/src/commands/contest.schemas.ts index 772b843ac4a..936b39c1149 100644 --- a/libs/schemas/src/commands/contest.schemas.ts +++ b/libs/schemas/src/commands/contest.schemas.ts @@ -75,71 +75,73 @@ export const PerformContestRollovers = { output: z.object({}), }; -export const FarcasterCastCreatedWebhook = { - input: z.object({ - created_at: z.number(), - type: z.string(), - data: z.object({ - object: z.string(), - hash: z.string(), - thread_hash: z.string(), - parent_hash: z.string().nullable(), - parent_url: z.string().nullable(), - root_parent_url: z.string().nullable(), - parent_author: z.object({ - fid: z.number().nullable(), - }), - author: z.object({ - object: z.string(), - fid: z.number(), - custody_address: z.string(), - username: z.string(), - display_name: z.string(), - pfp_url: z.string().url(), - profile: z.object({ - bio: z.object({ - text: z.string(), - }), - }), - follower_count: z.number(), - following_count: z.number(), - verifications: z.array(z.unknown()), - verified_addresses: z.object({ - eth_addresses: z.array(z.string()), - sol_addresses: z.array(z.string()), - }), - active_status: z.string(), - power_badge: z.boolean(), +export const FarcasterCast = z.object({ + object: z.string(), + hash: z.string(), + thread_hash: z.string(), + parent_hash: z.string().nullable(), + parent_url: z.string().nullable(), + root_parent_url: z.string().nullable(), + parent_author: z.object({ + fid: z.number().nullable(), + }), + author: z.object({ + object: z.string(), + fid: z.number(), + custody_address: z.string(), + username: z.string(), + display_name: z.string(), + pfp_url: z.string().url(), + profile: z.object({ + bio: z.object({ + text: z.string(), }), - text: z.string(), - timestamp: z.string(), - embeds: z.array( - z.object({ - url: z.string().url(), - metadata: z.object({ - content_type: z.string(), - content_length: z.string(), - _status: z.string(), - image: z.object({ - width_px: z.number(), - height_px: z.number(), - }), - }), + }), + follower_count: z.number(), + following_count: z.number(), + verifications: z.array(z.unknown()), + verified_addresses: z.object({ + eth_addresses: z.array(z.string()), + sol_addresses: z.array(z.string()), + }), + active_status: z.string(), + power_badge: z.boolean(), + }), + text: z.string(), + timestamp: z.string(), + embeds: z.array( + z.object({ + url: z.string().url(), + metadata: z.object({ + content_type: z.string(), + content_length: z.string(), + _status: z.string(), + image: z.object({ + width_px: z.number(), + height_px: z.number(), }), - ), - reactions: z.object({ - likes_count: z.number(), - recasts_count: z.number(), - likes: z.array(z.unknown()), - recasts: z.array(z.unknown()), - }), - replies: z.object({ - count: z.number(), }), - channel: z.string().nullable(), - mentioned_profiles: z.array(z.unknown()), - event_timestamp: z.string(), }), + ), + reactions: z.object({ + likes_count: z.number(), + recasts_count: z.number(), + likes: z.array(z.unknown()), + recasts: z.array(z.unknown()), + }), + replies: z.object({ + count: z.number(), + }), + channel: z.string().nullable(), + mentioned_profiles: z.array(z.unknown()), + event_timestamp: z.string(), +}); + +export const FarcasterCastCreatedWebhook = { + input: z.object({ + created_at: z.number(), + type: z.string(), + data: FarcasterCast, }), output: z.object({ status: z.literal('ok'), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4454557c0c6..bf2c4f234c3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -505,7 +505,7 @@ importers: version: 6.11.4 web3: specifier: ^4.7.0 - version: 4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) + version: 4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) web3-core: specifier: ^4.3.2 version: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -25139,6 +25139,12 @@ snapshots: optionalDependencies: zod: 3.23.6 + abitype@0.7.1(typescript@5.4.5)(zod@3.23.8): + dependencies: + typescript: 5.4.5 + optionalDependencies: + zod: 3.23.8 + abitype@0.8.11(typescript@5.4.5)(zod@3.23.6): dependencies: typescript: 5.4.5 @@ -34923,6 +34929,17 @@ snapshots: - typescript - zod + web3-eth-abi@4.2.1(typescript@5.4.5)(zod@3.23.8): + dependencies: + abitype: 0.7.1(typescript@5.4.5)(zod@3.23.8) + web3-errors: 1.1.4 + web3-types: 1.6.0 + web3-utils: 4.2.3 + web3-validator: 2.0.5 + transitivePeerDependencies: + - typescript + - zod + web3-eth-accounts@4.1.2: dependencies: '@ethereumjs/rlp': 4.0.1 @@ -34933,11 +34950,11 @@ snapshots: web3-utils: 4.2.3 web3-validator: 2.0.5 - web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): + web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -34949,12 +34966,12 @@ snapshots: - utf-8-validate - zod - web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) - web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.8) web3-types: 1.6.0 web3-utils: 4.2.3 web3-validator: 2.0.5 @@ -34981,13 +34998,13 @@ snapshots: - utf-8-validate - zod - web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): + web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: '@adraffy/ens-normalize': 1.10.1 web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -34999,13 +35016,13 @@ snapshots: - utf-8-validate - zod - web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): dependencies: '@adraffy/ens-normalize': 1.10.1 web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -35047,10 +35064,10 @@ snapshots: web3-utils: 4.2.3 web3-validator: 2.0.5 - web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): + web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-rpc-methods: 1.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -35062,10 +35079,10 @@ snapshots: - utf-8-validate - zod - web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) web3-rpc-methods: 1.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-types: 1.6.0 web3-utils: 4.2.3 @@ -35092,7 +35109,7 @@ snapshots: - utf-8-validate - zod - web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): + web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: setimmediate: 1.0.5 web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -35112,12 +35129,12 @@ snapshots: - utf-8-validate - zod - web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): dependencies: setimmediate: 1.0.5 web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) + web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.8) web3-eth-accounts: 4.1.2 web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-providers-ws: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -35280,17 +35297,17 @@ snapshots: web3-types: 1.6.0 zod: 3.23.6 - web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): + web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) web3-eth-accounts: 4.1.2 - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-eth-ens: 4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) + web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-ens: 4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-eth-iban: 4.0.7 - web3-eth-personal: 4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) + web3-eth-personal: 4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-providers-http: 4.1.0 web3-providers-ws: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -35305,17 +35322,17 @@ snapshots: - utf-8-validate - zod - web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) - web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) + web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.8) web3-eth-accounts: 4.1.2 - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) - web3-eth-ens: 4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + web3-eth-ens: 4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) web3-eth-iban: 4.0.7 - web3-eth-personal: 4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + web3-eth-personal: 4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) web3-providers-http: 4.1.0 web3-providers-ws: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) From 6e52e42c6933d5e8d4ca3cda1b6fa49e4ef023af Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 3 Oct 2024 05:28:19 -0700 Subject: [PATCH 043/425] lint --- libs/model/src/policies/FarcasterWorker.policy.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts index aab63ee1c9a..90615fa500c 100644 --- a/libs/model/src/policies/FarcasterWorker.policy.ts +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -1,4 +1,4 @@ -import { events, logger, Policy } from '@hicommonwealth/core'; +import { events, Policy } from '@hicommonwealth/core'; import { NeynarAPIClient } from '@neynar/nodejs-sdk'; import { Op } from 'sequelize'; import { config, models } from '..'; @@ -6,8 +6,6 @@ import { mustExist } from '../middleware/guards'; import { buildFarcasterWebhookName } from '../utils/buildFarcasterWebhookName'; import { createOnchainContestContent } from './utils'; -const log = logger(import.meta); - const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); const inputs = { From 6286940247f86908e54c5b5004b8a52ea688c293 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 3 Oct 2024 06:26:06 -0700 Subject: [PATCH 044/425] cast action metadata --- libs/model/src/config.ts | 3 ++ .../src/contest/FarcasterAction.query.ts | 11 ------- ...nd.ts => FarcasterUpvoteAction.command.ts} | 2 +- .../GetFarcasterUpvoteActionMetadata.query.ts | 25 +++++++++++++++ libs/model/src/contest/index.ts | 3 +- libs/schemas/src/queries/contests.schemas.ts | 14 +++++++++ .../server/api/integration-router.ts | 31 ++++++------------- 7 files changed, 54 insertions(+), 35 deletions(-) delete mode 100644 libs/model/src/contest/FarcasterAction.query.ts rename libs/model/src/contest/{FarcasterAction.command.ts => FarcasterUpvoteAction.command.ts} (97%) create mode 100644 libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts diff --git a/libs/model/src/config.ts b/libs/model/src/config.ts index f7c61869da0..3df02aa03f7 100644 --- a/libs/model/src/config.ts +++ b/libs/model/src/config.ts @@ -37,6 +37,7 @@ const { MEMBERSHIP_REFRESH_TTL_SECONDS, NEYNAR_API_KEY, NEYNAR_REPLY_WEBHOOK_URL, + FARCASTER_ACTION_URL, } = process.env; const NAME = @@ -90,6 +91,7 @@ export const config = configure( FLAG_FARCASTER_CONTEST: FLAG_FARCASTER_CONTEST === 'true', NEYNAR_API_KEY: NEYNAR_API_KEY, NEYNAR_REPLY_WEBHOOK_URL: NEYNAR_REPLY_WEBHOOK_URL, + FARCASTER_ACTION_URL: FARCASTER_ACTION_URL, }, AUTH: { JWT_SECRET: JWT_SECRET || DEFAULTS.JWT_SECRET, @@ -190,6 +192,7 @@ export const config = configure( FLAG_FARCASTER_CONTEST: z.boolean().nullish(), NEYNAR_API_KEY: z.string().nullish(), NEYNAR_REPLY_WEBHOOK_URL: z.string().nullish(), + FARCASTER_ACTION_URL: z.string().nullish(), }), AUTH: z .object({ diff --git a/libs/model/src/contest/FarcasterAction.query.ts b/libs/model/src/contest/FarcasterAction.query.ts deleted file mode 100644 index 77c30c6fbf6..00000000000 --- a/libs/model/src/contest/FarcasterAction.query.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Query } from '@hicommonwealth/core'; -import * as schemas from '@hicommonwealth/schemas'; - -export function FarcasterAction(): Query { - return { - ...schemas.FarcasterAction, - auth: [], - secure: false, - body: async ({ payload }) => {}, - }; -} diff --git a/libs/model/src/contest/FarcasterAction.command.ts b/libs/model/src/contest/FarcasterUpvoteAction.command.ts similarity index 97% rename from libs/model/src/contest/FarcasterAction.command.ts rename to libs/model/src/contest/FarcasterUpvoteAction.command.ts index 82081fc8c45..06520bb5c0f 100644 --- a/libs/model/src/contest/FarcasterAction.command.ts +++ b/libs/model/src/contest/FarcasterUpvoteAction.command.ts @@ -3,7 +3,7 @@ import * as schemas from '@hicommonwealth/schemas'; // This webhook processes the cast action event: // https://docs.farcaster.xyz/reference/actions/spec#actions-specification -export function FarcasterActionWebhook(): Command< +export function FarcasterUpvoteAction(): Command< typeof schemas.FarcasterCastCreatedWebhook > { return { diff --git a/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts b/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts new file mode 100644 index 00000000000..32635c4f073 --- /dev/null +++ b/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts @@ -0,0 +1,25 @@ +import { Query } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { config } from '../config'; + +export function GetFarcasterUpvoteActionMetadata(): Query< + typeof schemas.GetFarcasterUpvoteActionMetadata +> { + return { + ...schemas.GetFarcasterUpvoteActionMetadata, + auth: [], + secure: false, + body: async ({ payload }) => { + return { + name: 'Upvote Content', + icon: 'thumbsup', + description: 'Upvote content on a Commonwealth contest', + aboutUrl: 'https://commonwealth.xyz', + action: { + type: 'post', + postUrl: config.CONTESTS.FARCASTER_ACTION_URL!, + }, + }; + }, + }; +} diff --git a/libs/model/src/contest/index.ts b/libs/model/src/contest/index.ts index 89d0f5b2a04..6c6fec76f45 100644 --- a/libs/model/src/contest/index.ts +++ b/libs/model/src/contest/index.ts @@ -1,11 +1,12 @@ export * from './CancelContestManagerMetadata.command'; export * from './Contests.projection'; export * from './CreateContestManagerMetadata.command'; -export * from './FarcasterAction.command'; export * from './FarcasterCastCreatedWebhook.command'; export * from './FarcasterReplyCastCreatedWebhook.command'; +export * from './FarcasterUpvoteAction.command'; export * from './GetActiveContestManagers.query'; export * from './GetAllContests.query'; export * from './GetContestLog.query'; +export * from './GetFarcasterUpvoteActionMetadata.query'; export * from './PerformContestRollovers.command'; export * from './UpdateContestManagerMetadata.command'; diff --git a/libs/schemas/src/queries/contests.schemas.ts b/libs/schemas/src/queries/contests.schemas.ts index 085a0e7dcd9..49713676b66 100644 --- a/libs/schemas/src/queries/contests.schemas.ts +++ b/libs/schemas/src/queries/contests.schemas.ts @@ -79,3 +79,17 @@ export const FarcasterAction = { }), output: z.void(), }; + +export const GetFarcasterUpvoteActionMetadata = { + input: z.any(), + output: z.object({ + name: z.string(), + icon: z.string(), + description: z.string(), + aboutUrl: z.string().url(), + action: z.object({ + type: z.literal('post'), + postUrl: z.string().url(), + }), + }), +}; diff --git a/packages/commonwealth/server/api/integration-router.ts b/packages/commonwealth/server/api/integration-router.ts index d0730ffceec..ed0ee27025c 100644 --- a/packages/commonwealth/server/api/integration-router.ts +++ b/packages/commonwealth/server/api/integration-router.ts @@ -75,36 +75,23 @@ function build(validator: DatabaseValidationService) { // Farcaster webhooks router.post( '/farcaster/CastCreated', - (req, _, next) => { - console.log('CastCreated BODY: ', JSON.stringify(req.body, null, 2)); - next(); - }, express.command(Contest.FarcasterCastCreatedWebhook()), ); router.post( '/farcaster/ReplyCastCreated', - (req, _, next) => { - console.log('ReplyCastCreated BODY: ', JSON.stringify(req.body, null, 2)); - next(); - }, express.command(Contest.FarcasterReplyCastCreatedWebhook()), ); - // router.post( - // '/farcaster/action', - // raw({ type: '*/*', limit: '10mb', inflate: true }), - // (req, _, next) => { - // // TODO: verify frame signature message - // return next(); - // }, - // // parse body as JSON (native express.json middleware doesn't work here) - // (req, _, next) => { - // req.body = JSON.parse(req.body); - // next(); - // }, - // express.command(Contest.FarcasterActionWebhook()), - // ); + router.get( + '/farcaster/CastUpvoteAction', + express.query(Contest.GetFarcasterUpvoteActionMetadata()), + ); + + router.post( + '/farcaster/CastUpvoteAction', + express.command(Contest.FarcasterUpvoteAction()), + ); // Discord BOT integration router.post( From 6912c2e44c32f63cbf7ee0f09e7526ac56d957e8 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 3 Oct 2024 07:16:48 -0700 Subject: [PATCH 045/425] add frames back --- .../contest/FarcasterUpvoteAction.command.ts | 4 +- libs/schemas/src/commands/contest.schemas.ts | 2 +- packages/commonwealth/package.json | 1 + .../server/api/integration-router.ts | 14 + .../commonwealth/server/farcaster/config.ts | 7 + .../frames/contest/checkEligibility.tsx | 58 + .../farcaster/frames/contest/contestCard.tsx | 49 +- .../server/farcaster/frames/contest/index.ts | 5 + .../frames/contest/viewLeaderboard.tsx | 106 ++ .../farcaster/frames/gameExample/index.ts | 4 + .../frames/gameExample/resultGame.tsx | 50 + .../frames/gameExample/startGame.tsx | 21 + .../commonwealth/server/farcaster/router.tsx | 4 +- .../commonwealth/server/farcaster/utils.tsx | 112 ++ pnpm-lock.yaml | 1068 ++++++++++++++++- 15 files changed, 1431 insertions(+), 74 deletions(-) create mode 100644 packages/commonwealth/server/farcaster/config.ts create mode 100644 packages/commonwealth/server/farcaster/frames/contest/checkEligibility.tsx create mode 100644 packages/commonwealth/server/farcaster/frames/contest/index.ts create mode 100644 packages/commonwealth/server/farcaster/frames/contest/viewLeaderboard.tsx create mode 100644 packages/commonwealth/server/farcaster/frames/gameExample/index.ts create mode 100644 packages/commonwealth/server/farcaster/frames/gameExample/resultGame.tsx create mode 100644 packages/commonwealth/server/farcaster/frames/gameExample/startGame.tsx create mode 100644 packages/commonwealth/server/farcaster/utils.tsx diff --git a/libs/model/src/contest/FarcasterUpvoteAction.command.ts b/libs/model/src/contest/FarcasterUpvoteAction.command.ts index 06520bb5c0f..450f18a4e75 100644 --- a/libs/model/src/contest/FarcasterUpvoteAction.command.ts +++ b/libs/model/src/contest/FarcasterUpvoteAction.command.ts @@ -4,10 +4,10 @@ import * as schemas from '@hicommonwealth/schemas'; // This webhook processes the cast action event: // https://docs.farcaster.xyz/reference/actions/spec#actions-specification export function FarcasterUpvoteAction(): Command< - typeof schemas.FarcasterCastCreatedWebhook + typeof schemas.FarcasterUpvoteAction > { return { - ...schemas.FarcasterCastCreatedWebhook, + ...schemas.FarcasterUpvoteAction, auth: [], body: async ({ payload }) => { // // map FC Action to CW ThreadUpvoted diff --git a/libs/schemas/src/commands/contest.schemas.ts b/libs/schemas/src/commands/contest.schemas.ts index 936b39c1149..cb81c6d481a 100644 --- a/libs/schemas/src/commands/contest.schemas.ts +++ b/libs/schemas/src/commands/contest.schemas.ts @@ -148,7 +148,7 @@ export const FarcasterCastCreatedWebhook = { }), }; -export const FarcasterActionWebhook = { +export const FarcasterUpvoteAction = { input: z.object({}), output: z.object({}), }; diff --git a/packages/commonwealth/package.json b/packages/commonwealth/package.json index 9cb9c7e8acc..857dc126be6 100644 --- a/packages/commonwealth/package.json +++ b/packages/commonwealth/package.json @@ -183,6 +183,7 @@ "express-validator": "^6.14.2", "feed": "^4.2.2", "firebase": "^10.12.1", + "frames.js": "^0.19.3", "graphql": "^16.9.0", "graphql-request": "^7.1.0", "highlight-words-core": "^1.2.2", diff --git a/packages/commonwealth/server/api/integration-router.ts b/packages/commonwealth/server/api/integration-router.ts index ed0ee27025c..81f03145d3f 100644 --- a/packages/commonwealth/server/api/integration-router.ts +++ b/packages/commonwealth/server/api/integration-router.ts @@ -7,6 +7,7 @@ import { models, } from '@hicommonwealth/model'; import { RequestHandler, Router, raw } from 'express'; +import farcasterRouter from 'server/farcaster/router'; import DatabaseValidationService from 'server/middleware/databaseValidationService'; const PATH = '/api/integration'; @@ -85,14 +86,27 @@ function build(validator: DatabaseValidationService) { router.get( '/farcaster/CastUpvoteAction', + (req, res, next) => { + console.log(`GET CastUpvoteAction: ${JSON.stringify(req.body, null, 2)}`); + next(); + }, express.query(Contest.GetFarcasterUpvoteActionMetadata()), ); router.post( '/farcaster/CastUpvoteAction', + (req, res, next) => { + console.log( + `POST CastUpvoteAction: ${JSON.stringify(req.body, null, 2)}`, + ); + next(); + }, express.command(Contest.FarcasterUpvoteAction()), ); + // Farcaster frames + router.use('/farcaster', farcasterRouter); + // Discord BOT integration router.post( '/bot/threads', diff --git a/packages/commonwealth/server/farcaster/config.ts b/packages/commonwealth/server/farcaster/config.ts new file mode 100644 index 00000000000..3bc99349f40 --- /dev/null +++ b/packages/commonwealth/server/farcaster/config.ts @@ -0,0 +1,7 @@ +import { createFrames } from 'frames.js/express'; + +export const frames = createFrames({ + basePath: '/api/integration/farcaster', + // important for rendering jsx images properly + imagesRoute: null, +}); diff --git a/packages/commonwealth/server/farcaster/frames/contest/checkEligibility.tsx b/packages/commonwealth/server/farcaster/frames/contest/checkEligibility.tsx new file mode 100644 index 00000000000..375afd71bd0 --- /dev/null +++ b/packages/commonwealth/server/farcaster/frames/contest/checkEligibility.tsx @@ -0,0 +1,58 @@ +import { Button } from 'frames.js/express'; +import React from 'react'; +import { frames } from '../../config'; +import { circleCheckIcon, circleXIcon, fakeApiCall } from '../../utils'; + +export const checkEligibility = frames(async () => { + let eligible: boolean; + + try { + await fakeApiCall({ error: 'error' }); + eligible = true; + } catch { + eligible = false; + } + + const icon = eligible ? circleCheckIcon : circleXIcon; + const title = eligible ? 'You are eligible to enter' : 'You are not eligible'; + const description = eligible + ? 'Reply to this cast or quote this frame to be entered into the contest.' + : 'In order to enter this contest you must connect an Ethereum wallet to your Farcaster account.'; + + return { + image: ( +
+ {icon} + +

+ {title} +

+ +

{description}

+
+ ), + buttons: [ + , + ], + }; +}); diff --git a/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx b/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx index ce1d7967caf..07f8f91281e 100644 --- a/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx +++ b/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx @@ -1,4 +1,3 @@ -import { models } from '@hicommonwealth/model'; import { Button } from 'frames.js/express'; import moment from 'moment'; import React from 'react'; @@ -31,49 +30,7 @@ const PrizeRow = ({ index, prize }: { index: number; prize: number }) => { ); }; -export const contestCard = frames(async (ctx) => { - // extract contest address from request url - const [, contestAddress] = ctx.url.pathname.split('/contests/'); - - const contestManager = await models.ContestManager.findOne({ - where: { - contest_address: contestAddress, - farcaster_frame_url: `/api/farcaster/contests/${contestAddress}`, - }, - }); - if (!contestManager) { - return { - title: 'Invalid Contest', - image: ( -
-

- Contest at address {`"${contestAddress}"`} does not exist. -

-
- ), - }; - } - - // associate frame cast with contest manager - if (!contestManager?.farcaster_frame_hashes?.includes(contestAddress)) { - contestManager.farcaster_frame_hashes = [ - ...(contestManager.farcaster_frame_hashes || []), - contestAddress, - ]; - await contestManager.save(); - } - +export const contestCard = frames(async () => { // here we would need to be able to fetch data related to contest eg // image, title, description, prizes // check designs https://www.figma.com/design/NNqlhNPHvn0O96TCBIi6WU/Contests?node-id=960-3689&t=8ogN11dhaRqJP8ET-1 @@ -81,7 +38,7 @@ export const contestCard = frames(async (ctx) => { const prizes = [0.005, 0.003, 0.001]; return { - title: contestManager.name, + title: 'Contest Title', image: (
{ fontSize: '56px', }} > - {contestManager.name} + Contest Title

This is contest description.

diff --git a/packages/commonwealth/server/farcaster/frames/contest/index.ts b/packages/commonwealth/server/farcaster/frames/contest/index.ts new file mode 100644 index 00000000000..7161cc14820 --- /dev/null +++ b/packages/commonwealth/server/farcaster/frames/contest/index.ts @@ -0,0 +1,5 @@ +import { checkEligibility } from './checkEligibility'; +import { contestCard } from './contestCard'; +import { viewLeaderboard } from './viewLeaderboard'; + +export { checkEligibility, contestCard, viewLeaderboard }; diff --git a/packages/commonwealth/server/farcaster/frames/contest/viewLeaderboard.tsx b/packages/commonwealth/server/farcaster/frames/contest/viewLeaderboard.tsx new file mode 100644 index 00000000000..b8eee34a7b6 --- /dev/null +++ b/packages/commonwealth/server/farcaster/frames/contest/viewLeaderboard.tsx @@ -0,0 +1,106 @@ +import { error } from 'frames.js/core'; +import { Button } from 'frames.js/express'; +import React from 'react'; +import { frames } from '../../config'; +import { getInvertedColor, getLeaderboard, getRandomColor } from '../../utils'; + +const randomColor = getRandomColor(); +const invertedColor = getInvertedColor(randomColor); + +export const viewLeaderboard = frames(async (ctx) => { + const fromMain = ctx.searchParams.fromMain; + + let leaderboardEntries; + + try { + leaderboardEntries = await getLeaderboard(); + } catch (err) { + console.log('error', err); + return error('Something went wrong'); + } + + const noEntries = leaderboardEntries.length === 0; + const entry = leaderboardEntries[0]; + + return { + image: ( +
+ {noEntries ? ( +

No entries yet

+ ) : ( +
+
+ {entry.nickname.charAt(0).toUpperCase()} +
+ +

+ {entry.nickname} +

+ +

{entry.text}

+

{entry.likes} Likes

+
+ )} +
+ ), + buttons: [ + ...(noEntries + ? [] + : [ + ...(fromMain + ? [] + : [ + , + ]), + , + ]), + , + ], + }; +}); diff --git a/packages/commonwealth/server/farcaster/frames/gameExample/index.ts b/packages/commonwealth/server/farcaster/frames/gameExample/index.ts new file mode 100644 index 00000000000..29197ff35c2 --- /dev/null +++ b/packages/commonwealth/server/farcaster/frames/gameExample/index.ts @@ -0,0 +1,4 @@ +import { resultGame } from './resultGame'; +import { startGame } from './startGame'; + +export { resultGame, startGame }; diff --git a/packages/commonwealth/server/farcaster/frames/gameExample/resultGame.tsx b/packages/commonwealth/server/farcaster/frames/gameExample/resultGame.tsx new file mode 100644 index 00000000000..dc30177cac5 --- /dev/null +++ b/packages/commonwealth/server/farcaster/frames/gameExample/resultGame.tsx @@ -0,0 +1,50 @@ +import { Button } from 'frames.js/express'; +import React from 'react'; +import { frames } from '../../config'; +import { CardWithText } from '../../utils'; + +export const resultGame = frames(async (ctx) => { + const rand = Math.floor(Math.random() * 3); + const choices = ['Rock', 'Paper', 'Scissors']; + const userChoice = choices[(Number(ctx.pressedButton?.index) || 1) - 1]; + const computerChoice = choices[rand]; + let msg = ''; + + if (userChoice === computerChoice) { + msg = 'Draw ⚖️'; + } + + if ( + (userChoice === 'Rock' && computerChoice === 'Scissors') || + (userChoice === 'Paper' && computerChoice === 'Rock') || + (userChoice === 'Scissors' && computerChoice === 'Paper') + ) { + msg = 'You win 🏆'; + } + + if ( + (userChoice === 'Rock' && computerChoice === 'Paper') || + (userChoice === 'Paper' && computerChoice === 'Scissors') || + (userChoice === 'Scissors' && computerChoice === 'Rock') + ) { + msg = 'You lose 😩'; + } + + const color = msg.includes('Draw') + ? 'lightgray' + : msg.includes('win') + ? 'lightgreen' + : 'lightpink'; + + return { + image: CardWithText({ + text: `${userChoice} vs ${computerChoice}: ${msg}`, + color, + }), + buttons: [ + , + ], + }; +}); diff --git a/packages/commonwealth/server/farcaster/frames/gameExample/startGame.tsx b/packages/commonwealth/server/farcaster/frames/gameExample/startGame.tsx new file mode 100644 index 00000000000..8420d119c4a --- /dev/null +++ b/packages/commonwealth/server/farcaster/frames/gameExample/startGame.tsx @@ -0,0 +1,21 @@ +import { Button } from 'frames.js/express'; +import React from 'react'; +import { frames } from '../../config'; +import { CardWithText } from '../../utils'; + +export const startGame = frames(async () => { + return { + image: CardWithText({ text: 'Choose your weapon 🥊' }), + buttons: [ + , + , + , + ], + }; +}); diff --git a/packages/commonwealth/server/farcaster/router.tsx b/packages/commonwealth/server/farcaster/router.tsx index 278e8e34b48..d2f6fda86ab 100644 --- a/packages/commonwealth/server/farcaster/router.tsx +++ b/packages/commonwealth/server/farcaster/router.tsx @@ -12,8 +12,8 @@ farcasterRouter.get('/game', startGame); farcasterRouter.post('/game', startGame); farcasterRouter.post('/result', resultGame); -farcasterRouter.get('/contests/:contestAddress', contestCard); -farcasterRouter.post('/contests/:contestAddress', contestCard); +farcasterRouter.get('/contestCard', contestCard); +farcasterRouter.post('/contestCard', contestCard); farcasterRouter.post('/viewLeaderboard', viewLeaderboard); farcasterRouter.post('/checkEligibility', checkEligibility); diff --git a/packages/commonwealth/server/farcaster/utils.tsx b/packages/commonwealth/server/farcaster/utils.tsx new file mode 100644 index 00000000000..ddabf38f64e --- /dev/null +++ b/packages/commonwealth/server/farcaster/utils.tsx @@ -0,0 +1,112 @@ +import React from 'react'; + +// This might not be needed in the future but for now reduces the amount of boilerplate +export const CardWithText = ({ + text, + color, + element, +}: { + text?: string; + color?: string; + element?: React.ReactNode; +}) => { + return ( +
+
+ {element || text} +
+
+ ); +}; + +export const circleCheckIcon = ( + + {/* eslint-disable-next-line max-len */} + + +); + +export const circleXIcon = ( + + {/* eslint-disable-next-line max-len */} + + +); + +export const fakeApiCall = async ({ + result, + error, +}: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + result?: any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + error?: any; +}) => { + return new Promise((resolve, reject) => { + setTimeout(() => { + if (!error) { + return resolve(result); + } + + if (Math.random() > 0.5) { + return resolve(result); + } else { + return reject(error); + } + }, 1000); + }); +}; + +export const getLeaderboard = () => { + const sortedList = Array.from({ length: 10 }, (_, index) => ({ + nickname: `Author${index + 1}`, + text: `This is entry text ${index + 1}`, + likes: Math.floor(Math.random() * 100), + })) + .sort((a, b) => b.likes - a.likes) + .slice(0, 5); + + return fakeApiCall({ result: sortedList }); +}; + +export const getRandomColor = () => + Math.floor(Math.random() * 16777215).toString(16); + +export const getInvertedColor = (randomColor: string) => + (parseInt(randomColor, 16) ^ 16777215).toString(16); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad7e4354d61..be51bbf4363 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1190,6 +1190,9 @@ importers: firebase: specifier: ^10.12.1 version: 10.12.2 + frames.js: + specifier: ^0.19.3 + version: 0.19.3(@cloudflare/workers-types@4.20240925.0)(@lens-protocol/client@2.3.1(@lens-protocol/metadata@1.2.0(zod@3.23.6))(@types/react@18.3.3)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(@types/express@4.17.21)(@xmtp/frames-validator@0.6.2(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6))(bufferutil@4.0.8)(next@14.2.14(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) graphql: specifier: ^16.9.0 version: 16.9.0 @@ -2697,6 +2700,9 @@ packages: '@classic-terra/terra.proto@1.1.0': resolution: {integrity: sha512-bYhQG5LUaGF0KPRY9hYT/HEcd1QExZPQd6zLV/rQkCe/eDxfwFRLzZHpaaAdfWoAAZjsRWqJbUCqCg7gXBbJpw==} + '@cloudflare/workers-types@4.20240925.0': + resolution: {integrity: sha512-KpqyRWvanEuXgBTKYFzRp4NsWOEcswxjsPRSre1zYQcODmc8PUrraVHQUmgvkJgv3FzB+vI9xm7J6oE4MmZHCA==} + '@codemirror/autocomplete@6.18.0': resolution: {integrity: sha512-5DbOvBbY4qW5l57cjDsmmpDh3/TeK1vXfTHa+BUMrRzdWdcxKZ4U4V7vQaTtOpApNU4kLS4FQ6cINtLg245LXA==} peerDependencies: @@ -3758,6 +3764,66 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + '@lens-protocol/blockchain-bindings@0.10.2': + resolution: {integrity: sha512-WIlp30gohy/EuTD+Oqb2ACftpIkBE3wOC1WgiaFeu1ybpnIY0PnUn0hAQeecG6TIekhP3VvMXK82BXppsv2Nhw==} + + '@lens-protocol/client@2.3.1': + resolution: {integrity: sha512-Ey1yg8N2lp51wyWXKacOs36aOHlmCsF4ysCBJH4C85wwxIFBKbN5jXZX9Zxd1Gfe658SxKU2zGjBsg3X6LikiA==} + engines: {node: '>=18 <21'} + peerDependencies: + '@lens-protocol/metadata': ^1.0.0 + peerDependenciesMeta: + '@lens-protocol/metadata': + optional: true + + '@lens-protocol/domain@0.12.0': + resolution: {integrity: sha512-uyCuHstIPq3vtNkxOFiDah/EfNMjppHDOXnbnstDLpXD7xXZInYtdDqd0ENtg2j+0egGqHwvQJXciSDqGBJzmA==} + peerDependencies: + '@faker-js/faker': ^7.6.0 + '@jest/globals': ^29.7.0 + jest-mock-extended: ^3.0.5 + jest-when: ^3.6.0 + wait-for-expect: ^3.0.2 + peerDependenciesMeta: + '@faker-js/faker': + optional: true + '@jest/globals': + optional: true + jest-mock-extended: + optional: true + jest-when: + optional: true + wait-for-expect: + optional: true + + '@lens-protocol/gated-content@0.5.1': + resolution: {integrity: sha512-rXD0/lkdFIGrwi7+LLgxYwb1Bbsnbi3XouUxfXbqBD32YwKkpYRNb0EfYcB3HZOQv9vmeTTlyrozNKxWoCBJ3A==} + peerDependencies: + '@ethersproject/abi': ^5.7.0 + '@ethersproject/address': ^5.7.0 + '@ethersproject/bignumber': ^5.7.0 + '@ethersproject/contracts': ^5.7.0 + '@ethersproject/hash': ^5.7.0 + '@ethersproject/providers': ^5.7.2 + '@ethersproject/wallet': ^5.7.0 + '@lens-protocol/metadata': ^1.0.0 + zod: ^3.22.0 + + '@lens-protocol/metadata@1.2.0': + resolution: {integrity: sha512-fUB8+GvYiVt1uMqYJi/iN/aw/lzE+oEfpTjraTI87MqWPgYubbx0vFySjJs7uAdI7oftczvlwhthmMUl5DDuGA==} + engines: {node: '>=18 <21'} + peerDependencies: + zod: ^3.22.3 + peerDependenciesMeta: + zod: + optional: true + + '@lens-protocol/shared-kernel@0.12.0': + resolution: {integrity: sha512-+trBZPjGDSRMVafZF6jXcfKc8UVHr1bVRjxeAVO1ZpR7zWfampJhxMO+7jbmmhvmYmf5Losp7Ffq4//szKloaA==} + + '@lens-protocol/storage@0.8.1': + resolution: {integrity: sha512-9nOf8wnDEYAd6Jjoqw5kM7YvZ+g1Y9LfhLfP0ZcAl/nx3uPWBO0cT7GSZWBXAwQ7ayW6Kno5P+vFoBFEaNVVLQ==} + '@lexical/clipboard@0.17.1': resolution: {integrity: sha512-OVqnEfWX8XN5xxuMPo6BfgGKHREbz++D5V5ISOiml0Z8fV/TQkdgwqbBJcUdJHGRHWSUwdK7CWGs/VALvVvZyw==} @@ -3952,6 +4018,48 @@ packages: '@lit-labs/ssr-dom-shim@1.2.0': resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} + '@lit-protocol/access-control-conditions@2.1.62': + resolution: {integrity: sha512-nP+iqiLUzQa6bfZL9hM9a+s+YVW21HoHkHP7s2E11VFQmucdnJmUUr7Aw46SK/4yClTjLb6RuHyfIPvCdmIKhQ==} + + '@lit-protocol/auth-browser@2.1.62': + resolution: {integrity: sha512-/4BTl0omR+JUCyJJc93FCiygSn/4ldrbeBuzWYQzuOFh2f6fcY1GJe3ttEoSJUfwu7OblW86YpWAT65b56rACA==} + + '@lit-protocol/bls-sdk@2.1.62': + resolution: {integrity: sha512-UjNjycoNXOEoLH/foIJx1L9PLL5OxmHcCD/mFXr4KSeQV/v4srvGNpY/4ng7+k9sJEbvwRwv+FB07ng3/Ihacg==} + + '@lit-protocol/constants@2.1.62': + resolution: {integrity: sha512-4CigP3GS7Cxpa9RXT1twCCvYI5wvfo1UAMbdrjoDgM9VMDtpvSrmlG8AwC9yMoqPM6409BYcgGI9LDGzUjNUjg==} + + '@lit-protocol/crypto@2.1.62': + resolution: {integrity: sha512-pWte+VQOPmSFvfoMxvobmj5JjkGSD44XMkkTXGubpGTBr27hK9CuDxpVHTsI9NsGFSJRdPBpRou+YD5I22yDiA==} + + '@lit-protocol/ecdsa-sdk@2.1.62': + resolution: {integrity: sha512-VWYAQh31e5Vu6YXvw7iDQja/f2Je6Obj8VoXLweWWfSpUnKqe1JJKGDLxOAuQUT3ZSaX7bYrq7hLIJdwdWmJQw==} + + '@lit-protocol/encryption@2.1.62': + resolution: {integrity: sha512-Nmte/UINgc+YVlA3RewhW+1SFnKcSikd94HlBxS+TX9yb2KBUO6oKNjTQSGX4P/KD3zBxaFlbY8+jrWeYR1aQQ==} + + '@lit-protocol/lit-third-party-libs@2.1.62': + resolution: {integrity: sha512-js8Z3uG4v30Dw9HNqnjxkzMcB3cp3UcF6tfsWGo99+g5OqqKnkCDbb4IXeqnGbslVPn6ll6XouRQPmCcuzeGaw==} + + '@lit-protocol/misc-browser@2.1.62': + resolution: {integrity: sha512-2NX//tUe5ChrWCN4Msi4RE8DlYjTMGqyPYJHS86r7nKHG7sHSPCucn84LiTmVGA3DVKzspeGJdMbEF/W8Ogn6w==} + + '@lit-protocol/misc@2.1.62': + resolution: {integrity: sha512-i6A/kxiJQgy8BZJGH7H8V2kxqOA2xboAjH2BzAbE/pMezfHG7wybkXT9cnXnXOZsAnuGnOKd93u+j7bskuDd2w==} + + '@lit-protocol/nacl@2.1.62': + resolution: {integrity: sha512-0v9fa6Sd4xphjlYMZ9L8TTyR7G4YLvp323E8OJ76giuaPla4HXuwSiGMzUOaC6NKraArSrd54CKkHJ/bxEqVDA==} + + '@lit-protocol/node-client@2.1.62': + resolution: {integrity: sha512-rLEUleDoJ+AATZfWNWXvy7UdSrUXMyCjpyB5bevVfk9YjIa5rd9BBXdFENCIA+9kLgVOgtND/R1PpEI/vZkMmw==} + + '@lit-protocol/types@2.1.62': + resolution: {integrity: sha512-DoIOmbI+Bg3zLWzqx4fLv1vW3k1sbDof/fxslHsLt5aX/MXHSZVKTJb+jWgNVcQ4ba+YLqgoKaPb1i58DMvCPw==} + + '@lit-protocol/uint8arrays@2.1.62': + resolution: {integrity: sha512-Q9Leppzyb9Y2jwe+i8btAUkTXqgnu21PFql83v6N70dkELSC+fKBzRSRqUpFqruW7dcrG8mNWsOCQbQ0kL/w/w==} + '@lit/reactive-element@1.6.3': resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} @@ -4254,6 +4362,63 @@ packages: '@nestjs/websockets': optional: true + '@next/env@14.2.14': + resolution: {integrity: sha512-/0hWQfiaD5//LvGNgc8PjvyqV50vGK0cADYzaoOOGN8fxzBn3iAiaq3S0tCRnFBldq0LVveLcxCTi41ZoYgAgg==} + + '@next/swc-darwin-arm64@14.2.14': + resolution: {integrity: sha512-bsxbSAUodM1cjYeA4o6y7sp9wslvwjSkWw57t8DtC8Zig8aG8V6r+Yc05/9mDzLKcybb6EN85k1rJDnMKBd9Gw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@14.2.14': + resolution: {integrity: sha512-cC9/I+0+SK5L1k9J8CInahduTVWGMXhQoXFeNvF0uNs3Bt1Ub0Azb8JzTU9vNCr0hnaMqiWu/Z0S1hfKc3+dww==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@14.2.14': + resolution: {integrity: sha512-RMLOdA2NU4O7w1PQ3Z9ft3PxD6Htl4uB2TJpocm+4jcllHySPkFaUIFacQ3Jekcg6w+LBaFvjSPthZHiPmiAUg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@14.2.14': + resolution: {integrity: sha512-WgLOA4hT9EIP7jhlkPnvz49iSOMdZgDJVvbpb8WWzJv5wBD07M2wdJXLkDYIpZmCFfo/wPqFsFR4JS4V9KkQ2A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@14.2.14': + resolution: {integrity: sha512-lbn7svjUps1kmCettV/R9oAvEW+eUI0lo0LJNFOXoQM5NGNxloAyFRNByYeZKL3+1bF5YE0h0irIJfzXBq9Y6w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@14.2.14': + resolution: {integrity: sha512-7TcQCvLQ/hKfQRgjxMN4TZ2BRB0P7HwrGAYL+p+m3u3XcKTraUFerVbV3jkNZNwDeQDa8zdxkKkw2els/S5onQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@14.2.14': + resolution: {integrity: sha512-8i0Ou5XjTLEje0oj0JiI0Xo9L/93ghFtAUYZ24jARSeTMXLUx8yFIdhS55mTExq5Tj4/dC2fJuaT4e3ySvXU1A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-ia32-msvc@14.2.14': + resolution: {integrity: sha512-2u2XcSaDEOj+96eXpyjHjtVPLhkAFw2nlaz83EPeuK4obF+HmtDJHqgR1dZB7Gb6V/d55FL26/lYVd0TwMgcOQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@next/swc-win32-x64-msvc@14.2.14': + resolution: {integrity: sha512-MZom+OvZ1NZxuRovKt1ApevjiUJTcU2PmdJKL66xUPaJeRywnbGGRWUlaAOwunD6dX+pm83vj979NTC8QXjGWg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@neynar/nodejs-sdk@1.55.0': resolution: {integrity: sha512-gWg9bzfmW6p8CNW+kLMiMKIZkFzVQn6SA+3+l5XMC7uUbRqvzwd3TH85rCTY6dFW7pMijkSGTLzvxvJXmPK+tQ==} engines: {node: '>=19.9.0'} @@ -5766,6 +5931,10 @@ packages: resolution: {integrity: sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==} engines: {node: '>=14.0.0'} + '@resvg/resvg-wasm@2.4.0': + resolution: {integrity: sha512-C7c51Nn4yTxXFKvgh2txJFNweaVcfUPQxwEUFw4aWsCmfiBDJsTSwviIF8EcwjQ6k8bPyMWCl1vw4BdxE569Cg==} + engines: {node: '>= 10'} + '@rnx-kit/chromium-edge-launcher@1.0.0': resolution: {integrity: sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==} engines: {node: '>=14.15'} @@ -5995,6 +6164,11 @@ packages: resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} engines: {node: '>=6'} + '@shuding/opentype.js@1.4.0-beta.0': + resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} + engines: {node: '>= 8.0.0'} + hasBin: true + '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -6287,6 +6461,9 @@ packages: '@solana/web3.js@1.95.2': resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==} + '@spruceid/siwe-parser@1.1.3': + resolution: {integrity: sha512-oQ8PcwDqjGWJvLmvAF2yzd6iniiWxK0Qtz+Dw+gLD/W5zOQJiKIUXwslHOm8VB8OOOKW9vfR3dnPBhHaZDvRsw==} + '@spruceid/siwe-parser@2.1.2': resolution: {integrity: sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ==} @@ -6453,6 +6630,9 @@ packages: '@swc/helpers@0.5.12': resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + '@swc/helpers@0.5.5': + resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + '@swc/types@0.1.7': resolution: {integrity: sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==} @@ -7088,6 +7268,10 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@vercel/og@0.6.3': + resolution: {integrity: sha512-aoCrC9FqkeA+WEEb9CwSmjD0rGlFeNqbUsI41JPmKWR9Hx6FFn86tvH96O5HZMF6VAXTGHxa3nPH3BokROpdgA==} + engines: {node: '>=16'} + '@viem/anvil@0.0.10': resolution: {integrity: sha512-9PzYXBRikfSUhhm8Bd0avv07agwcbMJ5FaSu2D2vbE0cxkvXGtolL3fW5nz2yefMqOqVQL4XzfM5nwY81x3ytw==} @@ -7318,6 +7502,13 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + '@xmtp/frames-validator@0.6.2': + resolution: {integrity: sha512-BoNn1YoAr5Rw/A5xuKOOz3KaJefAQ1ps+Ph3FjnqdU7WJVPB2oJ9ExcmaWwF3K+/IMjf9SncUMoTO9eLP1vhRQ==} + engines: {node: '>=18'} + + '@xmtp/proto@3.61.1': + resolution: {integrity: sha512-momxDvGw4OoiLlNz6xmvEGnsx9CCZSR+o964EheH9ITx/iAqnV8ebpX3ZDtPuadEQg9AL21JAktw5pi7zmos0w==} + '@xstate/fsm@1.6.5': resolution: {integrity: sha512-b5o1I6aLNeYlU/3CPlj/Z91ybk1gUsKT+5NAJI+2W4UjvS5KLG28K9v5UvNoFVjHV8PajVZ00RH3vnjyQO7ZAw==} @@ -7759,6 +7950,10 @@ packages: resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} engines: {node: '>= 0.6.0'} + base64-js@0.0.8: + resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} + engines: {node: '>= 0.4'} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -7954,6 +8149,10 @@ packages: builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -8013,6 +8212,9 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} + camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + caniuse-lite@1.0.30001655: resolution: {integrity: sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==} @@ -8085,6 +8287,13 @@ packages: check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} + cheerio@1.0.0-rc.3: resolution: {integrity: sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==} engines: {node: '>= 0.6'} @@ -8520,9 +8729,19 @@ packages: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} + css-background-parser@0.1.0: + resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} + css-box-model@1.2.1: resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} + css-box-shadow@1.0.0-3: + resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} + + css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + css-functions-list@3.2.2: resolution: {integrity: sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==} engines: {node: '>=12 || >=16'} @@ -8533,6 +8752,12 @@ packages: css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + css-what@2.1.3: resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==} @@ -8849,6 +9074,9 @@ packages: dom-serializer@1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} @@ -8869,6 +9097,10 @@ packages: resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} engines: {node: '>= 4'} + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dompurify@2.5.2: resolution: {integrity: sha512-5vSyvxRAb45EoWwAktUT3AYqAwXK4FL7si22Cgj46U6ICsj/YJczCN+Bk7WNABIQmpWRymGfslMhrRUZkQNnqA==} @@ -8881,6 +9113,9 @@ packages: domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -8974,6 +9209,9 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -9547,6 +9785,9 @@ packages: fflate@0.4.8: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} + fflate@0.7.4: + resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -9716,6 +9957,17 @@ packages: fp-ts@1.19.3: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + frames.js@0.19.3: + resolution: {integrity: sha512-wzohUpXmuxlBkGTSyAdFA1nKC6wuOU87eV8W3xvGBazFb5RPQ+N0DFa7AewbPWxwcpwQLrtiXn+mttz/7TfFmQ==} + peerDependencies: + '@cloudflare/workers-types': ^4.20240320.1 + '@lens-protocol/client': ^2.0.0 + '@types/express': ^4.17.21 + '@xmtp/frames-validator': ^0.6.2 + next: ^14.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -9942,6 +10194,11 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql-request@6.1.0: + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + graphql-request@7.1.0: resolution: {integrity: sha512-Ouu/lYVFhARS1aXeZoVJWnGT6grFJXTLwXJuK4mUGGRo0EUk1JkyYp43mdGmRgUVezpRm6V5Sq3t8jBDQcajng==} hasBin: true @@ -9958,6 +10215,12 @@ packages: dprint: optional: true + graphql-tag@2.12.6: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql@16.9.0: resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} @@ -10078,6 +10341,10 @@ packages: resolution: {integrity: sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==} engines: {node: '>=8'} + hex-rgb@4.3.0: + resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} + engines: {node: '>=6'} + hexoid@1.0.0: resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} engines: {node: '>=8'} @@ -10131,6 +10398,9 @@ packages: htmlparser2@3.10.1: resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + http-basic@8.1.3: resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} engines: {node: '>=6.0.0'} @@ -10981,6 +11251,10 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stable-stringify@1.1.1: + resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} + engines: {node: '>= 0.4'} + json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -11001,6 +11275,9 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} @@ -11021,6 +11298,9 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + junk@4.0.1: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} @@ -11034,6 +11314,9 @@ packages: jws@3.2.2: resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jwt-decode@3.1.2: + resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==} + jwt-decode@4.0.0: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} engines: {node: '>=18'} @@ -11098,6 +11381,9 @@ packages: lie@3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lighthouse-logger@1.4.2: resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} @@ -11105,6 +11391,9 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} + linebreak@1.1.0: + resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -11126,12 +11415,23 @@ packages: resolution: {integrity: sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==} hasBin: true + lit-connect-modal@0.1.11: + resolution: {integrity: sha512-EG6pcCqdxZQJt3MPDq3gJ5Sz4E5sJdydtAF7VFJu6z6GDHO1Ybp8WrTx8CUnHiF54/MQBRi6Nb7cbTvv+BKWvQ==} + lit-element@3.3.3: resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} lit-html@2.8.0: resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + lit-siwe@1.1.8: + resolution: {integrity: sha512-gXI8GG0GAClw6G7T9p4p6Kn9ywDo8j2d90ShaYArJdsqqO9gwXfzxF84SMeY+bpsNqqQ3FahrhEwTCHd6w7wNw==} + peerDependencies: + '@ethersproject/contracts': ^5.2.0 + '@ethersproject/hash': ^5.4.0 + '@ethersproject/providers': ^5.2.0 + '@ethersproject/wallet': ^5.2.0 + lit@2.8.0: resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} @@ -11614,6 +11914,10 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + micromodal@0.4.10: + resolution: {integrity: sha512-BUrEnzMPFBwK8nOE4xUDYHLrlGlLULQVjpja99tpJQPSUEWgw3kTLp1n1qv0HmKU29AiHE7Y7sMLiRziDK4ghQ==} + engines: {node: '>=10'} + miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true @@ -11885,6 +12189,24 @@ packages: next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + next@14.2.14: + resolution: {integrity: sha512-Q1coZG17MW0Ly5x76shJ4dkC23woLAhhnDnw+DfTc7EpZSGuWrlsZ3bZaO8t6u1Yu8FVfhkqJE+U8GC7E0GLPQ==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true + nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} @@ -12271,6 +12593,9 @@ packages: resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} engines: {node: '>=8'} + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -12294,6 +12619,9 @@ packages: parse-cache-control@1.0.1: resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} + parse-css-color@0.2.1: + resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==} + parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} @@ -12312,6 +12640,12 @@ packages: resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} engines: {node: '>=6'} + parse5-htmlparser2-tree-adapter@7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + parse5@3.0.3: resolution: {integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==} @@ -12625,6 +12959,10 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.4.38: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} @@ -13582,6 +13920,10 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + satori@0.10.9: + resolution: {integrity: sha512-XU9EELUEZuioT4acLIpCXxHcFzrsC8muvg0MY28d+TlqwxbkTzBmWbw+3+hnCzXT7YZ0Qm8k3eXktDaEu+qmEw==} + engines: {node: '>=16'} + sax@1.3.0: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} @@ -13984,6 +14326,10 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + strict-event-emitter@0.4.6: resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==} @@ -14015,6 +14361,9 @@ packages: resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} engines: {node: '>=18'} + string.prototype.codepointat@0.2.1: + resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + string.prototype.matchall@4.0.11: resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} engines: {node: '>= 0.4'} @@ -14108,6 +14457,19 @@ packages: style-search@0.1.0: resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} + styled-jsx@5.1.1: + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + stylelint-config-prettier@9.0.5: resolution: {integrity: sha512-U44lELgLZhbAD/xy/vncZ2Pq8sh2TnpiPvo38Ifg9+zeioR+LAkHu0i6YORIOxFafZoVg0xqQwex6e6F25S5XA==} engines: {node: '>= 12'} @@ -14325,6 +14687,9 @@ packages: tiny-emitter@2.1.0: resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -14394,6 +14759,10 @@ packages: traverse-chain@0.1.0: resolution: {integrity: sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==} + traverse@0.6.10: + resolution: {integrity: sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==} + engines: {node: '>= 0.4'} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -14516,6 +14885,9 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tweetnacl-util@0.13.5: + resolution: {integrity: sha512-/4Q3hpPFAnbBjNLLOmdTdyvInBfZcQBTWy+LWbypmWxAKwOpSQOyyv4ZZts4CoiYtS8Skyix5CkOWytf7XNK9A==} + tweetnacl-util@0.15.1: resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} @@ -14599,6 +14971,10 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typedarray.prototype.slice@1.0.3: + resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} + engines: {node: '>= 0.4'} + typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -14703,6 +15079,9 @@ packages: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} + unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + unidiff@1.0.4: resolution: {integrity: sha512-ynU0vsAXw0ir8roa+xPCUHmnJ5goc5BTM2Kuc3IJd8UwgaeRs7VSD5+eeaQL+xp1JtB92hu/Zy/Lgy7RZcr1pQ==} @@ -15135,6 +15514,9 @@ packages: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} + web-vitals@3.5.2: + resolution: {integrity: sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg==} + web3-core-helpers@1.5.2: resolution: {integrity: sha512-U7LJoeUdQ3aY9t5gU7t/1XpcApsWm+4AcW5qKl/44ZxD44w0Dmsq1c5zJm3GuLr/a9MwQfXK4lpmvxVQWHHQRg==} engines: {node: '>=8.0.0'} @@ -15613,6 +15995,9 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + yoga-wasm-web@0.3.3: + resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} + z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} engines: {node: '>=8.0.0'} @@ -15832,8 +16217,8 @@ snapshots: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-bucket-endpoint': 3.577.0 @@ -15890,11 +16275,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0)': + '@aws-sdk/client-sso-oidc@3.577.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15933,7 +16318,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.577.0': @@ -15979,11 +16363,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.577.0': + '@aws-sdk/client-sts@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -16022,6 +16406,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.576.0': @@ -16055,7 +16440,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-process': 3.577.0 '@aws-sdk/credential-provider-sso': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) @@ -16112,7 +16497,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/types': 3.0.0 @@ -16250,7 +16635,7 @@ snapshots: '@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/shared-ini-file-loader': 3.0.0 @@ -17660,6 +18045,8 @@ snapshots: long: 4.0.0 protobufjs: 6.11.4 + '@cloudflare/workers-types@4.20240925.0': {} + '@codemirror/autocomplete@6.18.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.33.0)(@lezer/common@1.2.1)': dependencies: '@codemirror/language': 6.10.2 @@ -19338,6 +19725,142 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} + '@lens-protocol/blockchain-bindings@0.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/units': 5.7.0 + '@lens-protocol/domain': 0.12.0 + '@lens-protocol/shared-kernel': 0.12.0 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + tslib: 2.7.0 + transitivePeerDependencies: + - '@faker-js/faker' + - '@jest/globals' + - bufferutil + - jest-mock-extended + - jest-when + - utf-8-validate + - wait-for-expect + + '@lens-protocol/client@2.3.1(@lens-protocol/metadata@1.2.0(zod@3.23.6))(@types/react@18.3.3)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/wallet': 5.7.0 + '@lens-protocol/blockchain-bindings': 0.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lens-protocol/gated-content': 0.5.1(@ethersproject/abi@5.7.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.7.0)(@ethersproject/contracts@5.7.0)(@ethersproject/hash@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@ethersproject/wallet@5.7.0)(@lens-protocol/metadata@1.2.0(zod@3.23.6))(@types/react@18.3.3)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)(zod@3.23.8) + '@lens-protocol/shared-kernel': 0.12.0 + '@lens-protocol/storage': 0.8.1 + graphql: 16.9.0 + graphql-request: 6.1.0(graphql@16.9.0) + graphql-tag: 2.12.6(graphql@16.9.0) + jwt-decode: 3.1.2 + tslib: 2.7.0 + zod: 3.23.8 + optionalDependencies: + '@lens-protocol/metadata': 1.2.0(zod@3.23.6) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@faker-js/faker' + - '@jest/globals' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ethers + - ioredis + - jest-mock-extended + - jest-when + - react + - uWebSockets.js + - utf-8-validate + - wait-for-expect + + '@lens-protocol/domain@0.12.0': + dependencies: + '@lens-protocol/shared-kernel': 0.12.0 + tslib: 2.7.0 + + '@lens-protocol/gated-content@0.5.1(@ethersproject/abi@5.7.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.7.0)(@ethersproject/contracts@5.7.0)(@ethersproject/hash@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@ethersproject/wallet@5.7.0)(@lens-protocol/metadata@1.2.0(zod@3.23.6))(@types/react@18.3.3)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)(zod@3.23.8)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/wallet': 5.7.0 + '@lens-protocol/metadata': 1.2.0(zod@3.23.6) + '@lens-protocol/shared-kernel': 0.12.0 + '@lens-protocol/storage': 0.8.1 + '@lit-protocol/constants': 2.1.62 + '@lit-protocol/crypto': 2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lit-protocol/encryption': 2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lit-protocol/node-client': 2.1.62(@ethersproject/contracts@5.7.0)(@ethersproject/hash@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@ethersproject/wallet@5.7.0)(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + '@lit-protocol/types': 2.1.62 + siwe: 2.3.2(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + tslib: 2.7.0 + zod: 3.23.8 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ethers + - ioredis + - react + - uWebSockets.js + - utf-8-validate + + '@lens-protocol/metadata@1.2.0(zod@3.23.6)': + dependencies: + json-stable-stringify: 1.1.1 + uuid: 9.0.1 + optionalDependencies: + zod: 3.23.6 + + '@lens-protocol/shared-kernel@0.12.0': + dependencies: + '@ethersproject/address': 5.7.0 + decimal.js: 10.4.3 + lodash: 4.17.21 + traverse: 0.6.10 + tslib: 2.7.0 + + '@lens-protocol/storage@0.8.1': + dependencies: + '@lens-protocol/shared-kernel': 0.12.0 + tslib: 2.7.0 + zod: 3.23.8 + '@lexical/clipboard@0.17.1': dependencies: '@lexical/html': 0.17.1 @@ -19881,6 +20404,175 @@ snapshots: '@lit-labs/ssr-dom-shim@1.2.0': {} + '@lit-protocol/access-control-conditions@2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@lit-protocol/constants': 2.1.62 + '@lit-protocol/misc': 2.1.62 + '@lit-protocol/types': 2.1.62 + '@lit-protocol/uint8arrays': 2.1.62 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + tslib: 2.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@lit-protocol/auth-browser@2.1.62(@ethersproject/contracts@5.7.0)(@ethersproject/hash@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@ethersproject/wallet@5.7.0)(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': + dependencies: + '@lit-protocol/constants': 2.1.62 + '@lit-protocol/misc': 2.1.62 + '@lit-protocol/misc-browser': 2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lit-protocol/types': 2.1.62 + '@lit-protocol/uint8arrays': 2.1.62 + '@walletconnect/ethereum-provider': 2.15.2(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + lit-connect-modal: 0.1.11 + lit-siwe: 1.1.8(@ethersproject/contracts@5.7.0)(@ethersproject/hash@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@ethersproject/wallet@5.7.0) + tslib: 2.7.0 + tweetnacl: 1.0.3 + tweetnacl-util: 0.13.5 + util: 0.12.5 + web-vitals: 3.5.2 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@ethersproject/contracts' + - '@ethersproject/hash' + - '@ethersproject/providers' + - '@ethersproject/wallet' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - react + - uWebSockets.js + - utf-8-validate + + '@lit-protocol/bls-sdk@2.1.62': {} + + '@lit-protocol/constants@2.1.62': + dependencies: + '@lit-protocol/types': 2.1.62 + tslib: 2.7.0 + + '@lit-protocol/crypto@2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@lit-protocol/bls-sdk': 2.1.62 + '@lit-protocol/constants': 2.1.62 + '@lit-protocol/ecdsa-sdk': 2.1.62 + '@lit-protocol/misc': 2.1.62 + '@lit-protocol/nacl': 2.1.62 + '@lit-protocol/types': 2.1.62 + '@lit-protocol/uint8arrays': 2.1.62 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + tslib: 2.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@lit-protocol/ecdsa-sdk@2.1.62': {} + + '@lit-protocol/encryption@2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@lit-protocol/bls-sdk': 2.1.62 + '@lit-protocol/constants': 2.1.62 + '@lit-protocol/crypto': 2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lit-protocol/ecdsa-sdk': 2.1.62 + '@lit-protocol/misc': 2.1.62 + '@lit-protocol/nacl': 2.1.62 + '@lit-protocol/types': 2.1.62 + '@lit-protocol/uint8arrays': 2.1.62 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + jszip: 3.10.1 + tslib: 2.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@lit-protocol/lit-third-party-libs@2.1.62': {} + + '@lit-protocol/misc-browser@2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@lit-protocol/constants': 2.1.62 + '@lit-protocol/misc': 2.1.62 + '@lit-protocol/types': 2.1.62 + '@lit-protocol/uint8arrays': 2.1.62 + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + tslib: 2.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@lit-protocol/misc@2.1.62': + dependencies: + '@lit-protocol/constants': 2.1.62 + '@lit-protocol/types': 2.1.62 + tslib: 2.7.0 + + '@lit-protocol/nacl@2.1.62': {} + + '@lit-protocol/node-client@2.1.62(@ethersproject/contracts@5.7.0)(@ethersproject/hash@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@ethersproject/wallet@5.7.0)(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': + dependencies: + '@lit-protocol/access-control-conditions': 2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lit-protocol/auth-browser': 2.1.62(@ethersproject/contracts@5.7.0)(@ethersproject/hash@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@ethersproject/wallet@5.7.0)(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + '@lit-protocol/bls-sdk': 2.1.62 + '@lit-protocol/constants': 2.1.62 + '@lit-protocol/crypto': 2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lit-protocol/ecdsa-sdk': 2.1.62 + '@lit-protocol/encryption': 2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lit-protocol/lit-third-party-libs': 2.1.62 + '@lit-protocol/misc': 2.1.62 + '@lit-protocol/misc-browser': 2.1.62(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@lit-protocol/nacl': 2.1.62 + '@lit-protocol/types': 2.1.62 + '@lit-protocol/uint8arrays': 2.1.62 + '@walletconnect/ethereum-provider': 2.15.2(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + jszip: 3.10.1 + lit-connect-modal: 0.1.11 + lit-siwe: 1.1.8(@ethersproject/contracts@5.7.0)(@ethersproject/hash@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@ethersproject/wallet@5.7.0) + node-fetch: 2.7.0 + tslib: 2.7.0 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@ethersproject/contracts' + - '@ethersproject/hash' + - '@ethersproject/providers' + - '@ethersproject/wallet' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - react + - uWebSockets.js + - utf-8-validate + + '@lit-protocol/types@2.1.62': {} + + '@lit-protocol/uint8arrays@2.1.62': {} + '@lit/reactive-element@1.6.3': dependencies: '@lit-labs/ssr-dom-shim': 1.2.0 @@ -20185,8 +20877,8 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.1.0 - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 '@types/debug': 4.1.12 debug: 4.3.5 pony-cause: 2.1.11 @@ -20199,8 +20891,8 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.1.0 - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 '@types/debug': 4.1.12 debug: 4.3.7 pony-cause: 2.1.11 @@ -20373,6 +21065,35 @@ snapshots: transitivePeerDependencies: - encoding + '@next/env@14.2.14': {} + + '@next/swc-darwin-arm64@14.2.14': + optional: true + + '@next/swc-darwin-x64@14.2.14': + optional: true + + '@next/swc-linux-arm64-gnu@14.2.14': + optional: true + + '@next/swc-linux-arm64-musl@14.2.14': + optional: true + + '@next/swc-linux-x64-gnu@14.2.14': + optional: true + + '@next/swc-linux-x64-musl@14.2.14': + optional: true + + '@next/swc-win32-arm64-msvc@14.2.14': + optional: true + + '@next/swc-win32-ia32-msvc@14.2.14': + optional: true + + '@next/swc-win32-x64-msvc@14.2.14': + optional: true + '@neynar/nodejs-sdk@1.55.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)': dependencies: '@openapitools/openapi-generator-cli': 2.13.13 @@ -20733,17 +21454,17 @@ snapshots: '@polkadot-api/substrate-bindings@0.0.1': dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 '@polkadot-api/utils': 0.0.1 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 scale-ts: 1.6.0 optional: true '@polkadot-api/substrate-bindings@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0': dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 scale-ts: 1.6.0 optional: true @@ -22393,6 +23114,8 @@ snapshots: '@remix-run/router@1.16.0': {} + '@resvg/resvg-wasm@2.4.0': {} + '@rnx-kit/chromium-edge-launcher@1.0.0': dependencies: '@types/node': 18.19.32 @@ -22537,7 +23260,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.22.2 - viem: 2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + viem: 2.21.16(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) transitivePeerDependencies: - bufferutil - typescript @@ -22569,7 +23292,7 @@ snapshots: dependencies: '@noble/curves': 1.2.0 '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 '@scure/bip32@1.3.3': dependencies: @@ -22591,7 +23314,7 @@ snapshots: '@scure/bip39@1.2.1': dependencies: '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 '@scure/bip39@1.2.2': dependencies: @@ -22673,6 +23396,11 @@ snapshots: '@sentry/types': 5.30.0 tslib: 1.14.1 + '@shuding/opentype.js@1.4.0-beta.0': + dependencies: + fflate: 0.7.4 + string.prototype.codepointat: 0.2.1 + '@sideway/address@4.1.5': dependencies: '@hapi/hoek': 9.3.0 @@ -23181,6 +23909,10 @@ snapshots: - encoding - utf-8-validate + '@spruceid/siwe-parser@1.1.3': + dependencies: + apg-js: 4.4.0 + '@spruceid/siwe-parser@2.1.2': dependencies: '@noble/hashes': 1.4.0 @@ -23379,6 +24111,11 @@ snapshots: dependencies: tslib: 2.7.0 + '@swc/helpers@0.5.5': + dependencies: + '@swc/counter': 0.1.3 + tslib: 2.7.0 + '@swc/types@0.1.7': dependencies: '@swc/counter': 0.1.3 @@ -24206,6 +24943,12 @@ snapshots: '@ungap/structured-clone@1.2.0': {} + '@vercel/og@0.6.3': + dependencies: + '@resvg/resvg-wasm': 2.4.0 + satori: 0.10.9 + yoga-wasm-web: 0.3.3 + '@viem/anvil@0.0.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: execa: 7.2.0 @@ -25158,6 +25901,25 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 + '@xmtp/frames-validator@0.6.2(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)': + dependencies: + '@noble/curves': 1.5.0 + '@noble/hashes': 1.5.0 + '@xmtp/proto': 3.61.1 + viem: 2.21.16(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@xmtp/proto@3.61.1': + dependencies: + long: 5.2.3 + protobufjs: 7.3.0 + rxjs: 7.8.1 + undici: 5.28.4 + '@xstate/fsm@1.6.5': {} JSONStream@1.3.5: @@ -25650,6 +26412,8 @@ snapshots: base64-arraybuffer@1.0.2: {} + base64-js@0.0.8: {} + base64-js@1.5.1: {} base64url@3.0.1: {} @@ -25859,7 +26623,7 @@ snapshots: bs58check@3.0.1: dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 bs58: 5.0.0 bser@2.1.1: @@ -25899,6 +26663,10 @@ snapshots: builtin-status-codes@3.0.0: {} + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + bytes@3.0.0: {} bytes@3.1.2: {} @@ -25951,6 +26719,8 @@ snapshots: camelcase@7.0.1: {} + camelize@1.0.1: {} + caniuse-lite@1.0.30001655: {} canvas-renderer@2.1.1: {} @@ -26030,6 +26800,29 @@ snapshots: dependencies: get-func-name: 2.0.2 + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + + cheerio@1.0.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + parse5-parser-stream: 7.1.2 + undici: 6.19.8 + whatwg-mimetype: 4.0.0 + cheerio@1.0.0-rc.3: dependencies: css-select: 1.2.0 @@ -26605,10 +27398,16 @@ snapshots: dependencies: type-fest: 1.4.0 + css-background-parser@0.1.0: {} + css-box-model@1.2.1: dependencies: tiny-invariant: 1.3.3 + css-box-shadow@1.0.0-3: {} + + css-color-keywords@1.0.0: {} + css-functions-list@3.2.2: {} css-select@1.2.0: @@ -26626,6 +27425,20 @@ snapshots: domutils: 2.8.0 nth-check: 2.1.1 + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + + css-to-react-native@3.2.0: + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + css-what@2.1.3: {} css-what@6.1.0: {} @@ -26961,6 +27774,12 @@ snapshots: domhandler: 4.3.1 entities: 2.2.0 + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dom-walk@0.1.2: {} domain-browser@4.23.0: {} @@ -26977,6 +27796,10 @@ snapshots: dependencies: domelementtype: 2.3.0 + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + dompurify@2.5.2: {} domutils@1.5.1: @@ -26995,6 +27818,12 @@ snapshots: domelementtype: 2.3.0 domhandler: 4.3.1 + domutils@3.1.0: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dot-case@3.0.4: dependencies: no-case: 3.0.4 @@ -27110,6 +27939,11 @@ snapshots: encodeurl@1.0.2: {} + encoding-sniffer@0.2.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -27609,7 +28443,7 @@ snapshots: ethereum-bloom-filters@1.1.0: dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 ethereum-cryptography@0.1.3: dependencies: @@ -28077,6 +28911,8 @@ snapshots: fflate@0.4.8: {} + fflate@0.7.4: {} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -28297,6 +29133,25 @@ snapshots: fp-ts@1.19.3: {} + frames.js@0.19.3(@cloudflare/workers-types@4.20240925.0)(@lens-protocol/client@2.3.1(@lens-protocol/metadata@1.2.0(zod@3.23.6))(@types/react@18.3.3)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(@types/express@4.17.21)(@xmtp/frames-validator@0.6.2(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6))(bufferutil@4.0.8)(next@14.2.14(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): + dependencies: + '@cloudflare/workers-types': 4.20240925.0 + '@lens-protocol/client': 2.3.1(@lens-protocol/metadata@1.2.0(zod@3.23.6))(@types/react@18.3.3)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + '@types/express': 4.17.21 + '@vercel/og': 0.6.3 + '@xmtp/frames-validator': 0.6.2(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + cheerio: 1.0.0 + next: 14.2.14(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.0) + protobufjs: 7.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + viem: 2.21.16(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + fresh@0.5.2: {} fromentries@1.3.2: {} @@ -28533,6 +29388,14 @@ snapshots: graphemer@1.4.0: {} + graphql-request@6.1.0(graphql@16.9.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) + cross-fetch: 3.1.8 + graphql: 16.9.0 + transitivePeerDependencies: + - encoding + graphql-request@7.1.0(graphql@16.9.0): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -28540,6 +29403,11 @@ snapshots: graphql: 16.9.0 zod: 3.23.8 + graphql-tag@2.12.6(graphql@16.9.0): + dependencies: + graphql: 16.9.0 + tslib: 2.7.0 + graphql@16.9.0: {} h3@1.11.1: @@ -28702,6 +29570,8 @@ snapshots: dependencies: source-map: 0.7.4 + hex-rgb@4.3.0: {} + hexoid@1.0.0: {} hey-listen@1.0.8: {} @@ -28765,6 +29635,13 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + http-basic@8.1.3: dependencies: caseless: 0.12.0 @@ -29726,6 +30603,13 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-stable-stringify@1.1.1: + dependencies: + call-bind: 1.0.7 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + json-stringify-safe@5.0.1: {} json-to-graphql-query@2.2.5: {} @@ -29746,6 +30630,8 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonify@0.0.1: {} + jsonparse@1.3.1: {} jsonpointer@5.0.1: {} @@ -29777,6 +30663,13 @@ snapshots: object.assign: 4.1.5 object.values: 1.2.0 + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + junk@4.0.1: {} just-extend@6.2.0: {} @@ -29792,6 +30685,8 @@ snapshots: jwa: 1.4.1 safe-buffer: 5.2.1 + jwt-decode@3.1.2: {} + jwt-decode@4.0.0: {} keccak@3.0.4: @@ -29872,6 +30767,10 @@ snapshots: dependencies: immediate: 3.0.6 + lie@3.3.0: + dependencies: + immediate: 3.0.6 + lighthouse-logger@1.4.2: dependencies: debug: 2.6.9 @@ -29881,6 +30780,11 @@ snapshots: lilconfig@2.1.0: {} + linebreak@1.1.0: + dependencies: + base64-js: 0.0.8 + unicode-trie: 2.0.0 + lines-and-columns@1.2.4: {} link-module-alias@1.2.0: @@ -29917,6 +30821,10 @@ snapshots: transitivePeerDependencies: - uWebSockets.js + lit-connect-modal@0.1.11: + dependencies: + micromodal: 0.4.10 + lit-element@3.3.3: dependencies: '@lit-labs/ssr-dom-shim': 1.2.0 @@ -29927,6 +30835,16 @@ snapshots: dependencies: '@types/trusted-types': 2.0.7 + lit-siwe@1.1.8(@ethersproject/contracts@5.7.0)(@ethersproject/hash@5.7.0)(@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@ethersproject/wallet@5.7.0): + dependencies: + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@ethersproject/wallet': 5.7.0 + '@spruceid/siwe-parser': 1.1.3 + '@stablelib/random': 1.0.2 + apg-js: 4.4.0 + lit@2.8.0: dependencies: '@lit/reactive-element': 1.6.3 @@ -30772,6 +31690,8 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 + micromodal@0.4.10: {} + miller-rabin@4.0.1: dependencies: bn.js: 4.12.0 @@ -31023,6 +31943,34 @@ snapshots: next-tick@1.1.0: {} + next@14.2.14(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.0): + dependencies: + '@next/env': 14.2.14 + '@swc/helpers': 0.5.5 + busboy: 1.6.0 + caniuse-lite: 1.0.30001655 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.5)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 14.2.14 + '@next/swc-darwin-x64': 14.2.14 + '@next/swc-linux-arm64-gnu': 14.2.14 + '@next/swc-linux-arm64-musl': 14.2.14 + '@next/swc-linux-x64-gnu': 14.2.14 + '@next/swc-linux-x64-musl': 14.2.14 + '@next/swc-win32-arm64-msvc': 14.2.14 + '@next/swc-win32-ia32-msvc': 14.2.14 + '@next/swc-win32-x64-msvc': 14.2.14 + '@opentelemetry/api': 1.9.0 + '@playwright/test': 1.44.0 + sass: 1.77.0 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + nice-try@1.0.5: {} nise@5.1.9: @@ -31504,6 +32452,8 @@ snapshots: lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 + pako@0.2.9: {} + pako@1.0.11: {} pako@2.1.0: {} @@ -31530,6 +32480,11 @@ snapshots: parse-cache-control@1.0.1: {} + parse-css-color@0.2.1: + dependencies: + color-name: 1.1.4 + hex-rgb: 4.3.0 + parse-entities@4.0.1: dependencies: '@types/unist': 2.0.11 @@ -31557,6 +32512,15 @@ snapshots: parse-ms@2.1.0: {} + parse5-htmlparser2-tree-adapter@7.0.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.1.2 + parse5@3.0.3: dependencies: '@types/node': 20.12.10 @@ -31929,6 +32893,12 @@ snapshots: postcss-value-parser@4.2.0: {} + postcss@8.4.31: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + postcss@8.4.38: dependencies: nanoid: 3.3.7 @@ -33107,6 +34077,19 @@ snapshots: immutable: 4.3.5 source-map-js: 1.2.0 + satori@0.10.9: + dependencies: + '@shuding/opentype.js': 1.4.0-beta.0 + css-background-parser: 0.1.0 + css-box-shadow: 1.0.0-3 + css-to-react-native: 3.2.0 + emoji-regex: 10.3.0 + escape-html: 1.0.3 + linebreak: 1.1.0 + parse-css-color: 0.2.1 + postcss-value-parser: 4.2.0 + yoga-wasm-web: 0.3.3 + sax@1.3.0: {} saxes@6.0.0: @@ -33583,6 +34566,8 @@ snapshots: stream-shift@1.0.3: {} + streamsearch@1.1.0: {} + strict-event-emitter@0.4.6: {} strict-uri-encode@1.1.0: {} @@ -33613,6 +34598,8 @@ snapshots: get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 + string.prototype.codepointat@0.2.1: {} + string.prototype.matchall@4.0.11: dependencies: call-bind: 1.0.7 @@ -33719,6 +34706,13 @@ snapshots: style-search@0.1.0: {} + styled-jsx@5.1.1(@babel/core@7.24.5)(react@18.3.1): + dependencies: + client-only: 0.0.1 + react: 18.3.1 + optionalDependencies: + '@babel/core': 7.24.5 + stylelint-config-prettier@9.0.5(stylelint@14.16.1): dependencies: stylelint: 14.16.1 @@ -34034,6 +35028,8 @@ snapshots: tiny-emitter@2.1.0: {} + tiny-inflate@1.0.3: {} + tiny-invariant@1.3.3: {} tiny-secp256k1@1.1.6: @@ -34095,6 +35091,12 @@ snapshots: traverse-chain@0.1.0: optional: true + traverse@0.6.10: + dependencies: + gopd: 1.0.1 + typedarray.prototype.slice: 1.0.3 + which-typed-array: 1.1.15 + tree-kill@1.2.2: {} trim-newlines@3.0.1: {} @@ -34236,6 +35238,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + tweetnacl-util@0.13.5: {} + tweetnacl-util@0.15.1: {} tweetnacl@0.14.5: {} @@ -34322,6 +35326,15 @@ snapshots: dependencies: is-typedarray: 1.0.0 + typedarray.prototype.slice@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + typed-array-buffer: 1.0.2 + typed-array-byte-offset: 1.0.2 + typedarray@0.0.6: {} typeforce@1.18.0: {} @@ -34427,6 +35440,11 @@ snapshots: unicode-property-aliases-ecmascript@2.1.0: {} + unicode-trie@2.0.0: + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + unidiff@1.0.4: dependencies: diff: 5.2.0 @@ -34891,6 +35909,8 @@ snapshots: web-streams-polyfill@4.0.0-beta.3: {} + web-vitals@3.5.2: {} + web3-core-helpers@1.5.2: dependencies: web3-eth-iban: 1.5.2 @@ -35786,6 +36806,8 @@ snapshots: yocto-queue@1.0.0: {} + yoga-wasm-web@0.3.3: {} + z-schema@5.0.5: dependencies: lodash.get: 4.4.2 From 4c8dab29bd8e53a3852f4066dc2a9efbdca3e90b Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 3 Oct 2024 15:37:08 -0700 Subject: [PATCH 046/425] - memoize the file upload button. - make image uploads work on mobile --- .../views/components/MarkdownEditor/MarkdownEditor.tsx | 7 +++++++ .../MarkdownEditor/toolbars/FileUploadButton.tsx | 8 +++++--- .../MarkdownEditor/toolbars/ToolbarForMobile.tsx | 7 ++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx index 92afd8893e6..37db083b732 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx @@ -289,6 +289,12 @@ export const MarkdownEditor = memo(function MarkdownEditor( const handleRef = useCallback( (methods: MDXEditorMethods) => { + if (methods && mdxEditorRef.current === null) { + // on startup, the mdx editor places the cursor at the END of the + // document when loading content but this doesn't make a ton of sense. + methods.focus(undefined, { defaultSelection: 'rootStart' }); + } + mdxEditorRef.current = methods; onMarkdownEditorMethods?.(methods); }, @@ -352,6 +358,7 @@ export const MarkdownEditor = memo(function MarkdownEditor( mode === 'mobile' ? ( ) : ( diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.tsx index d102fc07214..517abb6a354 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useRef } from 'react'; +import React, { memo, useCallback, useRef } from 'react'; import { DEFAULT_ICON_SIZE } from 'views/components/MarkdownEditor/utils/iconComponentFor'; import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; @@ -13,7 +13,9 @@ type FileUploadButtonProps = Readonly<{ text?: string; }>; -export const FileUploadButton = (props: FileUploadButtonProps) => { +export const FileUploadButton = memo(function FileUploadButton( + props: FileUploadButtonProps, +) { const { onFile, accept, iconName, text } = props; const fileInputRef = useRef(null); @@ -54,4 +56,4 @@ export const FileUploadButton = (props: FileUploadButtonProps) => {
); -}; +}); diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index ebb9a4e8fe4..99268e16150 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -18,10 +18,12 @@ type ToolbarForMobileProps = Readonly<{ * toolbar. */ focus?: () => void; + + onImage?: (file: File) => void; }>; export const ToolbarForMobile = (props: ToolbarForMobileProps) => { - const { SubmitButton, focus } = props; + const { SubmitButton, focus, onImage } = props; const adjustForKeyboard = useCallback(() => { if (!window.visualViewport) { @@ -51,7 +53,6 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { const preventKeyboardDeactivation = useCallback( (event: React.MouseEvent) => { event.stopPropagation(); - event.preventDefault(); focus?.(); }, @@ -72,7 +73,7 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { - +
{SubmitButton && }
); From 7f535395b6fd5bc427c46058f2cf980f662c0227 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Fri, 4 Oct 2024 06:56:19 -0700 Subject: [PATCH 047/425] rmq setup + cleanup farcaster worker policy + fix frames --- .../rabbitmq/configuration/rascalConfig.ts | 20 +++++++ libs/adapters/src/rabbitmq/rabbitMQConfig.ts | 3 + libs/adapters/src/rabbitmq/types.ts | 7 +++ libs/core/src/integration/events.schemas.ts | 2 + libs/core/src/integration/events.ts | 5 ++ libs/core/src/integration/outbox.schema.ts | 6 ++ libs/core/src/ports/interfaces.ts | 1 + .../FarcasterCastCreatedWebhook.command.ts | 3 + .../contest/FarcasterUpvoteAction.command.ts | 3 + .../src/policies/FarcasterWorker.policy.ts | 7 +++ libs/model/src/policies/utils.ts | 11 ++++ libs/model/src/utils/utils.ts | 10 +++- libs/schemas/src/commands/contest.schemas.ts | 6 +- .../server/api/integration-router.ts | 6 +- .../commonwealth/server/farcaster/config.ts | 2 +- .../frames/contest/checkEligibility.tsx | 10 +++- .../farcaster/frames/contest/contestCard.tsx | 14 ++++- .../frames/contest/viewLeaderboard.tsx | 14 ++++- .../commonwealth/server/farcaster/router.tsx | 14 ++--- .../commonwealthConsumer.ts | 60 +++++++++---------- 20 files changed, 152 insertions(+), 52 deletions(-) diff --git a/libs/adapters/src/rabbitmq/configuration/rascalConfig.ts b/libs/adapters/src/rabbitmq/configuration/rascalConfig.ts index 4f5d97f4253..c4b7401e18a 100644 --- a/libs/adapters/src/rabbitmq/configuration/rascalConfig.ts +++ b/libs/adapters/src/rabbitmq/configuration/rascalConfig.ts @@ -138,6 +138,12 @@ export function getAllRascalConfigs( arguments: queueOptions, }, }, + [RascalQueues.FarcasterWorkerPolicy]: { + ...queueConfig, + options: { + arguments: queueOptions, + }, + }, }; const allBindings: Record = { @@ -193,6 +199,16 @@ export function getAllRascalConfigs( RascalRoutingKeys.ContestProjectionContestContentUpvoted, ], }, + [RascalBindings.FarcasterWorkerPolicy]: { + source: RascalExchanges.MessageRelayer, + destination: RascalQueues.FarcasterWorkerPolicy, + destinationType: 'queue', + bindingKeys: [ + RascalRoutingKeys.FarcasterWorkerPolicyCastCreated, + RascalRoutingKeys.FarcasterWorkerPolicyReplyCastCreated, + RascalRoutingKeys.FarcasterWorkerPolicyVoteCreated, + ], + }, }; const allPublications: Record = { @@ -228,6 +244,10 @@ export function getAllRascalConfigs( queue: RascalQueues.ContestProjection, ...subscriptionConfig, }, + [RascalSubscriptions.FarcasterWorkerPolicy]: { + queue: RascalQueues.FarcasterWorkerPolicy, + ...subscriptionConfig, + }, [RascalSubscriptions.NotificationsSettings]: { queue: RascalQueues.NotificationsSettings, ...subscriptionConfig, diff --git a/libs/adapters/src/rabbitmq/rabbitMQConfig.ts b/libs/adapters/src/rabbitmq/rabbitMQConfig.ts index 7c810bcb82b..6805bc63b32 100644 --- a/libs/adapters/src/rabbitmq/rabbitMQConfig.ts +++ b/libs/adapters/src/rabbitmq/rabbitMQConfig.ts @@ -77,6 +77,7 @@ export function getRabbitMQConfig( RascalQueues.NotificationsSettings, RascalQueues.ContestWorkerPolicy, RascalQueues.ContestProjection, + RascalQueues.FarcasterWorkerPolicy, ]); copyConfigs(allBindings, vhostConfig.bindings, [ RascalBindings.ChainEvent, @@ -84,6 +85,7 @@ export function getRabbitMQConfig( RascalBindings.NotificationsSettings, RascalBindings.ContestWorkerPolicy, RascalBindings.ContestProjection, + RascalBindings.FarcasterWorkerPolicy, ]); copyConfigs(allPublications, vhostConfig.publications, [ RascalPublications.MessageRelayer, @@ -94,6 +96,7 @@ export function getRabbitMQConfig( RascalSubscriptions.NotificationsSettings, RascalSubscriptions.ContestWorkerPolicy, RascalSubscriptions.ContestProjection, + RascalSubscriptions.FarcasterWorkerPolicy, ]); } else if (service === RascalConfigServices.DiscobotService) { copyConfigs(allExchanges, vhostConfig.exchanges, [ diff --git a/libs/adapters/src/rabbitmq/types.ts b/libs/adapters/src/rabbitmq/types.ts index 93445f7fa80..2cd6f8f2ed6 100644 --- a/libs/adapters/src/rabbitmq/types.ts +++ b/libs/adapters/src/rabbitmq/types.ts @@ -18,6 +18,7 @@ export enum RascalSubscriptions { NotificationsSettings = BrokerSubscriptions.NotificationsSettings, ContestWorkerPolicy = BrokerSubscriptions.ContestWorkerPolicy, ContestProjection = BrokerSubscriptions.ContestProjection, + FarcasterWorkerPolicy = BrokerSubscriptions.FarcasterWorkerPolicy, } export enum RascalExchanges { @@ -34,6 +35,7 @@ export enum RascalQueues { NotificationsSettings = 'NotificationsSettingsQueue', ContestWorkerPolicy = 'ContestWorkerPolicyQueue', ContestProjection = 'ContestProjection', + FarcasterWorkerPolicy = 'FarcasterWorkerPolicyQueue', } export enum RascalBindings { @@ -44,6 +46,7 @@ export enum RascalBindings { ChainEvent = 'ChainEventBinding', ContestWorkerPolicy = 'ContestWorkerPolicy', ContestProjection = 'ContestProjection', + FarcasterWorkerPolicy = 'FarcasterWorkerPolicy', } export enum RascalRoutingKeys { @@ -68,4 +71,8 @@ export enum RascalRoutingKeys { ContestProjectionContestStarted = EventNames.ContestStarted, ContestProjectionContestContentAdded = EventNames.ContestContentAdded, ContestProjectionContestContentUpvoted = EventNames.ContestContentUpvoted, + + FarcasterWorkerPolicyCastCreated = EventNames.FarcasterCastCreated, + FarcasterWorkerPolicyReplyCastCreated = EventNames.FarcasterReplyCastCreated, + FarcasterWorkerPolicyVoteCreated = EventNames.FarcasterVoteCreated, } diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index 182516073e1..c70a21223b5 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -257,3 +257,5 @@ export const FarcasterCastCreated = FarcasterCast.describe( export const FarcasterReplyCastCreated = FarcasterCast.describe( 'When a reply is posted to a farcaster contest cast', ); + +export const FarcasterVoteCreated = z.any(); diff --git a/libs/core/src/integration/events.ts b/libs/core/src/integration/events.ts index 473b590a227..26650dc545d 100644 --- a/libs/core/src/integration/events.ts +++ b/libs/core/src/integration/events.ts @@ -26,6 +26,7 @@ export enum EventNames { ContestContentUpvoted = 'ContestContentUpvoted', FarcasterCastCreated = 'FarcasterCastCreated', FarcasterReplyCastCreated = 'FarcasterReplyCastCreated', + FarcasterVoteCreated = 'FarcasterVoteCreated', // Preferences SubscriptionPreferencesUpdated = 'SubscriptionPreferencesUpdated', @@ -95,4 +96,8 @@ export type EventPairs = | { event_name: EventNames.FarcasterReplyCastCreated; event_payload: z.infer; + } + | { + event_name: EventNames.FarcasterVoteCreated; + event_payload: z.infer; }; diff --git a/libs/core/src/integration/outbox.schema.ts b/libs/core/src/integration/outbox.schema.ts index 208aacb95a7..abe4fc6c6b9 100644 --- a/libs/core/src/integration/outbox.schema.ts +++ b/libs/core/src/integration/outbox.schema.ts @@ -119,4 +119,10 @@ export const Outbox = z.union([ event_payload: events.FarcasterReplyCastCreated, }) .merge(BaseOutboxProperties), + z + .object({ + event_name: z.literal(EventNames.FarcasterVoteCreated), + event_payload: events.FarcasterVoteCreated, + }) + .merge(BaseOutboxProperties), ]); diff --git a/libs/core/src/ports/interfaces.ts b/libs/core/src/ports/interfaces.ts index ef2a0f88f54..4a9c532bf9f 100644 --- a/libs/core/src/ports/interfaces.ts +++ b/libs/core/src/ports/interfaces.ts @@ -206,6 +206,7 @@ export enum BrokerSubscriptions { NotificationsSettings = 'NotificationsSettings', ContestWorkerPolicy = 'ContestWorkerPolicy', ContestProjection = 'ContestProjection', + FarcasterWorkerPolicy = 'FarcasterWorkerPolicy', } /** diff --git a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts index 49e77db0dbf..d29c2e5cbd5 100644 --- a/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts +++ b/libs/model/src/contest/FarcasterCastCreatedWebhook.command.ts @@ -14,6 +14,9 @@ export function FarcasterCastCreatedWebhook(): Command< if (payload.data.embeds.length === 0) { throw new InvalidInput('embed must exist'); } + if (!payload.data.embeds[0].url.includes('/farcaster/contests/0x')) { + throw new InvalidInput('invalid embed'); + } await emitEvent( models.Outbox, diff --git a/libs/model/src/contest/FarcasterUpvoteAction.command.ts b/libs/model/src/contest/FarcasterUpvoteAction.command.ts index 450f18a4e75..f9d8215b124 100644 --- a/libs/model/src/contest/FarcasterUpvoteAction.command.ts +++ b/libs/model/src/contest/FarcasterUpvoteAction.command.ts @@ -10,6 +10,9 @@ export function FarcasterUpvoteAction(): Command< ...schemas.FarcasterUpvoteAction, auth: [], body: async ({ payload }) => { + return { + msg: 'HELLOEEZ!', + }; // // map FC Action to CW ThreadUpvoted // const contestManager = await models.ContestManager.findOne({ // where: { diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts index 90615fa500c..5f84c7b5530 100644 --- a/libs/model/src/policies/FarcasterWorker.policy.ts +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -11,6 +11,7 @@ const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); const inputs = { FarcasterCastCreated: events.FarcasterCastCreated, FarcasterReplyCastCreated: events.FarcasterReplyCastCreated, + FarcasterVoteCreated: events.FarcasterVoteCreated, }; export function FarcasterWorker(): Policy { @@ -19,9 +20,14 @@ export function FarcasterWorker(): Policy { body: { FarcasterCastCreated: async ({ payload }) => { const frame_url = new URL(payload.embeds[0].url).pathname; + console.log('FRAME URL: ', frame_url); const contestManager = await models.ContestManager.findOne({ where: { + cancelled: false, + ended: { + [Op.not]: true, + }, farcaster_frame_url: frame_url, }, }); @@ -84,6 +90,7 @@ export function FarcasterWorker(): Policy { content_url, }); }, + FarcasterVoteCreated: async ({ payload }) => {}, }, }; } diff --git a/libs/model/src/policies/utils.ts b/libs/model/src/policies/utils.ts index 848eef9895a..adc0c6f7e31 100644 --- a/libs/model/src/policies/utils.ts +++ b/libs/model/src/policies/utils.ts @@ -28,6 +28,17 @@ export async function createOnchainContestContent(payload: { const addressesToProcess = activeContestManagers .filter((c) => { + console.log('ACTIONS:', c.actions); + // if a projection exists with the same content url, don't add it onchain again + const duplicatePosts = c.actions.filter( + (action) => + action.action === 'added' && + action.content_url === payload.content_url, + ); + if (duplicatePosts.length > 0) { + log.warn('createContestContent: duplicate content found by url'); + return false; + } // only process contest managers for which // the user has not exceeded the post limit // on the latest contest diff --git a/libs/model/src/utils/utils.ts b/libs/model/src/utils/utils.ts index c51560d00d5..62a11b29d41 100644 --- a/libs/model/src/utils/utils.ts +++ b/libs/model/src/utils/utils.ts @@ -75,9 +75,15 @@ export function buildThreadContentUrl(communityId: string, threadId: number) { // returns community ID and thread ID from content url export function decodeThreadContentUrl(contentUrl: string): { - communityId: string; - threadId: number; + communityId: string | null; + threadId: number | null; } { + if (contentUrl.startsWith('/farcaster/')) { + return { + communityId: null, + threadId: null, + }; + } if (!contentUrl.includes('/discussion/')) { throw new Error(`invalid content url: ${contentUrl}`); } diff --git a/libs/schemas/src/commands/contest.schemas.ts b/libs/schemas/src/commands/contest.schemas.ts index cb81c6d481a..a1b6943e2d8 100644 --- a/libs/schemas/src/commands/contest.schemas.ts +++ b/libs/schemas/src/commands/contest.schemas.ts @@ -149,6 +149,8 @@ export const FarcasterCastCreatedWebhook = { }; export const FarcasterUpvoteAction = { - input: z.object({}), - output: z.object({}), + input: z.any(), + output: z.object({ + msg: z.string(), + }), }; diff --git a/packages/commonwealth/server/api/integration-router.ts b/packages/commonwealth/server/api/integration-router.ts index 81f03145d3f..af10125bee5 100644 --- a/packages/commonwealth/server/api/integration-router.ts +++ b/packages/commonwealth/server/api/integration-router.ts @@ -73,6 +73,9 @@ function build(validator: DatabaseValidationService) { express.command(ChainEvents.ChainEventCreated()), ); + // Farcaster frames + router.use('/farcaster/contests', farcasterRouter); + // Farcaster webhooks router.post( '/farcaster/CastCreated', @@ -104,9 +107,6 @@ function build(validator: DatabaseValidationService) { express.command(Contest.FarcasterUpvoteAction()), ); - // Farcaster frames - router.use('/farcaster', farcasterRouter); - // Discord BOT integration router.post( '/bot/threads', diff --git a/packages/commonwealth/server/farcaster/config.ts b/packages/commonwealth/server/farcaster/config.ts index 3bc99349f40..1b381cb4132 100644 --- a/packages/commonwealth/server/farcaster/config.ts +++ b/packages/commonwealth/server/farcaster/config.ts @@ -1,7 +1,7 @@ import { createFrames } from 'frames.js/express'; export const frames = createFrames({ - basePath: '/api/integration/farcaster', + basePath: '/api/integration/farcaster/contests', // important for rendering jsx images properly imagesRoute: null, }); diff --git a/packages/commonwealth/server/farcaster/frames/contest/checkEligibility.tsx b/packages/commonwealth/server/farcaster/frames/contest/checkEligibility.tsx index 375afd71bd0..02751e478ed 100644 --- a/packages/commonwealth/server/farcaster/frames/contest/checkEligibility.tsx +++ b/packages/commonwealth/server/farcaster/frames/contest/checkEligibility.tsx @@ -3,7 +3,7 @@ import React from 'react'; import { frames } from '../../config'; import { circleCheckIcon, circleXIcon, fakeApiCall } from '../../utils'; -export const checkEligibility = frames(async () => { +export const checkEligibility = frames(async (ctx) => { let eligible: boolean; try { @@ -19,6 +19,8 @@ export const checkEligibility = frames(async () => { ? 'Reply to this cast or quote this frame to be entered into the contest.' : 'In order to enter this contest you must connect an Ethereum wallet to your Farcaster account.'; + const contest_address = ctx.url.pathname.split('/')[1]; + return { image: (
{
), buttons: [ - , ], diff --git a/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx b/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx index 07f8f91281e..2104fb6b8bd 100644 --- a/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx +++ b/packages/commonwealth/server/farcaster/frames/contest/contestCard.tsx @@ -30,13 +30,15 @@ const PrizeRow = ({ index, prize }: { index: number; prize: number }) => { ); }; -export const contestCard = frames(async () => { +export const contestCard = frames(async (ctx) => { // here we would need to be able to fetch data related to contest eg // image, title, description, prizes // check designs https://www.figma.com/design/NNqlhNPHvn0O96TCBIi6WU/Contests?node-id=960-3689&t=8ogN11dhaRqJP8ET-1 const prizes = [0.005, 0.003, 0.001]; + const contest_address = ctx.url.pathname.split('/')[1]; + return { title: 'Contest Title', image: ( @@ -60,6 +62,8 @@ export const contestCard = frames(async () => { Contest Title

+

{contest_address}

+

This is contest description.

Current Prizes

@@ -76,11 +80,15 @@ export const contestCard = frames(async () => { , - , ], diff --git a/packages/commonwealth/server/farcaster/frames/contest/viewLeaderboard.tsx b/packages/commonwealth/server/farcaster/frames/contest/viewLeaderboard.tsx index b8eee34a7b6..5cacca8fb3b 100644 --- a/packages/commonwealth/server/farcaster/frames/contest/viewLeaderboard.tsx +++ b/packages/commonwealth/server/farcaster/frames/contest/viewLeaderboard.tsx @@ -22,6 +22,8 @@ export const viewLeaderboard = frames(async (ctx) => { const noEntries = leaderboardEntries.length === 0; const entry = leaderboardEntries[0]; + const contest_address = ctx.url.pathname.split('/')[1]; + return { image: (
{ ◀ , ]), - , ]), - , ], diff --git a/packages/commonwealth/server/farcaster/router.tsx b/packages/commonwealth/server/farcaster/router.tsx index d2f6fda86ab..f3f986e8c84 100644 --- a/packages/commonwealth/server/farcaster/router.tsx +++ b/packages/commonwealth/server/farcaster/router.tsx @@ -8,13 +8,13 @@ import { resultGame, startGame } from './frames/gameExample'; const farcasterRouter = express.Router(); -farcasterRouter.get('/game', startGame); -farcasterRouter.post('/game', startGame); -farcasterRouter.post('/result', resultGame); +farcasterRouter.get('/:contest_address/contestCard', contestCard); +farcasterRouter.post('/:contest_address/contestCard', contestCard); +farcasterRouter.post('/:contest_address/viewLeaderboard', viewLeaderboard); +farcasterRouter.post('/:contest_address/checkEligibility', checkEligibility); -farcasterRouter.get('/contestCard', contestCard); -farcasterRouter.post('/contestCard', contestCard); -farcasterRouter.post('/viewLeaderboard', viewLeaderboard); -farcasterRouter.post('/checkEligibility', checkEligibility); +farcasterRouter.get('/:contest_address/game', startGame); +farcasterRouter.post('/:contest_address/game', startGame); +farcasterRouter.post('/:contest_address/result', resultGame); export default farcasterRouter; diff --git a/packages/commonwealth/server/workers/commonwealthConsumer/commonwealthConsumer.ts b/packages/commonwealth/server/workers/commonwealthConsumer/commonwealthConsumer.ts index 7fc30d0bb56..5efd181022a 100644 --- a/packages/commonwealth/server/workers/commonwealthConsumer/commonwealthConsumer.ts +++ b/packages/commonwealth/server/workers/commonwealthConsumer/commonwealthConsumer.ts @@ -16,7 +16,7 @@ import { logger, stats, } from '@hicommonwealth/core'; -import { Contest, ContestWorker } from '@hicommonwealth/model'; +import { Contest, ContestWorker, FarcasterWorker } from '@hicommonwealth/model'; import { fileURLToPath } from 'url'; import { config } from '../../config'; import { ChainEventPolicy } from './policies/chainEventCreated/chainEventCreatedPolicy'; @@ -39,6 +39,17 @@ startHealthCheckLoop({ }, }); +function checkSubscriptionResponse( + subRes: boolean, + topic: BrokerSubscriptions, +) { + if (!subRes) { + log.fatal(`Failed to subscribe to ${topic}. Requires restart!`, undefined, { + topic, + }); + } +} + // CommonwealthConsumer is a server that consumes (and processes) RabbitMQ messages // from external apps or services (like the Snapshot Service). It exists because we // don't want to modify the Commonwealth database directly from external apps/services. @@ -72,6 +83,7 @@ export async function setupCommonwealthConsumer(): Promise { BrokerSubscriptions.ChainEvent, ChainEventPolicy(), ); + checkSubscriptionResponse(chainEventSubRes, BrokerSubscriptions.ChainEvent); const contestWorkerSubRes = await brokerInstance.subscribe( BrokerSubscriptions.ContestWorkerPolicy, @@ -88,41 +100,29 @@ export async function setupCommonwealthConsumer(): Promise { }, }, ); + checkSubscriptionResponse( + contestWorkerSubRes, + BrokerSubscriptions.ContestWorkerPolicy, + ); const contestProjectionsSubRes = await brokerInstance.subscribe( BrokerSubscriptions.ContestProjection, Contest.Contests(), ); + checkSubscriptionResponse( + contestProjectionsSubRes, + BrokerSubscriptions.ContestProjection, + ); - if (!chainEventSubRes) { - log.fatal( - 'Failed to subscribe to chain-events. Requires restart!', - undefined, - { - topic: BrokerSubscriptions.ChainEvent, - }, - ); - } - - if (!contestWorkerSubRes) { - log.fatal( - 'Failed to subscribe to contest worker events. Requires restart!', - undefined, - { - topic: BrokerSubscriptions.ContestWorkerPolicy, - }, - ); - } - - if (!contestProjectionsSubRes) { - log.fatal( - 'Failed to subscribe to contest projection events. Requires restart!', - undefined, - { - topic: BrokerSubscriptions.ContestProjection, - }, - ); - } + const farcasterWorkerSubRes = await brokerInstance.subscribe( + BrokerSubscriptions.FarcasterWorkerPolicy, + FarcasterWorker(), + buildRetryStrategy(undefined, 20_000), + ); + checkSubscriptionResponse( + farcasterWorkerSubRes, + BrokerSubscriptions.FarcasterWorkerPolicy, + ); } function startRolloverLoop() { From 2753df2ae43c114c420e71e77abcf18bebbf26fa Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 4 Oct 2024 17:54:49 +0300 Subject: [PATCH 048/425] updated startEvmPolling tests + getAnvil utility --- libs/evm-testing/src/utils/chainUtil.ts | 9 +- libs/model/src/models/contract_abi.ts | 2 +- .../evm/evmChainEvents/logProcessing.spec.ts | 26 ++- .../evmChainEvents/startEvmPolling.spec.ts | 209 ++++++++++-------- .../devnet/evm/tokenBalanceFetching.spec.ts | 2 +- .../test/integration/evmChainEvents/util.ts | 68 +++--- 6 files changed, 187 insertions(+), 129 deletions(-) diff --git a/libs/evm-testing/src/utils/chainUtil.ts b/libs/evm-testing/src/utils/chainUtil.ts index 36a53522b74..62411cf8bc4 100644 --- a/libs/evm-testing/src/utils/chainUtil.ts +++ b/libs/evm-testing/src/utils/chainUtil.ts @@ -54,13 +54,14 @@ export async function mineBlocks(blocks: number) { } export async function getAnvil( + forkEthChainId: 84532 | 1, options: CreateAnvilOptions = {}, - protocolFork?: boolean, ): Promise { const anvil = createAnvil({ - forkUrl: protocolFork - ? `https://base-sepolia.g.alchemy.com/v2/${config.ALCHEMY.APP_KEYS.PRIVATE}` - : `https://eth-mainnet.g.alchemy.com/v2/${config.ALCHEMY.APP_KEYS.PRIVATE}`, + forkUrl: + forkEthChainId === 84532 + ? `https://base-sepolia.g.alchemy.com/v2/${config.ALCHEMY.APP_KEYS.PRIVATE}` + : `https://eth-mainnet.g.alchemy.com/v2/${config.ALCHEMY.APP_KEYS.PRIVATE}`, silent: false, port: 8545, autoImpersonate: true, diff --git a/libs/model/src/models/contract_abi.ts b/libs/model/src/models/contract_abi.ts index bb3bb8cc40f..1058c7bd6b4 100644 --- a/libs/model/src/models/contract_abi.ts +++ b/libs/model/src/models/contract_abi.ts @@ -4,7 +4,7 @@ import { hashAbi } from '../utils/utils'; import type { ModelInstance } from './types'; export type ContractAbiAttributes = { - id: number; + id?: number; nickname?: string; abi: AbiType; abi_hash?: string; diff --git a/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts b/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts index 285ae9c71ab..66bd4a09b50 100644 --- a/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts +++ b/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts @@ -41,14 +41,18 @@ const namespaceDeployedLog = { removed: false, }; const namespaceFactoryAddress = - commonProtocol.factoryContracts[84532].factory.toLowerCase(); + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].factory.toLowerCase(); const namespaceDeployedSignature = '0x8870ba2202802ce285ce6bead5ac915b6dc2d35c8a9d6f96fa56de9de12829d5'; const namespaceFactory = new NamespaceFactory(); const namespaceName = `cetest${new Date().getTime()}`; const communityStakeAddress = - commonProtocol.factoryContracts[84532].communityStake.toLowerCase(); + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].communityStake.toLowerCase(); const communityStakeTradeSignature = '0xfc13c9a8a9a619ac78b803aecb26abdd009182411d51a986090f82519d88a89e'; const communityStake = new CommunityStake(); @@ -57,10 +61,10 @@ describe('EVM Chain Events Log Processing Tests', () => { let namespaceDeployedBlock: number; let communityStakeBuyBlock: number; let communityStakeSellBlock: number; - let anvil: Anvil; + let anvil: Anvil | undefined; beforeAll(async () => { - anvil = await getAnvil({}, true); + anvil = await getAnvil(commonProtocol.ValidChains.SepoliaBase); let res = await namespaceFactory.deployNamespace(namespaceName); namespaceDeployedBlock = res.block; @@ -76,7 +80,7 @@ describe('EVM Chain Events Log Processing Tests', () => { }); afterAll(async () => { - await anvil.stop(); + await anvil?.stop(); await dispose()(); }); @@ -131,7 +135,11 @@ describe('EVM Chain Events Log Processing Tests', () => { const emptyRes = await getLogs({ rpc: localRpc, maxBlockRange: 10, - contractAddresses: [commonProtocol.factoryContracts[84532].factory], + contractAddresses: [ + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].factory, + ], startingBlockNum: namespaceDeployedBlock - 11, endingBlockNum: namespaceDeployedBlock - 1, }); @@ -141,7 +149,11 @@ describe('EVM Chain Events Log Processing Tests', () => { const res = await getLogs({ rpc: localRpc, maxBlockRange: 500, - contractAddresses: [commonProtocol.factoryContracts[84532].factory], + contractAddresses: [ + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].factory, + ], startingBlockNum: namespaceDeployedBlock, endingBlockNum: namespaceDeployedBlock, }); diff --git a/packages/commonwealth/test/devnet/evm/evmChainEvents/startEvmPolling.spec.ts b/packages/commonwealth/test/devnet/evm/evmChainEvents/startEvmPolling.spec.ts index 7e7777c8ecd..f4d0fca196c 100644 --- a/packages/commonwealth/test/devnet/evm/evmChainEvents/startEvmPolling.spec.ts +++ b/packages/commonwealth/test/devnet/evm/evmChainEvents/startEvmPolling.spec.ts @@ -1,74 +1,96 @@ +import { ChainEventCreated, EventNames, dispose } from '@hicommonwealth/core'; import { - EventNames, - events as coreEvents, - dispose, -} from '@hicommonwealth/core'; -import { getAnvil } from '@hicommonwealth/evm-testing'; -import { tester, type ContractInstance, type DB } from '@hicommonwealth/model'; -import { delay } from '@hicommonwealth/shared'; + CommunityStake, + NamespaceFactory, + communityStakesAbi, + getAnvil, + namespaceFactoryAbi, +} from '@hicommonwealth/evm-testing'; +import { ChainNodeInstance, hashAbi, models } from '@hicommonwealth/model'; +import { BalanceType, commonProtocol, delay } from '@hicommonwealth/shared'; import { Anvil } from '@viem/anvil'; -import { expect } from 'chai'; -import { afterAll, beforeAll, describe, test } from 'vitest'; +import { afterAll, beforeAll, describe, expect, test } from 'vitest'; import { z } from 'zod'; import { startEvmPolling } from '../../../../server/workers/evmChainEvents/startEvmPolling'; -import { - getTestAbi, - getTestChainNode, - getTestContract, - getTestSignatures, -} from '../../../integration/evmChainEvents/util'; -import { sdk } from './util'; +import { localRpc } from './util'; -describe('EVM Chain Events End to End Tests', () => { - let models: DB; - let anvil: Anvil; - - let propCreatedResult: { block: number; proposalId: string }; - let contract: ContractInstance; - - async function verifyBlockNumber( - chainNodeId: number, - blockNumber: null | number, - ) { - const lastBlock = await models.LastProcessedEvmBlock.findOne({ - where: { - chain_node_id: chainNodeId, - }, - }); +const namespaceFactory = new NamespaceFactory(); +const namespaceName = `cetest${new Date().getTime()}`; +const communityStake = new CommunityStake(); +const namespaceDeployedSignature = + '0x8870ba2202802ce285ce6bead5ac915b6dc2d35c8a9d6f96fa56de9de12829d5'; +const communityStakeTradeSignature = + '0xfc13c9a8a9a619ac78b803aecb26abdd009182411d51a986090f82519d88a89e'; - let lastBlockNum: number; - if (!lastBlock && blockNumber === null) { - return; - } else if (!lastBlock && blockNumber !== null) { - throw new Error('Last processed block not found'); - } else { - // @ts-expect-error StrictNullChecks - lastBlockNum = lastBlock.block_number; - } - - if (blockNumber === null) { - expect(lastBlockNum).to.be.null; - } else { - expect(lastBlockNum).to.be.gte(blockNumber); - } - } +describe('EVM Chain Events End to End Tests', () => { + let anvil: Anvil | undefined; + let namespaceDeployedBlock: number; + let communityStakeBuyBlock: number; + let communityStakeSellBlock: number; + let chainNode: ChainNodeInstance; beforeAll(async () => { - models = await tester.seedDb(); - anvil = await getAnvil(); - const currentBlock = Number((await sdk.getBlock()).number); - // advance time to avoid test interaction issues - await sdk.safeAdvanceTime(currentBlock + 502); - await models.LastProcessedEvmBlock.destroy({ - where: {}, + chainNode = await models.ChainNode.create({ + url: localRpc, + balance_type: BalanceType.Ethereum, + name: 'Local Base Sepolia', + eth_chain_id: commonProtocol.ValidChains.SepoliaBase, + max_ce_block_range: -1, + }); + const namespaceAbiInstance = await models.ContractAbi.create({ + abi: namespaceFactoryAbi, + nickname: 'NamespaceFactory', + abi_hash: hashAbi(namespaceFactoryAbi), }); - await models.EvmEventSource.destroy({ - where: {}, + const stakesAbiInstance = await models.ContractAbi.create({ + abi: communityStakesAbi, + nickname: 'CommunityStakes', + abi_hash: hashAbi(communityStakesAbi), }); + await models.EvmEventSource.bulkCreate([ + { + chain_node_id: chainNode.id!, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].factory.toLowerCase(), + event_signature: namespaceDeployedSignature, + kind: 'DeployedNamespace', + abi_id: namespaceAbiInstance.id!, + }, + { + chain_node_id: chainNode.id!, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].communityStake.toLowerCase(), + event_signature: communityStakeTradeSignature, + kind: 'Trade', + abi_id: stakesAbiInstance.id!, + }, + ]); + + anvil = await getAnvil(commonProtocol.ValidChains.SepoliaBase); + + let res = await namespaceFactory.deployNamespace(namespaceName); + namespaceDeployedBlock = res.block; + + // emits a buy stake event + await namespaceFactory.configureCommunityStakes(namespaceName, 2); + + res = await communityStake.buyStake(namespaceName, 2, 1); + communityStakeBuyBlock = res.block; + + res = await communityStake.sellStake(namespaceName, 2, 1); + communityStakeSellBlock = res.block; + + console.log( + `Events located in blocks: ${namespaceDeployedBlock}, ${namespaceDeployedBlock + 1}, ${communityStakeBuyBlock}, and ${communityStakeSellBlock}`, + ); }); afterAll(async () => { - await anvil.stop(); + await anvil?.stop(); await dispose()(); }); @@ -76,48 +98,55 @@ describe('EVM Chain Events End to End Tests', () => { 'should insert events into the outbox', { timeout: 80_000 }, async () => { - const chainNode = await getTestChainNode(); - const abi = await getTestAbi(); - contract = await getTestContract(); - await contract.update({ abi_id: abi.id }); - await getTestSignatures(); - - // create proposal notification - await sdk.getVotingPower(1, '400000'); - propCreatedResult = await sdk.createProposal(1); - console.log( - `Proposal created at block ${propCreatedResult.block} with id ${propCreatedResult.proposalId}`, - ); - await sdk.mineBlocks(10); - expect(await models.Outbox.count()).to.equal(0); - await verifyBlockNumber(contract.chain_node_id, null); + let lastProcessedBlockNumber = await models.LastProcessedEvmBlock.findOne( + { + where: { + chain_node_id: chainNode.id!, + }, + }, + ); + expect(lastProcessedBlockNumber).toBeFalsy(); const intervalId = await startEvmPolling(10_000); clearInterval(intervalId); await delay(5000); - await verifyBlockNumber( - contract.chain_node_id, - propCreatedResult.block - 1, - ); - const events = await models.Outbox.findAll(); - expect(events.length).to.equal(1); - expect(events[0]?.event_name).to.equal(EventNames.ChainEventCreated); + lastProcessedBlockNumber = await models.LastProcessedEvmBlock.findOne({ + where: { + chain_node_id: chainNode.id!, + }, + }); + // should stop before the current block to minimize chain re-org impact + expect(lastProcessedBlockNumber?.block_number).to.be.greaterThanOrEqual( + communityStakeSellBlock - 1, + ); - const event = events[0].event_payload as z.infer< - typeof coreEvents.ChainEventCreated - >; + const events = (await models.Outbox.findAll()) as unknown as Array<{ + event_name: EventNames.ChainEventCreated; + event_payload: z.infer; + }>; + expect(events.length).to.equal(3); + for (const { event_name } of events) { + expect(event_name).to.equal(EventNames.ChainEventCreated); + } - expect(event.eventSource).to.deep.equal({ - kind: 'proposal-created', - chainNodeId: chainNode.id, - eventSignature: - '0x7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0', + expect(events[0].event_payload.eventSource).to.deep.equal({ + kind: 'DeployedNamespace', + chainNodeId: chainNode.id!, + eventSignature: namespaceDeployedSignature, + }); + expect(events[1].event_payload.eventSource).to.deep.equal({ + kind: 'Trade', + chainNodeId: chainNode.id!, + eventSignature: communityStakeTradeSignature, + }); + expect(events[2].event_payload.eventSource).to.deep.equal({ + kind: 'Trade', + chainNodeId: chainNode.id!, + eventSignature: communityStakeTradeSignature, }); - expect(event.parsedArgs).to.exist; - expect(event.rawLog).to.exist; }, ); }); diff --git a/packages/commonwealth/test/devnet/evm/tokenBalanceFetching.spec.ts b/packages/commonwealth/test/devnet/evm/tokenBalanceFetching.spec.ts index 48ff15350b1..3ab86b31afa 100644 --- a/packages/commonwealth/test/devnet/evm/tokenBalanceFetching.spec.ts +++ b/packages/commonwealth/test/devnet/evm/tokenBalanceFetching.spec.ts @@ -93,7 +93,7 @@ describe('Token Balance Cache EVM Tests', { timeout: 160_000 }, function () { } beforeAll(async () => { - anvil = await getAnvil(); + anvil = await getAnvil(1); models = await tester.seedDb(); cache({ adapter: new RedisCache('redis://localhost:6379'), diff --git a/packages/commonwealth/test/integration/evmChainEvents/util.ts b/packages/commonwealth/test/integration/evmChainEvents/util.ts index ae675968eff..367e21e473e 100644 --- a/packages/commonwealth/test/integration/evmChainEvents/util.ts +++ b/packages/commonwealth/test/integration/evmChainEvents/util.ts @@ -1,9 +1,14 @@ +import { + communityStakesAbi, + namespaceFactoryAbi, +} from '@hicommonwealth/evm-testing'; import { hashAbi, models } from '@hicommonwealth/model'; import { BalanceType, ChainBase, ChainNetwork, ChainType, + commonProtocol, } from '@hicommonwealth/shared'; import { rawCompoundAbi, @@ -13,39 +18,47 @@ import { compoundPropCreatedSignature, compoundPropQueuedSignature, localRpc, - sdk, } from '../../devnet/evm/evmChainEvents/util'; export const testChainId = 'compound-test'; export const testChainIdV2 = 'dydx-test'; -export const testAbiNickname = 'FeiDAO'; -export const testAbiNicknameV2 = 'DydxGovernor'; +export const testAbiNickname = 'NamespaceFactory'; +export const testAbiNicknameV2 = 'CommunityStakes'; export async function getTestChainNode(version?: 'v1' | 'v2') { - let rpc: string, name: string; - if (!version || version === 'v1') { - rpc = localRpc; - name = 'Test Node'; - } else { - rpc = 'http://localhost:8546'; - name = 'Test Node 2'; + let url = localRpc; + let name = 'Local Base Sepolia'; + let eth_chain_id = commonProtocol.ValidChains.SepoliaBase; + + if (version === 'v2') { + url = 'http://localhost:8546'; + name = 'Local Ethereum Sepolia'; + eth_chain_id = commonProtocol.ValidChains.Sepolia; } - const [chainNode] = await models.ChainNode.findOrCreate({ + const chainNode = await models.ChainNode.findOne({ where: { - url: rpc, - balance_type: BalanceType.Ethereum, - }, - // @ts-expect-error StrictNullChecks - defaults: { - name, + eth_chain_id: eth_chain_id, }, }); - return chainNode; + if (chainNode) { + chainNode.url = url; + chainNode.name = name; + chainNode.balance_type = BalanceType.Ethereum; + await chainNode.save(); + return chainNode; + } + + return await models.ChainNode.create({ + url, + balance_type: BalanceType.Ethereum, + name, + eth_chain_id, + }); } -export async function getTestChain(version?: 'v1' | 'v2') { +export async function getTestCommunity(version?: 'v1' | 'v2') { const chainNode = await getTestChainNode(version); let chainId: string, name: string, defaultSymbol: string; @@ -92,10 +105,10 @@ export async function getTestChain(version?: 'v1' | 'v2') { export async function getTestAbi(version?: 'v1' | 'v2') { let hash: string, nickname: string; if (!version || version === 'v1') { - hash = hashAbi(rawCompoundAbi); + hash = hashAbi(namespaceFactoryAbi); nickname = testAbiNickname; } else { - hash = hashAbi(rawDydxAbi); + hash = hashAbi(communityStakesAbi); nickname = testAbiNicknameV2; } const existingAbi = await models.ContractAbi.findOne({ @@ -120,9 +133,10 @@ export async function getTestContract(version?: 'v1' | 'v2') { let address: string; if (!version || version === 'v1') { - address = sdk.contractAddrs.compound.governance; + address = commonProtocol.factoryContracts[chainNode.eth_chain_id!].factory; } else { - address = '0x7E9B1672616FF6D6629Ef2879419aaE79A9018D2'; + address = + commonProtocol.factoryContracts[chainNode.eth_chain_id!].communityStake; } const [contract] = await models.Contract.findOrCreate({ @@ -138,7 +152,7 @@ export async function getTestContract(version?: 'v1' | 'v2') { export async function getTestCommunityContract(version?: 'v1' | 'v2') { const contract = await getTestContract(version); - const chain = await getTestChain(version); + const chain = await getTestCommunity(version); const [communityContract] = await models.CommunityContract.findOrCreate({ where: { @@ -168,9 +182,11 @@ export async function getTestSignatures(version?: 'v1' | 'v2') { let contractAddress: string; if (!version || version === 'v1') { - contractAddress = sdk.contractAddrs.compound.governance; + contractAddress = + commonProtocol.factoryContracts[chainNode.eth_chain_id!].factory; } else { - contractAddress = '0x7E9B1672616FF6D6629Ef2879419aaE79A9018D2'; + contractAddress = + commonProtocol.factoryContracts[chainNode.eth_chain_id!].communityStake; } // signatures are the same for v1 and v2 From 3e1f0906117572c8303036237264033ade143faa Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 4 Oct 2024 18:00:02 +0300 Subject: [PATCH 049/425] combine devnet tests --- .../evm/evmChainEvents/logProcessing.spec.ts | 123 +++++++++++++++++- 1 file changed, 118 insertions(+), 5 deletions(-) diff --git a/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts b/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts index 66bd4a09b50..d14f3b5e5b2 100644 --- a/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts +++ b/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts @@ -1,22 +1,34 @@ import { Log } from '@ethersproject/providers'; -import { dispose } from '@hicommonwealth/core'; +import { ChainEventCreated, dispose, EventNames } from '@hicommonwealth/core'; import { CommunityStake, - NamespaceFactory, communityStakesAbi, getAnvil, + NamespaceFactory, namespaceFactoryAbi, } from '@hicommonwealth/evm-testing'; -import { equalEvmAddresses } from '@hicommonwealth/model'; -import { AbiType, commonProtocol } from '@hicommonwealth/shared'; +import { + ChainNodeInstance, + equalEvmAddresses, + hashAbi, + models, +} from '@hicommonwealth/model'; +import { + AbiType, + BalanceType, + commonProtocol, + delay, +} from '@hicommonwealth/shared'; import { Anvil } from '@viem/anvil'; import { afterAll, beforeAll, describe, expect, test } from 'vitest'; +import { z } from 'zod'; import { getEvents, getLogs, getProvider, parseLogs, } from '../../../../server/workers/evmChainEvents/logProcessing'; +import { startEvmPolling } from '../../../../server/workers/evmChainEvents/startEvmPolling'; import { ContractSources, EvmSource, @@ -57,7 +69,7 @@ const communityStakeTradeSignature = '0xfc13c9a8a9a619ac78b803aecb26abdd009182411d51a986090f82519d88a89e'; const communityStake = new CommunityStake(); -describe('EVM Chain Events Log Processing Tests', () => { +describe('EVM Chain Events Devnet Tests', () => { let namespaceDeployedBlock: number; let communityStakeBuyBlock: number; let communityStakeSellBlock: number; @@ -163,6 +175,7 @@ describe('EVM Chain Events Log Processing Tests', () => { ); }); + // TODO: move to parallel unit tests describe('parsing logs', () => { test('should not throw if an invalid ABI is given for a contract address', async () => { const evmSource: EvmSource = { @@ -315,4 +328,104 @@ describe('EVM Chain Events Log Processing Tests', () => { ).toBeTruthy(); }); }); + describe('EVM Chain Events End to End Tests', () => { + let chainNode: ChainNodeInstance; + + beforeAll(async () => { + chainNode = await models.ChainNode.create({ + url: localRpc, + balance_type: BalanceType.Ethereum, + name: 'Local Base Sepolia', + eth_chain_id: commonProtocol.ValidChains.SepoliaBase, + max_ce_block_range: -1, + }); + const namespaceAbiInstance = await models.ContractAbi.create({ + abi: namespaceFactoryAbi, + nickname: 'NamespaceFactory', + abi_hash: hashAbi(namespaceFactoryAbi), + }); + const stakesAbiInstance = await models.ContractAbi.create({ + abi: communityStakesAbi, + nickname: 'CommunityStakes', + abi_hash: hashAbi(communityStakesAbi), + }); + await models.EvmEventSource.bulkCreate([ + { + chain_node_id: chainNode.id!, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].factory.toLowerCase(), + event_signature: namespaceDeployedSignature, + kind: 'DeployedNamespace', + abi_id: namespaceAbiInstance.id!, + }, + { + chain_node_id: chainNode.id!, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].communityStake.toLowerCase(), + event_signature: communityStakeTradeSignature, + kind: 'Trade', + abi_id: stakesAbiInstance.id!, + }, + ]); + }); + + test( + 'should insert events into the outbox', + { timeout: 80_000 }, + async () => { + expect(await models.Outbox.count()).to.equal(0); + let lastProcessedBlockNumber = + await models.LastProcessedEvmBlock.findOne({ + where: { + chain_node_id: chainNode.id!, + }, + }); + expect(lastProcessedBlockNumber).toBeFalsy(); + + const intervalId = await startEvmPolling(10_000); + clearInterval(intervalId); + + await delay(5000); + + lastProcessedBlockNumber = await models.LastProcessedEvmBlock.findOne({ + where: { + chain_node_id: chainNode.id!, + }, + }); + // should stop before the current block to minimize chain re-org impact + expect(lastProcessedBlockNumber?.block_number).to.be.greaterThanOrEqual( + communityStakeSellBlock - 1, + ); + + const events = (await models.Outbox.findAll()) as unknown as Array<{ + event_name: EventNames.ChainEventCreated; + event_payload: z.infer; + }>; + expect(events.length).to.equal(3); + for (const { event_name } of events) { + expect(event_name).to.equal(EventNames.ChainEventCreated); + } + + expect(events[0].event_payload.eventSource).to.deep.equal({ + kind: 'DeployedNamespace', + chainNodeId: chainNode.id!, + eventSignature: namespaceDeployedSignature, + }); + expect(events[1].event_payload.eventSource).to.deep.equal({ + kind: 'Trade', + chainNodeId: chainNode.id!, + eventSignature: communityStakeTradeSignature, + }); + expect(events[2].event_payload.eventSource).to.deep.equal({ + kind: 'Trade', + chainNodeId: chainNode.id!, + eventSignature: communityStakeTradeSignature, + }); + }, + ); + }); }); From 9c802efc0892bc0147e5d30658090d0110c99d8d Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Fri, 4 Oct 2024 10:59:32 -0700 Subject: [PATCH 050/425] track webhooks + handle multiple frames per webhook --- libs/model/src/models/contest_manager.ts | 1 + .../src/policies/FarcasterWorker.policy.ts | 75 +++++++++++++------ .../src/utils/buildFarcasterWebhookName.ts | 7 +- libs/schemas/src/commands/contest.schemas.ts | 9 --- libs/schemas/src/entities/topic.schemas.ts | 1 + ...04161223-add-contest-manager-webhook-id.js | 14 ++++ 6 files changed, 71 insertions(+), 36 deletions(-) create mode 100644 packages/commonwealth/server/migrations/20241004161223-add-contest-manager-webhook-id.js diff --git a/libs/model/src/models/contest_manager.ts b/libs/model/src/models/contest_manager.ts index 910372d8e96..5cdde76e9da 100644 --- a/libs/model/src/models/contest_manager.ts +++ b/libs/model/src/models/contest_manager.ts @@ -45,6 +45,7 @@ export default ( type: Sequelize.ARRAY(Sequelize.STRING), allowNull: true, }, + neynar_webhook_id: { type: Sequelize.STRING, allowNull: true }, }, { tableName: 'ContestManagers', diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts index 5f84c7b5530..477dcf90f29 100644 --- a/libs/model/src/policies/FarcasterWorker.policy.ts +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -1,4 +1,4 @@ -import { events, Policy } from '@hicommonwealth/core'; +import { events, logger, Policy } from '@hicommonwealth/core'; import { NeynarAPIClient } from '@neynar/nodejs-sdk'; import { Op } from 'sequelize'; import { config, models } from '..'; @@ -6,6 +6,8 @@ import { mustExist } from '../middleware/guards'; import { buildFarcasterWebhookName } from '../utils/buildFarcasterWebhookName'; import { createOnchainContestContent } from './utils'; +const log = logger(import.meta); + const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); const inputs = { @@ -20,11 +22,12 @@ export function FarcasterWorker(): Policy { body: { FarcasterCastCreated: async ({ payload }) => { const frame_url = new URL(payload.embeds[0].url).pathname; - console.log('FRAME URL: ', frame_url); const contestManager = await models.ContestManager.findOne({ where: { - cancelled: false, + cancelled: { + [Op.not]: true, + }, ended: { [Op.not]: true, }, @@ -33,37 +36,65 @@ export function FarcasterWorker(): Policy { }); mustExist('Contest Manager', contestManager); - // append frame hash to Contest Manager - // NOTE: this will never execute concurrently - contestManager.farcaster_frame_hashes = - contestManager.farcaster_frame_hashes || []; - if (!contestManager.farcaster_frame_hashes.includes(payload.hash)) { - contestManager.farcaster_frame_hashes.push(payload.hash); + if (contestManager.farcaster_frame_hashes?.includes(payload.hash)) { + log.warn( + `farcaster frame hash already added to contest manager: ${payload.hash}`, + ); + return; } - await contestManager.save(); - // create webhook to listen for replies on this cast + // create/update webhook to listen for replies on this cast const webhookName = buildFarcasterWebhookName( contestManager.contest_address, - payload.hash, ); - await client.publishWebhook( - webhookName, - config.CONTESTS.NEYNAR_REPLY_WEBHOOK_URL!, - { - subscription: { - 'cast.created': { - parent_hashes: [payload.hash], + + // if webhook exists, update target hashes, otherwise create new webhook + if (contestManager.neynar_webhook_id) { + await client.updateWebhook( + contestManager.neynar_webhook_id, + webhookName, + config.CONTESTS.NEYNAR_REPLY_WEBHOOK_URL!, + { + subscription: { + 'cast.created': { + parent_hashes: [ + ...(contestManager.farcaster_frame_hashes || []), + payload.hash, + ], + }, }, }, - }, - ); + ); + } else { + const neynarWebhook = await client.publishWebhook( + webhookName, + config.CONTESTS.NEYNAR_REPLY_WEBHOOK_URL!, + { + subscription: { + 'cast.created': { + parent_hashes: [payload.hash], + }, + }, + }, + ); + contestManager.neynar_webhook_id = neynarWebhook.webhook!.webhook_id; + } + + // append frame hash to Contest Manager + contestManager.farcaster_frame_hashes = [ + ...(contestManager.farcaster_frame_hashes || []), + payload.hash, + ]; + + await contestManager.save(); }, FarcasterReplyCastCreated: async ({ payload }) => { // find associated contest manager by parent cast hash const contestManager = await models.ContestManager.findOne({ where: { - cancelled: false, + cancelled: { + [Op.not]: true, + }, ended: { [Op.not]: true, }, diff --git a/libs/model/src/utils/buildFarcasterWebhookName.ts b/libs/model/src/utils/buildFarcasterWebhookName.ts index 8ecfc03ec9a..186f9c58de8 100644 --- a/libs/model/src/utils/buildFarcasterWebhookName.ts +++ b/libs/model/src/utils/buildFarcasterWebhookName.ts @@ -1,6 +1,3 @@ -export function buildFarcasterWebhookName( - contestAddress: string, - castHash: string, -) { - return `farcaster-contest-webhook-${contestAddress}-${castHash}`; +export function buildFarcasterWebhookName(contestAddress: string) { + return `farcaster-contest-webhook-${contestAddress}`; } diff --git a/libs/schemas/src/commands/contest.schemas.ts b/libs/schemas/src/commands/contest.schemas.ts index a1b6943e2d8..f5652bc6246 100644 --- a/libs/schemas/src/commands/contest.schemas.ts +++ b/libs/schemas/src/commands/contest.schemas.ts @@ -112,15 +112,6 @@ export const FarcasterCast = z.object({ embeds: z.array( z.object({ url: z.string().url(), - metadata: z.object({ - content_type: z.string(), - content_length: z.string(), - _status: z.string(), - image: z.object({ - width_px: z.number(), - height_px: z.number(), - }), - }), }), ), reactions: z.object({ diff --git a/libs/schemas/src/entities/topic.schemas.ts b/libs/schemas/src/entities/topic.schemas.ts index a5e230c68be..bdda5481634 100644 --- a/libs/schemas/src/entities/topic.schemas.ts +++ b/libs/schemas/src/entities/topic.schemas.ts @@ -107,5 +107,6 @@ export const ContestManager = z contests: z.array(Contest).nullish(), farcaster_frame_url: z.string().nullish(), farcaster_frame_hashes: z.array(z.string()).nullish(), + neynar_webhook_id: z.string().nullish(), }) .describe('On-Chain Contest Manager'); diff --git a/packages/commonwealth/server/migrations/20241004161223-add-contest-manager-webhook-id.js b/packages/commonwealth/server/migrations/20241004161223-add-contest-manager-webhook-id.js new file mode 100644 index 00000000000..9bf8361068c --- /dev/null +++ b/packages/commonwealth/server/migrations/20241004161223-add-contest-manager-webhook-id.js @@ -0,0 +1,14 @@ +'use strict'; + +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.addColumn('ContestManagers', 'neynar_webhook_id', { + type: Sequelize.STRING, + allowNull: true, + }); + }, + + down: async (queryInterface, Sequelize) => { + await queryInterface.removeColumn('ContestManagers', 'neynar_webhook_id'); + }, +}; From 9ecd5fcc920ea983123b089ba009574b6202537f Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 7 Oct 2024 16:23:00 +0500 Subject: [PATCH 051/425] Added logic to get thread content from url if present --- .../client/scripts/models/Thread.ts | 4 +++ .../state/api/general/getContentByUrl.ts | 33 +++++++++++++++++++ .../discussions/ThreadCard/ThreadCard.tsx | 24 +++++++++++--- .../get_bulk_threads.ts | 2 +- 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 packages/commonwealth/client/scripts/state/api/general/getContentByUrl.ts diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index 74a1837c5e5..fab6bf0c603 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -269,6 +269,7 @@ export class Thread implements IUniqueId { public links: Link[]; public readonly discord_meta: any; public readonly latestActivity: Moment; + public contentUrl: string | null; public readonly profile: UserProfile; @@ -323,6 +324,7 @@ export class Thread implements IUniqueId { associatedContests, recentComments, ContestActions, + content_url, }: { marked_as_spam_at: string; title: string; @@ -370,6 +372,7 @@ export class Thread implements IUniqueId { associatedContests?: AssociatedContest[]; recentComments: RecentComment[]; ContestActions: ContestActionT[]; + content_url: string | null; }) { this.author = Address?.address; this.title = getDecodedString(title); @@ -434,6 +437,7 @@ export class Thread implements IUniqueId { associatedContests, ContestActions, ); + this.contentUrl = content_url; this.recentComments = (recentComments || []).map( (rc) => new Comment({ diff --git a/packages/commonwealth/client/scripts/state/api/general/getContentByUrl.ts b/packages/commonwealth/client/scripts/state/api/general/getContentByUrl.ts new file mode 100644 index 00000000000..4c4b0a80b5b --- /dev/null +++ b/packages/commonwealth/client/scripts/state/api/general/getContentByUrl.ts @@ -0,0 +1,33 @@ +import { useQuery } from '@tanstack/react-query'; +import axios from 'axios'; + +const CONTENT_STALE_TIME = 5000; // 5 seconds + +interface GetContentByUrlProps { + contentUrl: string; +} + +const getContentByUrl = async ({ + contentUrl, +}: GetContentByUrlProps): Promise => { + const response = await axios.get(contentUrl || ''); + return response?.data[0]?.result?.data || ''; +}; + +type GetContentByUrlQueryProps = { + enabled?: boolean; +} & GetContentByUrlProps; + +const useGetContentByUrlQuery = ({ + contentUrl, + enabled = true, +}: GetContentByUrlQueryProps) => { + return useQuery({ + queryKey: [contentUrl], + queryFn: () => getContentByUrl({ contentUrl }), + staleTime: CONTENT_STALE_TIME, + enabled, + }); +}; + +export default useGetContentByUrlQuery; diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx index f69e6b193f5..0dce4caa085 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx @@ -10,6 +10,7 @@ import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { useGetCommunityByIdQuery } from 'state/api/communities'; +import useGetContentByUrlQuery from 'state/api/general/getContentByUrl'; import useUserStore from 'state/ui/user'; import { ThreadContestTagContainer } from 'views/components/ThreadContestTag'; import { ViewThreadUpvotesDrawer } from 'views/components/UpvoteDrawer'; @@ -97,12 +98,25 @@ export const ThreadCard = ({ enabled: !!thread.communityId && !showSkeleton, }); - if (showSkeleton || isLoadingCommunity || !community) { + const { data: contentUrlBody, isLoading: isLoadingContentBody } = + useGetContentByUrlQuery({ + contentUrl: thread.contentUrl || '', + enabled: !!thread.contentUrl, + }); + + if ( + showSkeleton || + isLoadingCommunity || + !community || + isLoadingContentBody + ) { return ( ); } + const threadBodyToDisplay = contentUrlBody || thread.plaintext; + const hasAdminPermissions = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(community) || @@ -119,14 +133,14 @@ export const ThreadCard = ({ const stageLabel = threadStageToLabel(thread.stage); // Future Ref: this fixes https://github.com/hicommonwealth/commonwealth/issues/8611 for iOS mobile - // where quill renders broken/cut-off/overlapping thread.plaintext in cases when there are multiple - //

tags in the quill delta for thread.plaintext or if thread.plaintext has \n characters which + // where quill renders broken/cut-off/overlapping threadBodyToDisplay in cases when there are multiple + //

tags in the quill delta for threadBodyToDisplay or if threadBodyToDisplay has \n characters which // iOS devices don't seem to render correctly. // Not updating it for desktop per a previous issue where markdown wasn't rendered correctly in // preview because of .slice()'d content. const bodyText = getBrowserInfo().isMobile - ? thread.plaintext.replaceAll(/\n/g, '').slice(0, 150) - : thread.plaintext; + ? threadBodyToDisplay.replaceAll(/\n/g, '').slice(0, 150) + : threadBodyToDisplay; return ( <> diff --git a/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts b/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts index 1c957bc8533..55d96142168 100644 --- a/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts +++ b/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts @@ -118,7 +118,7 @@ export async function __getBulkThreads( ${contestAddress ? contestStatus[status] || contestStatus.all : ''} ), top_threads AS ( - SELECT id, title, url, body, kind, stage, read_only, discord_meta, + SELECT id, title, url, body, kind, stage, read_only, discord_meta, content_url, pinned, community_id, T.created_at, updated_at, locked_at as thread_locked, links, has_poll, last_commented_on, plaintext, comment_count as "numberOfComments", marked_as_spam_at, archived_at, topic_id, reaction_weights_sum, canvas_signed_data, From 4b1cafb2914319ede0e19cd7727c16a5566e2f6a Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Mon, 7 Oct 2024 16:28:56 +0300 Subject: [PATCH 052/425] combine chain-event devnet tests --- ...cessing.spec.ts => evmChainEvents.spec.ts} | 3 +- .../evmChainEvents/startEvmPolling.spec.ts | 152 ------------------ .../test/devnet/evm/evmChainEvents/util.ts | 9 -- 3 files changed, 2 insertions(+), 162 deletions(-) rename packages/commonwealth/test/devnet/evm/evmChainEvents/{logProcessing.spec.ts => evmChainEvents.spec.ts} (99%) delete mode 100644 packages/commonwealth/test/devnet/evm/evmChainEvents/startEvmPolling.spec.ts diff --git a/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts b/packages/commonwealth/test/devnet/evm/evmChainEvents/evmChainEvents.spec.ts similarity index 99% rename from packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts rename to packages/commonwealth/test/devnet/evm/evmChainEvents/evmChainEvents.spec.ts index d14f3b5e5b2..bac03b5f77f 100644 --- a/packages/commonwealth/test/devnet/evm/evmChainEvents/logProcessing.spec.ts +++ b/packages/commonwealth/test/devnet/evm/evmChainEvents/evmChainEvents.spec.ts @@ -33,7 +33,8 @@ import { ContractSources, EvmSource, } from '../../../../server/workers/evmChainEvents/types'; -import { localRpc } from './util'; + +const localRpc = 'http://localhost:8545'; const namespaceDeployedLog = { address: '0xd8a357847caba76133d5f2cb51317d3c74609710', diff --git a/packages/commonwealth/test/devnet/evm/evmChainEvents/startEvmPolling.spec.ts b/packages/commonwealth/test/devnet/evm/evmChainEvents/startEvmPolling.spec.ts deleted file mode 100644 index f4d0fca196c..00000000000 --- a/packages/commonwealth/test/devnet/evm/evmChainEvents/startEvmPolling.spec.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { ChainEventCreated, EventNames, dispose } from '@hicommonwealth/core'; -import { - CommunityStake, - NamespaceFactory, - communityStakesAbi, - getAnvil, - namespaceFactoryAbi, -} from '@hicommonwealth/evm-testing'; -import { ChainNodeInstance, hashAbi, models } from '@hicommonwealth/model'; -import { BalanceType, commonProtocol, delay } from '@hicommonwealth/shared'; -import { Anvil } from '@viem/anvil'; -import { afterAll, beforeAll, describe, expect, test } from 'vitest'; -import { z } from 'zod'; -import { startEvmPolling } from '../../../../server/workers/evmChainEvents/startEvmPolling'; -import { localRpc } from './util'; - -const namespaceFactory = new NamespaceFactory(); -const namespaceName = `cetest${new Date().getTime()}`; -const communityStake = new CommunityStake(); -const namespaceDeployedSignature = - '0x8870ba2202802ce285ce6bead5ac915b6dc2d35c8a9d6f96fa56de9de12829d5'; -const communityStakeTradeSignature = - '0xfc13c9a8a9a619ac78b803aecb26abdd009182411d51a986090f82519d88a89e'; - -describe('EVM Chain Events End to End Tests', () => { - let anvil: Anvil | undefined; - let namespaceDeployedBlock: number; - let communityStakeBuyBlock: number; - let communityStakeSellBlock: number; - let chainNode: ChainNodeInstance; - - beforeAll(async () => { - chainNode = await models.ChainNode.create({ - url: localRpc, - balance_type: BalanceType.Ethereum, - name: 'Local Base Sepolia', - eth_chain_id: commonProtocol.ValidChains.SepoliaBase, - max_ce_block_range: -1, - }); - const namespaceAbiInstance = await models.ContractAbi.create({ - abi: namespaceFactoryAbi, - nickname: 'NamespaceFactory', - abi_hash: hashAbi(namespaceFactoryAbi), - }); - const stakesAbiInstance = await models.ContractAbi.create({ - abi: communityStakesAbi, - nickname: 'CommunityStakes', - abi_hash: hashAbi(communityStakesAbi), - }); - await models.EvmEventSource.bulkCreate([ - { - chain_node_id: chainNode.id!, - contract_address: - commonProtocol.factoryContracts[ - commonProtocol.ValidChains.SepoliaBase - ].factory.toLowerCase(), - event_signature: namespaceDeployedSignature, - kind: 'DeployedNamespace', - abi_id: namespaceAbiInstance.id!, - }, - { - chain_node_id: chainNode.id!, - contract_address: - commonProtocol.factoryContracts[ - commonProtocol.ValidChains.SepoliaBase - ].communityStake.toLowerCase(), - event_signature: communityStakeTradeSignature, - kind: 'Trade', - abi_id: stakesAbiInstance.id!, - }, - ]); - - anvil = await getAnvil(commonProtocol.ValidChains.SepoliaBase); - - let res = await namespaceFactory.deployNamespace(namespaceName); - namespaceDeployedBlock = res.block; - - // emits a buy stake event - await namespaceFactory.configureCommunityStakes(namespaceName, 2); - - res = await communityStake.buyStake(namespaceName, 2, 1); - communityStakeBuyBlock = res.block; - - res = await communityStake.sellStake(namespaceName, 2, 1); - communityStakeSellBlock = res.block; - - console.log( - `Events located in blocks: ${namespaceDeployedBlock}, ${namespaceDeployedBlock + 1}, ${communityStakeBuyBlock}, and ${communityStakeSellBlock}`, - ); - }); - - afterAll(async () => { - await anvil?.stop(); - await dispose()(); - }); - - test( - 'should insert events into the outbox', - { timeout: 80_000 }, - async () => { - expect(await models.Outbox.count()).to.equal(0); - let lastProcessedBlockNumber = await models.LastProcessedEvmBlock.findOne( - { - where: { - chain_node_id: chainNode.id!, - }, - }, - ); - expect(lastProcessedBlockNumber).toBeFalsy(); - - const intervalId = await startEvmPolling(10_000); - clearInterval(intervalId); - - await delay(5000); - - lastProcessedBlockNumber = await models.LastProcessedEvmBlock.findOne({ - where: { - chain_node_id: chainNode.id!, - }, - }); - // should stop before the current block to minimize chain re-org impact - expect(lastProcessedBlockNumber?.block_number).to.be.greaterThanOrEqual( - communityStakeSellBlock - 1, - ); - - const events = (await models.Outbox.findAll()) as unknown as Array<{ - event_name: EventNames.ChainEventCreated; - event_payload: z.infer; - }>; - expect(events.length).to.equal(3); - for (const { event_name } of events) { - expect(event_name).to.equal(EventNames.ChainEventCreated); - } - - expect(events[0].event_payload.eventSource).to.deep.equal({ - kind: 'DeployedNamespace', - chainNodeId: chainNode.id!, - eventSignature: namespaceDeployedSignature, - }); - expect(events[1].event_payload.eventSource).to.deep.equal({ - kind: 'Trade', - chainNodeId: chainNode.id!, - eventSignature: communityStakeTradeSignature, - }); - expect(events[2].event_payload.eventSource).to.deep.equal({ - kind: 'Trade', - chainNodeId: chainNode.id!, - eventSignature: communityStakeTradeSignature, - }); - }, - ); -}); diff --git a/packages/commonwealth/test/devnet/evm/evmChainEvents/util.ts b/packages/commonwealth/test/devnet/evm/evmChainEvents/util.ts index a70efbb1be6..6745f8b3d7e 100644 --- a/packages/commonwealth/test/devnet/evm/evmChainEvents/util.ts +++ b/packages/commonwealth/test/devnet/evm/evmChainEvents/util.ts @@ -1,13 +1,4 @@ -import { ChainTesting } from '@hicommonwealth/evm-testing'; - export const localRpc = 'http://localhost:8545'; -export const sdk = new ChainTesting(); - -// aave utils -export const aavePropCreatedSignature = - '0xd272d67d2c8c66de43c1d2515abb064978a5020c173e15903b6a2ab3bf7440ec'; -export const aavePropQueuedSignature = - '0x11a0b38e70585e4b09b794bd1d9f9b1a51a802eb8ee2101eeee178d0349e73fe'; export const compoundPropCreatedSignature = '0x7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0'; From 2beba4494d9dc778a6aa01064b8776d7ed799801 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Mon, 7 Oct 2024 08:42:32 -0700 Subject: [PATCH 053/425] cast upvote wip --- libs/core/src/integration/events.schemas.ts | 5 +- .../contest/FarcasterUpvoteAction.command.ts | 80 ++++++++----------- .../src/policies/FarcasterWorker.policy.ts | 37 ++++++++- libs/model/src/policies/utils.ts | 1 - .../src/utils/buildFarcasterContentUrl.ts | 3 + libs/schemas/src/commands/contest.schemas.ts | 38 ++++++++- libs/schemas/src/queries/contests.schemas.ts | 7 -- 7 files changed, 110 insertions(+), 61 deletions(-) create mode 100644 libs/model/src/utils/buildFarcasterContentUrl.ts diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index c70a21223b5..9c7205fd024 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -1,5 +1,6 @@ import { Comment, + FarcasterAction, FarcasterCast, PG_INT, Reaction, @@ -258,4 +259,6 @@ export const FarcasterReplyCastCreated = FarcasterCast.describe( 'When a reply is posted to a farcaster contest cast', ); -export const FarcasterVoteCreated = z.any(); +export const FarcasterVoteCreated = FarcasterAction.extend({ + contest_address: z.string(), +}).describe('When a farcaster action is initiated on a cast reply'); diff --git a/libs/model/src/contest/FarcasterUpvoteAction.command.ts b/libs/model/src/contest/FarcasterUpvoteAction.command.ts index f9d8215b124..f5cd9c3982a 100644 --- a/libs/model/src/contest/FarcasterUpvoteAction.command.ts +++ b/libs/model/src/contest/FarcasterUpvoteAction.command.ts @@ -1,8 +1,11 @@ -import { type Command } from '@hicommonwealth/core'; +import { EventNames, type Command } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; +import { models } from '../database'; +import { mustExist } from '../middleware/guards'; +import { emitEvent } from '../utils'; +import { buildFarcasterContentUrl } from '../utils/buildFarcasterContentUrl'; -// This webhook processes the cast action event: -// https://docs.farcaster.xyz/reference/actions/spec#actions-specification +// This webhook processes the cast action event export function FarcasterUpvoteAction(): Command< typeof schemas.FarcasterUpvoteAction > { @@ -10,52 +13,35 @@ export function FarcasterUpvoteAction(): Command< ...schemas.FarcasterUpvoteAction, auth: [], body: async ({ payload }) => { + // find content from cast hash + const content_url = buildFarcasterContentUrl( + payload.untrustedData.castId.hash, + ); + const addAction = await models.ContestAction.findOne({ + where: { + action: 'added', + content_url, + }, + }); + mustExist('Contest Action', addAction); + + await emitEvent( + models.Outbox, + [ + { + event_name: EventNames.FarcasterVoteCreated, + event_payload: { + ...payload, + contest_address: addAction.contest_address, + }, + }, + ], + null, + ); + return { - msg: 'HELLOEEZ!', + message: 'Vote Added', }; - // // map FC Action to CW ThreadUpvoted - // const contestManager = await models.ContestManager.findOne({ - // where: { - // farcaster_frame_hashes: payload.cast_id.hash, - // }, - // }); - // if (!contestManager) { - // throw new InvalidState( - // `contest manager not found for frame: ${payload.cast_id.hash}`, - // ); - // } - // // assuming farcaster contest only has 1 topic - // const contestTopic = await models.ContestTopic.findOne({ - // where: { - // contest_address: contestManager.contest_address, - // }, - // }); - // if (!contestTopic) { - // throw new InvalidState( - // `contest manager ${contestManager.contest_address} not associated with any topics`, - // ); - // } - // const address = (await models.Address.findOne({ - // where: { - // address: payload.address, - // community_id: contestManager.community_id, - // }, - // }))!; - // mustExist('Address', address); - // const { id: address_id } = address; - // await emitEvent(models.Outbox, [ - // { - // event_name: EventNames.ThreadUpvoted, - // event_payload: { - // address_id: address_id!, - // reaction: 'like', - // community_id: contestManager.community_id, - // thread_id: 0, - // topicId: contestTopic.topic_id, - // contestManagers: [contestManager.toJSON()], - // }, - // }, - // ]); }, }; } diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts index 477dcf90f29..7f5ef072b19 100644 --- a/libs/model/src/policies/FarcasterWorker.policy.ts +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -3,6 +3,7 @@ import { NeynarAPIClient } from '@neynar/nodejs-sdk'; import { Op } from 'sequelize'; import { config, models } from '..'; import { mustExist } from '../middleware/guards'; +import { buildFarcasterContentUrl } from '../utils/buildFarcasterContentUrl'; import { buildFarcasterWebhookName } from '../utils/buildFarcasterWebhookName'; import { createOnchainContestContent } from './utils'; @@ -22,6 +23,9 @@ export function FarcasterWorker(): Policy { body: { FarcasterCastCreated: async ({ payload }) => { const frame_url = new URL(payload.embeds[0].url).pathname; + const contest_address = frame_url + .split('/') + .find((str) => str.startsWith('0x')); const contestManager = await models.ContestManager.findOne({ where: { @@ -31,7 +35,7 @@ export function FarcasterWorker(): Policy { ended: { [Op.not]: true, }, - farcaster_frame_url: frame_url, + contest_address, }, }); mustExist('Contest Manager', contestManager); @@ -113,7 +117,35 @@ export function FarcasterWorker(): Policy { mustExist('Contest Topic', contestTopic); // create onchain content from reply cast - const content_url = `/farcaster/${payload.hash}`; + const content_url = buildFarcasterContentUrl(payload.hash); + await createOnchainContestContent({ + community_id: contestManager.community_id, + topic_id: contestTopic.topic_id, + author_address: payload.author.custody_address, + content_url, + }); + }, + FarcasterVoteCreated: async ({ payload }) => { + const contestManager = await models.ContestManager.findOne({ + where: { + cancelled: { + [Op.not]: true, + }, + ended: { + [Op.not]: true, + }, + contest_address: payload.contest_address, + }, + }); + mustExist('Contest Manager', contestManager); + + const contestTopic = await models.ContestTopic.findOne({ + where: { + contest_address: contestManager.contest_address, + }, + }); + mustExist('Contest Topic', contestTopic); + await createOnchainContestContent({ community_id: contestManager.community_id, topic_id: contestTopic.topic_id, @@ -121,7 +153,6 @@ export function FarcasterWorker(): Policy { content_url, }); }, - FarcasterVoteCreated: async ({ payload }) => {}, }, }; } diff --git a/libs/model/src/policies/utils.ts b/libs/model/src/policies/utils.ts index adc0c6f7e31..52046886dba 100644 --- a/libs/model/src/policies/utils.ts +++ b/libs/model/src/policies/utils.ts @@ -28,7 +28,6 @@ export async function createOnchainContestContent(payload: { const addressesToProcess = activeContestManagers .filter((c) => { - console.log('ACTIONS:', c.actions); // if a projection exists with the same content url, don't add it onchain again const duplicatePosts = c.actions.filter( (action) => diff --git a/libs/model/src/utils/buildFarcasterContentUrl.ts b/libs/model/src/utils/buildFarcasterContentUrl.ts new file mode 100644 index 00000000000..2180d64ec8f --- /dev/null +++ b/libs/model/src/utils/buildFarcasterContentUrl.ts @@ -0,0 +1,3 @@ +export function buildFarcasterContentUrl(castHash: string) { + return `/farcaster/${castHash}`; +} diff --git a/libs/schemas/src/commands/contest.schemas.ts b/libs/schemas/src/commands/contest.schemas.ts index f5652bc6246..f8f50f4a663 100644 --- a/libs/schemas/src/commands/contest.schemas.ts +++ b/libs/schemas/src/commands/contest.schemas.ts @@ -128,6 +128,24 @@ export const FarcasterCast = z.object({ event_timestamp: z.string(), }); +export const FarcasterAction = z.object({ + untrustedData: z.object({ + fid: z.number(), + url: z.string().url(), + messageHash: z.string(), + timestamp: z.number(), + network: z.number(), + buttonIndex: z.number(), + castId: z.object({ + fid: z.number(), + hash: z.string(), + }), + }), + trustedData: z.object({ + messageBytes: z.string(), + }), +}); + export const FarcasterCastCreatedWebhook = { input: z.object({ created_at: z.number(), @@ -140,8 +158,24 @@ export const FarcasterCastCreatedWebhook = { }; export const FarcasterUpvoteAction = { - input: z.any(), + input: z.object({ + untrustedData: z.object({ + fid: z.number(), + url: z.string().url(), + messageHash: z.string(), + timestamp: z.number(), + network: z.number(), + buttonIndex: z.number(), + castId: z.object({ + fid: z.number(), + hash: z.string(), + }), + }), + trustedData: z.object({ + messageBytes: z.string(), + }), + }), output: z.object({ - msg: z.string(), + message: z.string(), }), }; diff --git a/libs/schemas/src/queries/contests.schemas.ts b/libs/schemas/src/queries/contests.schemas.ts index 49713676b66..9cdc7ba4ad4 100644 --- a/libs/schemas/src/queries/contests.schemas.ts +++ b/libs/schemas/src/queries/contests.schemas.ts @@ -73,13 +73,6 @@ export const GetThreadContestManagers = { ), }; -export const FarcasterAction = { - input: z.object({ - contest_address: z.string(), - }), - output: z.void(), -}; - export const GetFarcasterUpvoteActionMetadata = { input: z.any(), output: z.object({ From 060799a6440a9cdb5352779118086e819f459858 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Mon, 7 Oct 2024 10:46:32 -0700 Subject: [PATCH 054/425] deps --- pnpm-lock.yaml | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98628ad2c4b..de4d9f22cbb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9709,6 +9709,9 @@ packages: extensionless@1.9.6: resolution: {integrity: sha512-40F6zThJu1MxaT1A1pJ/2SHlU1BPYYnQNHt0j2ZlPuxxm2ddMcNc1D7uS/LGc4K3VwMEMaZLkCdHWaKk0LnQXA==} + extensionless@1.9.9: + resolution: {integrity: sha512-fz0cWfLA4pgc2nwmg6lc2UH+g+NlFuD63VWqp8n1wGAZSSbPNoARkA54BxXRjYCYW9LvhBnA3NyJaGS2KudkWw==} + external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -16235,8 +16238,8 @@ snapshots: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0 - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-bucket-endpoint': 3.577.0 @@ -16293,11 +16296,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.577.0': + '@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -16336,6 +16339,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: + - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.577.0': @@ -16381,11 +16385,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': + '@aws-sdk/client-sts@3.577.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -16424,7 +16428,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.576.0': @@ -16458,7 +16461,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-process': 3.577.0 '@aws-sdk/credential-provider-sso': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) @@ -16515,7 +16518,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/types': 3.0.0 @@ -16653,7 +16656,7 @@ snapshots: '@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/shared-ini-file-loader': 3.0.0 @@ -28825,6 +28828,8 @@ snapshots: extensionless@1.9.6: {} + extensionless@1.9.9: {} + external-editor@3.1.0: dependencies: chardet: 0.7.0 From 7a5cc7b691962b51c4dc294c5be552391ee7b443 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Mon, 7 Oct 2024 16:50:57 -0700 Subject: [PATCH 055/425] -testing code for the popover but not going to merge yet. --- .../MarkdownEditor/MarkdownEditor.tsx | 2 + .../MarkdownEditor/toolbars/Select.tsx | 98 +++++++++++++++++++ .../toolbars/ToolbarForMobile.scss | 11 +++ .../toolbars/ToolbarForMobile.tsx | 62 +++++++++++- .../MarkdownEditorPage/MarkdownEditorPage.tsx | 2 +- 5 files changed, 171 insertions(+), 4 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/Select.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx index 37db083b732..ddee69a639d 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx @@ -284,6 +284,8 @@ export const MarkdownEditor = memo(function MarkdownEditor( const doFocus = useCallback(() => { if (mdxEditorRef.current) { mdxEditorRef.current.focus(); + } else { + console.warn('No markdown editor ref'); } }, []); diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/Select.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/Select.tsx new file mode 100644 index 00000000000..5780b99a5ef --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/Select.tsx @@ -0,0 +1,98 @@ +import React, { useEffect, useRef, useState } from 'react'; + +type Option = { + value: string; + label: string; +}; + +type SelectProps = { + options: Option[]; + onChange: (value: string) => void; + placeholder?: string; +}; + +const Select: React.FC = ({ options, onChange, placeholder }) => { + const [isOpen, setIsOpen] = useState(false); + const [selectedOption, setSelectedOption] = useState

+
setIsOpen(!isOpen)} + style={{ + padding: '10px', + border: '1px solid #ccc', + cursor: 'pointer', + backgroundColor: '#fff', + width: '200px', + }} + > + {selectedOption + ? selectedOption.label + : placeholder || 'Select an option'} +
+ {isOpen && ( +
    + {options.map((option) => ( +
  • handleSelect(option)} + style={{ + padding: '10px', + cursor: 'pointer', + backgroundColor: + selectedOption?.value === option.value ? '#f0f0f0' : '#fff', + }} + > + {option.label} +
  • + ))} +
+ )} +
+ ); +}; + +export default Select; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.scss index d872be549af..42e3ec28229 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.scss @@ -4,6 +4,17 @@ display: flex; flex-grow: 1; + * { + margin-top: auto; + margin-bottom: auto; + } + + select { + outline: none; + border: none; + color: #c6c6c6; + } + .end { justify-content: flex-end; flex-grow: 1; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index 99268e16150..467e2791c51 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -8,6 +8,9 @@ import { import React, { ReactNode, useCallback, useEffect } from 'react'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; +import CWPopover, { + usePopover, +} from 'views/components/component_kit/new_designs/CWPopover'; import './ToolbarForMobile.scss'; type ToolbarForMobileProps = Readonly<{ @@ -25,6 +28,8 @@ type ToolbarForMobileProps = Readonly<{ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { const { SubmitButton, focus, onImage } = props; + const headingsPopoverProps = usePopover(); + const adjustForKeyboard = useCallback(() => { if (!window.visualViewport) { return; @@ -54,20 +59,71 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { (event: React.MouseEvent) => { event.stopPropagation(); - focus?.(); + console.log('FIXME 101: preventKeyboardDeactivation'); + + if (focus) { + console.log('FIXME: calling focus'); + focus?.(); + } else { + console.warn('No focus'); + } }, [focus], ); + // + // const handleKeyboardFocusForBody = useCallback(() => { + // console.log('FIXME102: handleKeyboardFocusForBody'); + // + // setTimeout(() => { + // console.log('FIXME103: handleKeyboardFocusForBody'); + // }, 0); + // + // }, []); + // + // useEffect(() => { + // window.addEventListener('mousedown', handleKeyboardFocusForBody, {capture: true}); + // + // return () => { + // window.removeEventListener('mousedown', handleKeyboardFocusForBody, {capture: true}); + // }; + // }, [handleKeyboardFocusForBody]); return (
-
+ {/**/} + +
console.log('click')} + >
+ + + + + +
+ } + {...headingsPopoverProps} + /> + {/**/} diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx index c30846ce864..127b90fee79 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx @@ -8,9 +8,9 @@ import { import './MarkdownEditorPage.scss'; +import { MarkdownSubmitButton } from 'views/components/MarkdownEditor/MarkdownSubmitButton'; import overview from 'views/components/MarkdownEditor/markdown/editor_overview.md?raw'; import supported from 'views/components/MarkdownEditor/markdown/supported.md?raw'; -import { MarkdownSubmitButton } from 'views/components/MarkdownEditor/MarkdownSubmitButton'; import { useMarkdownEditorMethods } from 'views/components/MarkdownEditor/useMarkdownEditorMethods'; function useParams() { From aeaaa9aa1c4ce0d11b915e5fb9ca5a3dfc1c977f Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Tue, 8 Oct 2024 04:49:12 -0700 Subject: [PATCH 056/425] get farcaster ETH address from fid --- .../src/policies/FarcasterWorker.policy.ts | 16 ++++- .../server/api/integration-router.ts | 59 ++++++++----------- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts index 7f5ef072b19..69b528ddf62 100644 --- a/libs/model/src/policies/FarcasterWorker.policy.ts +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -5,7 +5,7 @@ import { config, models } from '..'; import { mustExist } from '../middleware/guards'; import { buildFarcasterContentUrl } from '../utils/buildFarcasterContentUrl'; import { buildFarcasterWebhookName } from '../utils/buildFarcasterWebhookName'; -import { createOnchainContestContent } from './utils'; +import { createOnchainContestContent, createOnchainContestVote } from './utils'; const log = logger(import.meta); @@ -146,10 +146,20 @@ export function FarcasterWorker(): Policy { }); mustExist('Contest Topic', contestTopic); - await createOnchainContestContent({ + const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); + + const { users } = await client.fetchBulkUsers([ + payload.untrustedData.fid, + ]); + mustExist('Farcaster User', users[0]); + + const content_url = buildFarcasterContentUrl( + payload.untrustedData.castId.hash, + ); + await createOnchainContestVote({ community_id: contestManager.community_id, topic_id: contestTopic.topic_id, - author_address: payload.author.custody_address, + author_address: users[0].custody_address, content_url, }); }, diff --git a/packages/commonwealth/server/api/integration-router.ts b/packages/commonwealth/server/api/integration-router.ts index af10125bee5..4dade1c8c9f 100644 --- a/packages/commonwealth/server/api/integration-router.ts +++ b/packages/commonwealth/server/api/integration-router.ts @@ -4,6 +4,7 @@ import { Comment, Contest, Thread, + config, models, } from '@hicommonwealth/model'; import { RequestHandler, Router, raw } from 'express'; @@ -73,39 +74,31 @@ function build(validator: DatabaseValidationService) { express.command(ChainEvents.ChainEventCreated()), ); - // Farcaster frames - router.use('/farcaster/contests', farcasterRouter); - - // Farcaster webhooks - router.post( - '/farcaster/CastCreated', - express.command(Contest.FarcasterCastCreatedWebhook()), - ); - - router.post( - '/farcaster/ReplyCastCreated', - express.command(Contest.FarcasterReplyCastCreatedWebhook()), - ); - - router.get( - '/farcaster/CastUpvoteAction', - (req, res, next) => { - console.log(`GET CastUpvoteAction: ${JSON.stringify(req.body, null, 2)}`); - next(); - }, - express.query(Contest.GetFarcasterUpvoteActionMetadata()), - ); - - router.post( - '/farcaster/CastUpvoteAction', - (req, res, next) => { - console.log( - `POST CastUpvoteAction: ${JSON.stringify(req.body, null, 2)}`, - ); - next(); - }, - express.command(Contest.FarcasterUpvoteAction()), - ); + if (config.CONTESTS.FLAG_FARCASTER_CONTEST) { + // Farcaster frames + router.use('/farcaster/contests', farcasterRouter); + + // Farcaster webhooks/actions + router.post( + '/farcaster/CastCreated', + express.command(Contest.FarcasterCastCreatedWebhook()), + ); + + router.post( + '/farcaster/ReplyCastCreated', + express.command(Contest.FarcasterReplyCastCreatedWebhook()), + ); + + router.get( + '/farcaster/CastUpvoteAction', + express.query(Contest.GetFarcasterUpvoteActionMetadata()), + ); + + router.post( + '/farcaster/CastUpvoteAction', + express.command(Contest.FarcasterUpvoteAction()), + ); + } // Discord BOT integration router.post( From 624047b33535c4889825656b400416ccef4514f2 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 8 Oct 2024 17:10:40 +0500 Subject: [PATCH 057/425] Updated thread versions histories to use content_url --- .../client/scripts/models/Thread.ts | 3 + .../CWContentPage/CWContentPage.tsx | 6 +- .../AuthorAndPublishInfo.tsx | 12 ++- .../discussions/ThreadCard/ThreadCard.tsx | 2 +- .../pages/view_thread/ViewThreadPage.tsx | 82 ++++++++++++++++--- 5 files changed, 84 insertions(+), 21 deletions(-) diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index fab6bf0c603..741ef9cab60 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -154,6 +154,7 @@ export interface ThreadVersionHistory { address: string; body: string; timestamp: string; + content_url: string; } export interface IThreadCollaborator { @@ -204,6 +205,7 @@ type RecentComment = { profile_name?: string; profile_avatar_url?: string; user_id: string; + content_url?: string | null; }; export enum LinkSource { @@ -471,6 +473,7 @@ export class Thread implements IUniqueId { reaction_weights_sum: 0, canvas_signed_data: null, canvas_msg_id: null, + content_url: rc.content_url || null, }), ); this.latestActivity = last_commented_on diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx index ea04b676a9e..403fad434e3 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx @@ -78,7 +78,7 @@ type ContentPageProps = { showSkeleton?: boolean; isEditing?: boolean; sidebarComponentsSkeletonCount?: number; - setThreadBody?: (body: string) => void; + onChangeVersionHistoryNumber?: (id: number) => void; editingDisabled?: boolean; }; @@ -116,7 +116,7 @@ export const CWContentPage = ({ showSkeleton, isEditing = false, sidebarComponentsSkeletonCount = 2, - setThreadBody, + onChangeVersionHistoryNumber, editingDisabled, }: ContentPageProps) => { const navigate = useNavigate(); @@ -211,7 +211,7 @@ export const CWContentPage = ({ isHot={isHot(thread)} profile={thread?.profile} versionHistory={thread?.versionHistory} - changeContentText={setThreadBody} + onChangeVersionHistoryNumber={onChangeVersionHistoryNumber} />
); diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx index 612ea2df977..d8288ffcba1 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx @@ -55,7 +55,7 @@ export type AuthorAndPublishInfoProps = { popoverPlacement?: PopperPlacementType; profile?: UserProfile; versionHistory?: ThreadVersionHistory[] | CommentVersionHistory[]; - changeContentText?: (text: string) => void; + onChangeVersionHistoryNumber?: (id: number) => void; }; export const AuthorAndPublishInfo = ({ @@ -81,7 +81,7 @@ export const AuthorAndPublishInfo = ({ popoverPlacement, profile, versionHistory, - changeContentText, + onChangeVersionHistoryNumber, }: AuthorAndPublishInfoProps) => { const popoverProps = usePopover(); const containerRef = useRef(null); @@ -100,7 +100,7 @@ export const AuthorAndPublishInfo = ({ const fromDiscordBot = discord_meta !== null && discord_meta !== undefined; const versionHistoryOptions = versionHistory?.map((v) => ({ - value: v.body || v.text, + value: v.id as number, label: formatVersionText( moment(v.timestamp), v.address, @@ -219,10 +219,8 @@ export const AuthorAndPublishInfo = ({ ?.utc?.() ?.local?.() ?.format('DD/MM/YYYY')}`} - // @ts-expect-error - onChange={({ value }) => { - // @ts-expect-error - changeContentText(value); + onChange={({ value }: { value: number; label: string }) => { + onChangeVersionHistoryNumber?.(value); }} formatOptionLabel={(option) => { return option.label.split('\n')[0]; diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx index 0dce4caa085..3c19d3089f5 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx @@ -108,7 +108,7 @@ export const ThreadCard = ({ showSkeleton || isLoadingCommunity || !community || - isLoadingContentBody + (isLoadingContentBody && !!thread.contentUrl) ) { return ( diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index ebf4ca24e7c..42f7a43b2cb 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -6,6 +6,7 @@ import { filterLinks, getThreadActionTooltipText } from 'helpers/threads'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; import useBrowserWindow from 'hooks/useBrowserWindow'; import useJoinCommunityBanner from 'hooks/useJoinCommunityBanner'; +import useRunOnceOnCondition from 'hooks/useRunOnceOnCondition'; import moment from 'moment'; import { useCommonNavigate } from 'navigation/helpers'; import 'pages/view_thread/index.scss'; @@ -13,6 +14,7 @@ import React, { useEffect, useState } from 'react'; import { Helmet } from 'react-helmet-async'; import app from 'state'; import { useFetchCommentsQuery } from 'state/api/comments'; +import useGetContentByUrlQuery from 'state/api/general/getContentByUrl'; import useGetViewCountByObjectIdQuery from 'state/api/general/getViewCountByObjectId'; import { useFetchGroupsQuery, @@ -120,8 +122,50 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { }); const thread = data?.[0]; + + const [contentUrlBodyToFetch, setContentUrlBodyToFetch] = useState< + string | null + >(null); + + useRunOnceOnCondition({ + callback: () => { + thread?.contentUrl && setContentUrlBodyToFetch(thread?.contentUrl); + }, + shouldRun: !!thread?.contentUrl, + }); + + const { data: contentUrlBody, isLoading: isLoadingContentBody } = + useGetContentByUrlQuery({ + contentUrl: contentUrlBodyToFetch || '', + enabled: !!contentUrlBodyToFetch, + }); + const [threadBody, setThreadBody] = useState(thread?.body); + useEffect(() => { + if ( + contentUrlBodyToFetch && + contentUrlBodyToFetch !== thread?.contentUrl && + contentUrlBody + ) { + setThreadBody(contentUrlBody); + } + }, [contentUrlBody, contentUrlBodyToFetch, thread?.contentUrl]); + + useRunOnceOnCondition({ + callback: () => { + thread?.body && setThreadBody(thread?.body); + }, + shouldRun: !!thread?.body, + }); + + useRunOnceOnCondition({ + callback: () => { + contentUrlBody && setThreadBody(contentUrlBody); + }, + shouldRun: !isLoadingContentBody && !!thread?.contentUrl, + }); + const isAdmin = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(); const { contestsData } = useCommunityContests(); @@ -219,7 +263,11 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { return ; } - if (!app.chain?.meta || isLoading) { + if ( + !app.chain?.meta || + isLoading || + (isLoadingContentBody && thread?.contentUrl) + ) { return ( { const canComment = !!user.activeAccount && !isRestrictedMembership; + const handleVersionHistoryChange = (versionId: number) => { + const foundVersion = (thread?.versionHistory || []).find( + (version) => version.id === versionId, + ); + + if (!foundVersion?.content_url) { + setThreadBody(foundVersion?.body || ''); + return; + } + + if (contentUrlBodyToFetch === foundVersion.content_url && contentUrlBody) { + setThreadBody(contentUrlBody); + return; + } + + setContentUrlBodyToFetch(foundVersion.content_url); + }; + const handleNewSnapshotChange = async ({ id, snapshot_title, @@ -369,9 +435,9 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { : thread?.title; const ogDescription = // @ts-expect-error - getMetaDescription(thread?.body || '')?.length > 155 - ? `${getMetaDescription(thread?.body || '')?.slice?.(0, 152)}...` - : getMetaDescription(thread?.body || ''); + getMetaDescription(threadBody || '')?.length > 155 + ? `${getMetaDescription(threadBody || '')?.slice?.(0, 152)}...` + : getMetaDescription(threadBody || ''); const ogImageUrl = app?.chain?.meta?.icon_url || ''; return ( @@ -539,7 +605,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { setIsEditingBody(false); }} hasPendingEdits={!!editsToSave} - setThreadBody={setThreadBody} + onChangeVersionHistoryNumber={handleVersionHistoryChange} body={(threadOptionsComp) => (
{isEditingBody ? ( @@ -564,11 +630,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { ) : ( <> - - doc={threadBody ?? thread?.body} - cutoffLines={50} - /> + {/* @ts-expect-error StrictNullChecks*/} {thread.readOnly || fromDiscordBot ? ( <> From 4efbde73b0b23537ed37e1a12556ba12bf3032e0 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 8 Oct 2024 17:11:16 +0500 Subject: [PATCH 058/425] Updated comment version histories to use content url --- libs/model/src/globalActivityCache.ts | 3 +- .../client/scripts/models/Comment.ts | 6 ++ .../discussions/CommentCard/CommentCard.tsx | 75 +++++++++++++++++-- .../get_active_threads.ts | 1 + .../get_bulk_threads.ts | 3 +- 5 files changed, 79 insertions(+), 9 deletions(-) diff --git a/libs/model/src/globalActivityCache.ts b/libs/model/src/globalActivityCache.ts index 90199d3f127..5356aa261d1 100644 --- a/libs/model/src/globalActivityCache.ts +++ b/libs/model/src/globalActivityCache.ts @@ -71,7 +71,8 @@ export async function getActivityFeed(models: DB, id = 0) { 'discord_meta', C.discord_meta, 'profile_name', U.profile->>'name', 'profile_avatar_url', U.profile->>'avatar_url', - 'user_id', U.id + 'user_id', U.id, + 'content_url', C.content_url ))) as "recentComments" FROM ( Select tempC.* diff --git a/packages/commonwealth/client/scripts/models/Comment.ts b/packages/commonwealth/client/scripts/models/Comment.ts index ff056f26717..a3471afdeca 100644 --- a/packages/commonwealth/client/scripts/models/Comment.ts +++ b/packages/commonwealth/client/scripts/models/Comment.ts @@ -11,7 +11,9 @@ export interface CommentVersionHistory { thread_id: number; address: string; body: string; + text?: string; timestamp: Moment; + content_url: string; } // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -41,6 +43,8 @@ export class Comment { public readonly profile: UserProfile; + public contentUrl: string | null; + constructor({ id, text, @@ -61,6 +65,7 @@ export class Comment { CommentVersionHistories, marked_as_spam_at, discord_meta, + content_url, }) { const versionHistory = CommentVersionHistories; this.communityId = community_id; @@ -88,6 +93,7 @@ export class Comment { this.reactionWeightsSum = reaction_weights_sum; this.rootThread = thread_id; this.discord_meta = discord_meta; + this.contentUrl = content_url; this.profile = addressToUserProfile(Address); } diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/CommentCard/CommentCard.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/CommentCard/CommentCard.tsx index 75895e36bc8..6a5acff4208 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/CommentCard/CommentCard.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/CommentCard/CommentCard.tsx @@ -7,16 +7,18 @@ import { deserializeCanvas, verify, } from '@hicommonwealth/shared'; -import { GetThreadActionTooltipTextResponse } from 'client/scripts/helpers/threads'; -import { SharePopover } from 'client/scripts/views/components/SharePopover'; -import { - ViewCommentUpvotesDrawer, - ViewUpvotesDrawerTrigger, -} from 'client/scripts/views/components/UpvoteDrawer'; import clsx from 'clsx'; +import { GetThreadActionTooltipTextResponse } from 'helpers/threads'; +import useRunOnceOnCondition from 'hooks/useRunOnceOnCondition'; import type Comment from 'models/Comment'; +import useGetContentByUrlQuery from 'state/api/general/getContentByUrl'; import useUserStore from 'state/ui/user'; import { CommentReactionButton } from 'views/components/ReactionButton/CommentReactionButton'; +import { SharePopover } from 'views/components/SharePopover'; +import { + ViewCommentUpvotesDrawer, + ViewUpvotesDrawerTrigger, +} from 'views/components/UpvoteDrawer'; import { PopoverMenu } from 'views/components/component_kit/CWPopoverMenu'; import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; import { CWText } from 'views/components/component_kit/cw_text'; @@ -116,6 +118,45 @@ export const CommentCard = ({ const [, setOnReaction] = useState(false); const [isUpvoteDrawerOpen, setIsUpvoteDrawerOpen] = useState(false); + const [contentUrlBodyToFetch, setContentUrlBodyToFetch] = useState< + string | null + >(null); + + useRunOnceOnCondition({ + callback: () => { + comment.contentUrl && setContentUrlBodyToFetch(comment.contentUrl); + }, + shouldRun: !!comment.contentUrl, + }); + + const { data: contentUrlBody, isLoading: isLoadingContentBody } = + useGetContentByUrlQuery({ + contentUrl: contentUrlBodyToFetch || '', + enabled: !!contentUrlBodyToFetch, + }); + + useEffect(() => { + if ( + contentUrlBodyToFetch && + contentUrlBodyToFetch !== comment.contentUrl && + contentUrlBody + ) { + setCommentText(contentUrlBody); + setCommentDelta(contentUrlBody); + } + }, [contentUrlBody, contentUrlBodyToFetch, comment.contentUrl]); + + useRunOnceOnCondition({ + callback: () => { + if (contentUrlBody) { + setCommentText(contentUrlBody); + setCommentDelta(contentUrlBody); + } + }, + shouldRun: + !isLoadingContentBody && !!comment.contentUrl && !!contentUrlBody, + }); + useEffect(() => { try { const canvasSignedData: CanvasSignedData = deserializeCanvas( @@ -136,6 +177,26 @@ export const CommentCard = ({ setOnReaction((prevOnReaction) => !prevOnReaction); }; + const handleVersionHistoryChange = (versionId: number) => { + const foundVersion = (comment?.versionHistory || []).find( + (version) => version.id === versionId, + ); + + if (!foundVersion?.content_url) { + setCommentText(foundVersion?.text || ''); + setCommentDelta(foundVersion?.text || ''); + return; + } + + if (contentUrlBodyToFetch === foundVersion.content_url && contentUrlBody) { + setCommentText(contentUrlBody); + setCommentDelta(contentUrlBody); + return; + } + + setContentUrlBodyToFetch(foundVersion.content_url); + }; + return (
@@ -158,7 +219,7 @@ export const CommentCard = ({ showUserAddressWithInfo={false} profile={comment.profile} versionHistory={comment.versionHistory} - changeContentText={setCommentText} + onChangeVersionHistoryNumber={handleVersionHistoryChange} /> )}
diff --git a/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts b/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts index e2004868f4d..a2c0126ed68 100644 --- a/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts +++ b/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts @@ -69,6 +69,7 @@ export async function __getActiveThreads( 'deleted_at', 'marked_as_spam_at', 'discord_meta', + 'content_url', ], include: [ { diff --git a/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts b/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts index 55d96142168..5c8d864775c 100644 --- a/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts +++ b/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts @@ -243,7 +243,8 @@ export async function __getBulkThreads( 'discord_meta', COM.discord_meta, 'profile_name', U.profile->>'name', 'profile_avatar_url', U.profile->>'avatar_url', - 'user_id', U.id + 'user_id', U.id, + 'content_url', COM.content_url ))) as "recentComments" FROM ( Select tempC.* FROM "Comments" tempC From d48d01d46900b09fd85660aace74c31b5ad62ba4 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 8 Oct 2024 17:27:49 +0500 Subject: [PATCH 059/425] Reverted change for thread previews to use content_url --- .../discussions/ThreadCard/ThreadCard.tsx | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx index 3c19d3089f5..f69e6b193f5 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadCard.tsx @@ -10,7 +10,6 @@ import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { useGetCommunityByIdQuery } from 'state/api/communities'; -import useGetContentByUrlQuery from 'state/api/general/getContentByUrl'; import useUserStore from 'state/ui/user'; import { ThreadContestTagContainer } from 'views/components/ThreadContestTag'; import { ViewThreadUpvotesDrawer } from 'views/components/UpvoteDrawer'; @@ -98,25 +97,12 @@ export const ThreadCard = ({ enabled: !!thread.communityId && !showSkeleton, }); - const { data: contentUrlBody, isLoading: isLoadingContentBody } = - useGetContentByUrlQuery({ - contentUrl: thread.contentUrl || '', - enabled: !!thread.contentUrl, - }); - - if ( - showSkeleton || - isLoadingCommunity || - !community || - (isLoadingContentBody && !!thread.contentUrl) - ) { + if (showSkeleton || isLoadingCommunity || !community) { return ( ); } - const threadBodyToDisplay = contentUrlBody || thread.plaintext; - const hasAdminPermissions = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(community) || @@ -133,14 +119,14 @@ export const ThreadCard = ({ const stageLabel = threadStageToLabel(thread.stage); // Future Ref: this fixes https://github.com/hicommonwealth/commonwealth/issues/8611 for iOS mobile - // where quill renders broken/cut-off/overlapping threadBodyToDisplay in cases when there are multiple - //

tags in the quill delta for threadBodyToDisplay or if threadBodyToDisplay has \n characters which + // where quill renders broken/cut-off/overlapping thread.plaintext in cases when there are multiple + //

tags in the quill delta for thread.plaintext or if thread.plaintext has \n characters which // iOS devices don't seem to render correctly. // Not updating it for desktop per a previous issue where markdown wasn't rendered correctly in // preview because of .slice()'d content. const bodyText = getBrowserInfo().isMobile - ? threadBodyToDisplay.replaceAll(/\n/g, '').slice(0, 150) - : threadBodyToDisplay; + ? thread.plaintext.replaceAll(/\n/g, '').slice(0, 150) + : thread.plaintext; return ( <> From b086690afcdd4c3fc8d115497c2eb482635e3c2d Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Tue, 8 Oct 2024 06:55:43 -0700 Subject: [PATCH 060/425] add farcaster contest local dev docs --- common_knowledge/Farcaster-Contests.md | 64 ++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 common_knowledge/Farcaster-Contests.md diff --git a/common_knowledge/Farcaster-Contests.md b/common_knowledge/Farcaster-Contests.md new file mode 100644 index 00000000000..e012d1f39e1 --- /dev/null +++ b/common_knowledge/Farcaster-Contests.md @@ -0,0 +1,64 @@ +# Farcaster Local Development + +## Create a Farcaster account + +First, sign up for a Farcaster account. Warpcast is a Farcaster client that allows you to create an account. It works on mobile and browser. + +- Sign up at https://warpcast.com/ + +## Setup ngrok + +ngrok is a reverse proxy that allows you to create a publicly accessible URL that sends traffic to your local machine, in order to test webhooks locally. + +- Log into https://dashboard.ngrok.com (create free personal account) +- Go to `Domains` -> `New Domain` to generate a free static domain +- Use this command to run ngrok: + - `ngrok http --url=YOUR_NGROK_DOMAIN 8080` + - Save as shell alias or local bash script since you’ll need to run this often + +## Setup Neynar webhook + +Neynar is a 3rd party API used for creating Farcaster webhooks and fetching data from the Farcaster network. + +- Log into https://dev.neynar.com (should be added to Dillon’s team) +- Create new webhook for the CastCreated event (each dev must have their own webhook) + - Name: `Cast Created (YOUR_NAME)` + - TargetURL: `https://YOUR_NGROK_DOMAIN/api/integration/farcaster/CastCreated` + - Set filter: `cast.created` -> `embeds` -> `contests` + +## Set local env vars + +Add these env vars to your .env file. Fill in the API key (ask a dev) and your own ngrok domain: + +``` +FLAG_FARCASTER_CONTEST=true +NEYNAR_API_KEY= +NEYNAR_REPLY_WEBHOOK_URL=https://YOUR_NGROK_DOMAIN/api/integration/farcaster/ReplyCastCreated +FARCASTER_ACTION_URL=https://YOUR_NGROK_DOMAIN/api/integration/farcaster/CastUpvoteAction +``` + +## Run local services + +Run services required for testing contests: + +- Chain listener: `pnpm start-evm-ce` +- Message relayer: `pnpm start-message-relayer` +- Consumer: `pnpm start-consumer` +- App: `pnpm start` + +Also ensure that ngrok is running. + +## Add the Upvote cast action + +Farcaster allows users to add a custom “action” to their account, which can be used on any cast. An action can be added to your account through a special URL. +- Add your FARCASTER_ACTION_URL (from .env) to the end of this warpcast URL: `https://warpcast.com/~/add-cast-action?actionType=post&name=Upvote+Content&icon=thumbsup&postUrl=FARCASTER_ACTION_URL` +- Paste URL into browser, you’ll see the Warpcast page, then click `Add Action` + +## How to test the Farcaster/Contests integration +- First, post a farcaster contest URL on Farcaster. It has this format: `https://YOUR_DOMAIN/api/integration/farcaster/contests/CONTEST_ADDRESS/contestCard` + - Fill in your ngrok domain and contest address + - Upon posting, it should trigger the `CastCreated` webhook and associate the Cast (message) with the contest. It’ll also create a new programatic webhook for `CastReplyCreated`. +- Then, add a reply message to the contest cast. + - This should trigger the `CastReplyCreated` webhook, which will create onchain content. +- Finally, perform the custom Upvote action on your reply message (icon with 4 squares). + - This should trigger the `CastUpvoteAction` webhook, which ultimately creates an onchain vote. From 3ff312a7f916077a62490cb7af9b784ecf3108c0 Mon Sep 17 00:00:00 2001 From: Malikkaleem Date: Tue, 8 Oct 2024 19:33:56 +0500 Subject: [PATCH 061/425] fixed the crash issue on search bar in thread --- .../components/react_quill_editor/highlighter.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/react_quill_editor/highlighter.tsx b/packages/commonwealth/client/scripts/views/components/react_quill_editor/highlighter.tsx index f6ac6f4cef6..391ba9d9aef 100644 --- a/packages/commonwealth/client/scripts/views/components/react_quill_editor/highlighter.tsx +++ b/packages/commonwealth/client/scripts/views/components/react_quill_editor/highlighter.tsx @@ -2,13 +2,19 @@ import { findAll } from 'highlight-words-core'; import React from 'react'; import smartTruncate from 'smart-truncate'; +const escapeRegExp = (string: string) => { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Escaping special characters +}; + export const renderTruncatedHighlights = ( searchTerm: string, docText: string, ) => { - // extract highlighted text + const words = searchTerm.split(/\s+/); // Split on whitespace + // Escape each word in the search term + const escapedWords = words.map((word) => escapeRegExp(word)); const chunks = findAll({ - searchWords: [searchTerm.trim()], + searchWords: escapedWords, textToHighlight: docText, }); From 35f2e4ecb9aa613550fd0e61e11b139ff292ddf5 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Tue, 8 Oct 2024 08:12:14 -0700 Subject: [PATCH 062/425] lint --- .../model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts b/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts index 32635c4f073..b0a78ece671 100644 --- a/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts +++ b/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts @@ -9,7 +9,7 @@ export function GetFarcasterUpvoteActionMetadata(): Query< ...schemas.GetFarcasterUpvoteActionMetadata, auth: [], secure: false, - body: async ({ payload }) => { + body: async () => { return { name: 'Upvote Content', icon: 'thumbsup', From 5353e53bf352d2ae0661d837c6a19cbe0f8f9dd5 Mon Sep 17 00:00:00 2001 From: kassad Date: Tue, 8 Oct 2024 10:15:39 -0700 Subject: [PATCH 063/425] Fixed type errors --- .../NewThreadFormLegacy/NewThreadForm.tsx | 14 ++++++++------ .../NewThreadFormModern/CustomTopicOption.tsx | 2 +- .../NewThreadFormModern/NewThreadForm.tsx | 14 ++++++++------ .../helpers/useNewThreadForm.ts | 4 ++-- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index 907a8e3dca9..182135cc236 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -28,6 +28,7 @@ import { CWTextInput } from 'views/components/component_kit/new_designs/CWTextIn import { MessageRow } from 'views/components/component_kit/new_designs/CWTextInput/MessageRow'; import useCommunityContests from 'views/pages/CommunityManagement/Contests/useCommunityContests'; import useAppStatus from '../../../hooks/useAppStatus'; +import Topic from '../../../models/Topic'; import { ThreadKind, ThreadStage } from '../../../models/types'; import Permissions from '../../../utils/Permissions'; import { CWText } from '../../components/component_kit/cw_text'; @@ -84,15 +85,16 @@ export const NewThreadForm = () => { clearDraft, canShowGatingBanner, setCanShowGatingBanner, - } = useNewThreadForm(communityId, topicsForSelector); + } = useNewThreadForm(communityId, topicsForSelector as unknown as Topic[]); - const hasTopicOngoingContest = threadTopic?.activeContestManagers?.length > 0; + const hasTopicOngoingContest = + threadTopic?.active_contest_managers?.length > 0; const user = useUserStore(); const { checkForSessionKeyRevalidationErrors } = useAuthModalStore(); - const contestTopicError = threadTopic?.activeContestManagers?.length - ? threadTopic?.activeContestManagers + const contestTopicError = threadTopic?.active_contest_managers?.length + ? threadTopic?.active_contest_managers ?.map( (acm) => acm?.content?.filter( @@ -278,7 +280,7 @@ export const NewThreadForm = () => { originalProps, topic: topicsForSelector.find( (t) => String(t.id) === originalProps.data.value, - ), + ) as unknown as Topic, }), }} formatOptionLabel={(option) => ( @@ -323,7 +325,7 @@ export const NewThreadForm = () => { {contestTopicAffordanceVisible && ( { + contests={threadTopic?.active_contest_managers.map((acm) => { return { name: acm?.contest_manager?.name, address: acm?.contest_manager?.contest_address, diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/CustomTopicOption.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/CustomTopicOption.tsx index ab695f2a11d..c8479cf081f 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/CustomTopicOption.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/CustomTopicOption.tsx @@ -15,7 +15,7 @@ const CustomTopicOption = ({ return ( // @ts-expect-error - {(topic?.activeContestManagers?.length || 0) > 0 && ( + {(topic?.active_contest_managers?.length || 0) > 0 && ( )} {originalProps.label} diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index a49282fa545..2d1a22a05f7 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -30,6 +30,7 @@ import { CWTextInput } from 'views/components/component_kit/new_designs/CWTextIn import { MessageRow } from 'views/components/component_kit/new_designs/CWTextInput/MessageRow'; import useCommunityContests from 'views/pages/CommunityManagement/Contests/useCommunityContests'; import useAppStatus from '../../../hooks/useAppStatus'; +import Topic from '../../../models/Topic'; import { ThreadKind, ThreadStage } from '../../../models/types'; import Permissions from '../../../utils/Permissions'; import { CWText } from '../../components/component_kit/cw_text'; @@ -81,15 +82,16 @@ export const NewThreadForm = () => { clearDraft, canShowGatingBanner, setCanShowGatingBanner, - } = useNewThreadForm(communityId, topicsForSelector); + } = useNewThreadForm(communityId, topicsForSelector as unknown as Topic[]); - const hasTopicOngoingContest = threadTopic?.activeContestManagers?.length > 0; + const hasTopicOngoingContest = + threadTopic?.active_contest_managers?.length > 0; const user = useUserStore(); const { checkForSessionKeyRevalidationErrors } = useAuthModalStore(); - const contestTopicError = threadTopic?.activeContestManagers?.length - ? threadTopic?.activeContestManagers + const contestTopicError = threadTopic?.active_contest_managers?.length + ? threadTopic?.active_contest_managers ?.map( (acm) => acm?.content?.filter( @@ -262,7 +264,7 @@ export const NewThreadForm = () => { originalProps, topic: topicsForSelector.find( (t) => String(t.id) === originalProps.data.value, - ), + ) as unknown as Topic, }), }} formatOptionLabel={(option) => ( @@ -307,7 +309,7 @@ export const NewThreadForm = () => { {contestTopicAffordanceVisible && ( { + contests={threadTopic?.active_contest_managers.map((acm) => { return { name: acm?.contest_manager?.name, address: acm?.contest_manager?.contest_address, diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts index 7bef182947f..9421231a908 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts @@ -80,10 +80,10 @@ const useNewThreadForm = (communityId: string, topicsForSelector: Topic[]) => { } saveDraft(draft); - if (!editorText && threadTopic?.defaultOffchainTemplate) { + if (!editorText && threadTopic?.default_offchain_template) { try { const template = JSON.parse( - threadTopic.defaultOffchainTemplate, + threadTopic.default_offchain_template, ) as string; setEditorText(template); } catch (e) { From 74761f2752a7d113c1c1e85091090e14a5afc36f Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Wed, 9 Oct 2024 00:39:27 +0500 Subject: [PATCH 064/425] copy to clipboard in Buy stack screen --- .../CWSelectList/CWSelectList.scss | 1 + .../new_designs/CWSelectList/CWSelectList.tsx | 13 ++++++ .../CWSingleSelectItem.scss | 18 ++++++++ .../CWSingleSelectItem/CWSingleSelectItem.tsx | 42 +++++++++++++++++++ .../StakeExchangeForm/StakeExchangeForm.tsx | 9 ++++ 5 files changed, 83 insertions(+) create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.scss create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.scss b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.scss index c05809526db..425f32d65ce 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.scss +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.scss @@ -33,6 +33,7 @@ padding: 0 !important; max-height: 24px; line-height: 14px; + display: flex !important; &.cwsl__value-container--is-multi { max-height: initial !important; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx index ccc71e8216a..59cb519fae5 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx @@ -4,6 +4,7 @@ import type { GroupBase, Props } from 'react-select'; import Select from 'react-select'; import { getClasses } from '../../helpers'; import { ComponentType } from '../../types'; +import { CWSingleSelectItem } from '../CWSingleSelectItem/CWSingleSelectItem'; import { MessageRow } from '../CWTextInput/MessageRow'; import './CWSelectList.scss'; import { DropdownIndicator } from './DropdownIndicator'; @@ -14,6 +15,8 @@ type CustomCWSelectListProps = { label?: string; hookToForm?: boolean; customError?: string; + handleClickCopyClipboard?: (id: string) => void; + showIcon?: boolean; }; export const CWSelectList = < @@ -35,6 +38,8 @@ export const CWSelectList = < customError, components, isMulti, + showIcon, + handleClickCopyClipboard, } = props; const formContext = useFormContext(); const formFieldContext = hookToForm @@ -124,6 +129,14 @@ export const CWSelectList = < DropdownIndicator, MultiValueRemove, Option: components?.Option || Option, + // eslint-disable-next-line react/no-multi-comp + SingleValue: (singleValueProps) => ( + + ), }} className={getClasses<{ className?: string; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.scss b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.scss new file mode 100644 index 00000000000..654c5b2ad1c --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.scss @@ -0,0 +1,18 @@ +@import '../../../../../../styles/shared.scss'; +.custom-single-value { + display: flex; + width: 97%; + justify-content: space-between; + align-items: center; + padding-right: 4px; + cursor: pointer; + + .inner-container { + display: flex; + + .check-icon { + fill: $green-600; + margin-right: 8px; + } + } +} diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx new file mode 100644 index 00000000000..51ae414205b --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx @@ -0,0 +1,42 @@ +import { CopySimple } from '@phosphor-icons/react'; +import { formatAddressShort } from 'client/scripts/helpers'; +import React from 'react'; +import { SingleValueProps } from 'react-select'; +import { CWIcon } from '../../cw_icons/cw_icon'; +import './CWSingleSelectItem.scss'; +type CustomSingleValueProps = { + extraProp?: boolean; + handleClickCopyClipboard?: (id: string) => void; + showIcon?: boolean; +}; + +interface OptionProps { + value: string; + label: string; +} + +export const CWSingleSelectItem = ( + props: SingleValueProps & CustomSingleValueProps, +) => { + const { data, extraProp = false, handleClickCopyClipboard } = props; + const handleClickToCopy = (event: React.MouseEvent) => { + event.stopPropagation(); + if (handleClickCopyClipboard) { + handleClickCopyClipboard(data.value); + } + }; + + return ( +

+
+ + {formatAddressShort(data.label, 6)} +
+ {extraProp && } +
+ ); +}; diff --git a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx index 68f1444df28..59a14700d32 100644 --- a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx +++ b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx @@ -1,4 +1,5 @@ import { commonProtocol } from '@hicommonwealth/shared'; +import { notifySuccess } from 'client/scripts/controllers/app/notifications'; import clsx from 'clsx'; import { findDenominationIcon } from 'helpers/findDenomination'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; @@ -302,6 +303,12 @@ const StakeExchangeForm = ({ ? false : numberOfStakeToExchange >= stakeBalance; + const handleClickCopyClipboard = (address: string) => { + navigator.clipboard.writeText(address).then(() => { + notifySuccess('successfully copy to clipboard'); + }); + }; + return (
@@ -329,6 +336,8 @@ const StakeExchangeForm = ({ isSearchable={false} options={addressOptions} onChange={onSetSelectedAddress} + handleClickCopyClipboard={handleClickCopyClipboard} + showIcon={true} />
From 9eb1f0489973bb4560e549f4268bb1747c61eaa9 Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Wed, 9 Oct 2024 00:44:49 +0500 Subject: [PATCH 065/425] copy to clipboard in Buy stack screen From 67ab6e29c1359d83375afdcedcadfb64cec0a3ac Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Wed, 9 Oct 2024 00:52:23 +0500 Subject: [PATCH 066/425] fixed the edge case --- .../CWSingleSelectItem/CWSingleSelectItem.tsx | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx index 51ae414205b..4499d86fec2 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx @@ -10,10 +10,10 @@ type CustomSingleValueProps = { showIcon?: boolean; }; -interface OptionProps { +type OptionProps = { value: string; label: string; -} +}; export const CWSingleSelectItem = ( props: SingleValueProps & CustomSingleValueProps, @@ -28,14 +28,18 @@ export const CWSingleSelectItem = ( return (
-
- - {formatAddressShort(data.label, 6)} -
+ {extraProp && ( +
+ + {formatAddressShort(data.label, 6)} +
+ )} + {!extraProp && {data.label}} + {extraProp && }
); From 5652bcabcfed5432120914538585ea11edbaa90d Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Tue, 8 Oct 2024 13:26:11 -0700 Subject: [PATCH 067/425] ... new component. --- .../views/pages/MarkdownEditorPage/NewButtonLayout.tsx | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewButtonLayout.tsx diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewButtonLayout.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewButtonLayout.tsx new file mode 100644 index 00000000000..4439e12fb5c --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewButtonLayout.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export const NewButtonLayout = () => { + return
; +}; From 1ee63e366823e1a227fcc0ddee5ec7a5d5cf0727 Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Wed, 9 Oct 2024 15:06:21 +0500 Subject: [PATCH 068/425] fixed the code quality --- .../StakeExchangeForm/StakeExchangeForm.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx index 59a14700d32..ca333a5bb6a 100644 --- a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx +++ b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx @@ -304,9 +304,8 @@ const StakeExchangeForm = ({ : numberOfStakeToExchange >= stakeBalance; const handleClickCopyClipboard = (address: string) => { - navigator.clipboard.writeText(address).then(() => { - notifySuccess('successfully copy to clipboard'); - }); + navigator.clipboard.writeText(address); + notifySuccess('successfully copy to clipboard'); }; return ( From 411128b5635541adaa301c675ce6397f1b4915e9 Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Wed, 9 Oct 2024 15:27:37 +0500 Subject: [PATCH 069/425] added the type for input --- .../StakeExchangeForm/StakeExchangeForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx index ca333a5bb6a..0269df6f815 100644 --- a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx +++ b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx @@ -240,7 +240,7 @@ const StakeExchangeForm = ({ onSetNumberOfStakeToExchange((prevState) => prevState + 1); }; - const handleInput = (e) => { + const handleInput = (e: React.ChangeEvent) => { const inputValue = e.target.value; const numericValue = inputValue.replace(/[^0-9]/g, ''); const parsed = parseInt(numericValue); From ba53ad90af9ebd63ea084d9c86abdd2df46e11f7 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 9 Oct 2024 18:12:39 +0500 Subject: [PATCH 070/425] Fix content rendering when thread body gets fetched from content_url --- .../client/scripts/views/pages/view_thread/ViewThreadPage.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index ad1023c3743..1a9dc553636 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -631,6 +631,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { ) : ( <> From 3db805a35e7e6567182150bcb815eda734de1f9c Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Wed, 9 Oct 2024 18:44:38 +0500 Subject: [PATCH 071/425] fixing eslint issues --- .../StakeExchangeForm/StakeExchangeForm.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx index 0269df6f815..f7a4ca5250c 100644 --- a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx +++ b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx @@ -1,5 +1,8 @@ import { commonProtocol } from '@hicommonwealth/shared'; -import { notifySuccess } from 'client/scripts/controllers/app/notifications'; +import { + notifyError, + notifySuccess, +} from 'client/scripts/controllers/app/notifications'; import clsx from 'clsx'; import { findDenominationIcon } from 'helpers/findDenomination'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; @@ -132,7 +135,7 @@ const StakeExchangeForm = ({ const { trackAnalytics } = useBrowserAnalyticsTrack({ onAction: true, }); - + // eslint-disable-next-line @typescript-eslint/no-floating-promises const handleBuy = async () => { try { onSetModalState(ManageCommunityStakeModalState.Loading); @@ -304,8 +307,14 @@ const StakeExchangeForm = ({ : numberOfStakeToExchange >= stakeBalance; const handleClickCopyClipboard = (address: string) => { - navigator.clipboard.writeText(address); - notifySuccess('successfully copy to clipboard'); + navigator.clipboard + .writeText(address) + .then(() => { + notifySuccess('successfully copy to clipboard'); + }) + .catch(() => { + notifyError('Failed to copy clipboard'); + }); }; return ( From 0575d1925b5341363f12b5fa06bd3cad8605cc5d Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 19:30:27 +0300 Subject: [PATCH 072/425] getEventSources updates --- .../evmChainEvents/getEventSources.spec.ts | 75 ++----- .../test/integration/evmChainEvents/util.ts | 212 +++++++++++++++++- 2 files changed, 227 insertions(+), 60 deletions(-) diff --git a/packages/commonwealth/test/integration/evmChainEvents/getEventSources.spec.ts b/packages/commonwealth/test/integration/evmChainEvents/getEventSources.spec.ts index 61d8553f2b2..fb7d2925dd6 100644 --- a/packages/commonwealth/test/integration/evmChainEvents/getEventSources.spec.ts +++ b/packages/commonwealth/test/integration/evmChainEvents/getEventSources.spec.ts @@ -1,82 +1,41 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { dispose } from '@hicommonwealth/core'; -import { DB, tester } from '@hicommonwealth/model'; +import { ContractAbiInstance, models, tester } from '@hicommonwealth/model'; import { expect } from 'chai'; import { afterAll, beforeAll, describe, test } from 'vitest'; import { getEventSources } from '../../../server/workers/evmChainEvents/getEventSources'; -import { localRpc } from '../../devnet/evm/evmChainEvents/util'; import { - getTestAbi, - getTestCommunityContract, - getTestContract, - getTestSignatures, + createAdditionalEventSources, + createEventSources, + multipleEventSource, + singleEventSource, } from './util'; describe('getEventSources', () => { - let models: DB; + let namespaceAbiInstance: ContractAbiInstance; + let stakesAbiInstance: ContractAbiInstance; beforeAll(async () => { - const res = await import('@hicommonwealth/model'); - models = res['models']; - await tester.seedDb(); + await tester.bootstrap_testing(true); + const res = await createEventSources(); + namespaceAbiInstance = res.namespaceAbiInstance; + stakesAbiInstance = res.stakesAbiInstance; }); afterAll(async () => { await dispose()(); }); - test("should not return sources that don't have a community contract", async () => { + test('should return a single event source', async () => { const result = await getEventSources(models); - expect(result).to.deep.equal({}); + expect(JSON.stringify(result)).to.equal(JSON.stringify(singleEventSource)); }); - test("should not return sources that don't have an ABI", async () => { - await getTestCommunityContract(); + test('should return multiple event sources', async () => { + await createAdditionalEventSources(namespaceAbiInstance, stakesAbiInstance); const result = await getEventSources(models); - expect(result).to.deep.equal({}); - }); - - test("should not return sources that don't have event signatures", async () => { - const abi = await getTestAbi(); - const contract = await getTestContract(); - contract.abi_id = abi.id; - await contract.save(); - - const result = await getEventSources(models); - expect(result).to.deep.equal({}); - }); - - test('should return event sources organized by chain node', async () => { - const signatures = await getTestSignatures(); - await getTestAbi(); - const result = await getEventSources(models); - - const chainNodeId = String(signatures[0].chain_node_id); - const contractAddress = signatures[0].contract_address.toLowerCase(); - expect(result).to.exist.and.to.haveOwnProperty(chainNodeId); - expect(result[chainNodeId].rpc).to.equal(localRpc); - expect(result[chainNodeId].contracts).to.exist.and.to.haveOwnProperty( - contractAddress, - ); - expect(result[chainNodeId].contracts[contractAddress].abi).to.exist; - expect( - result[chainNodeId].contracts[contractAddress].sources, - ).exist.and.to.have.lengthOf(2); - - const propCreatedSource = result[chainNodeId].contracts[ - contractAddress - ].sources.find((s) => s.event_signature === signatures[0].event_signature); - expect(propCreatedSource).to.exist.and.to.haveOwnProperty( - 'kind', - signatures[0].kind, - ); - - const propQueuedSource = result[chainNodeId].contracts[ - contractAddress - ].sources.find((s) => s.event_signature === signatures[1].event_signature); - expect(propQueuedSource).to.exist.and.to.haveOwnProperty( - 'kind', - signatures[1].kind, + expect(JSON.stringify(result)).to.equal( + JSON.stringify(multipleEventSource), ); }); }); diff --git a/packages/commonwealth/test/integration/evmChainEvents/util.ts b/packages/commonwealth/test/integration/evmChainEvents/util.ts index 367e21e473e..af6d732a6fd 100644 --- a/packages/commonwealth/test/integration/evmChainEvents/util.ts +++ b/packages/commonwealth/test/integration/evmChainEvents/util.ts @@ -2,7 +2,13 @@ import { communityStakesAbi, namespaceFactoryAbi, } from '@hicommonwealth/evm-testing'; -import { hashAbi, models } from '@hicommonwealth/model'; +import { + ChainNodeInstance, + ContractAbiInstance, + EvmEventSourceInstance, + hashAbi, + models, +} from '@hicommonwealth/model'; import { BalanceType, ChainBase, @@ -120,7 +126,6 @@ export async function getTestAbi(version?: 'v1' | 'v2') { if (existingAbi) return existingAbi; - // @ts-expect-error StrictNullChecks return await models.ContractAbi.create({ abi: !version || version === 'v1' ? rawCompoundAbi : rawDydxAbi, nickname: nickname, @@ -212,3 +217,206 @@ export async function getTestSignatures(version?: 'v1' | 'v2') { return [es1, es2]; } + +const namespaceDeployedSignature = + '0x8870ba2202802ce285ce6bead5ac915b6dc2d35c8a9d6f96fa56de9de12829d5'; +const communityStakeTradeSignature = + '0xfc13c9a8a9a619ac78b803aecb26abdd009182411d51a986090f82519d88a89e'; + +export async function createEventSources(): Promise<{ + chainNodeInstance: ChainNodeInstance; + namespaceAbiInstance: ContractAbiInstance; + stakesAbiInstance: ContractAbiInstance; + evmEventSourceInstances: EvmEventSourceInstance[]; +}> { + const chainNodeInstance = await models.ChainNode.create({ + url: localRpc, + balance_type: BalanceType.Ethereum, + name: 'Local Base Sepolia', + eth_chain_id: commonProtocol.ValidChains.SepoliaBase, + max_ce_block_range: -1, + }); + const namespaceAbiInstance = await models.ContractAbi.create({ + abi: namespaceFactoryAbi, + nickname: 'NamespaceFactory', + abi_hash: hashAbi(namespaceFactoryAbi), + }); + const stakesAbiInstance = await models.ContractAbi.create({ + abi: communityStakesAbi, + nickname: 'CommunityStakes', + abi_hash: hashAbi(communityStakesAbi), + }); + const evmEventSourceInstances = await models.EvmEventSource.bulkCreate([ + { + chain_node_id: chainNodeInstance.id!, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].factory.toLowerCase(), + event_signature: namespaceDeployedSignature, + kind: 'DeployedNamespace', + abi_id: namespaceAbiInstance.id!, + }, + { + chain_node_id: chainNodeInstance.id!, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].communityStake.toLowerCase(), + event_signature: communityStakeTradeSignature, + kind: 'Trade', + abi_id: stakesAbiInstance.id!, + }, + ]); + + return { + chainNodeInstance, + namespaceAbiInstance, + stakesAbiInstance, + evmEventSourceInstances, + }; +} + +// creates evm sources for Stake on Ethereum Sepolia +export async function createAdditionalEventSources( + namespaceAbiInstance: ContractAbiInstance, + stakesAbiInstance: ContractAbiInstance, +): Promise<{ + chainNodeInstance: ChainNodeInstance; + evmEventSourceInstances: EvmEventSourceInstance[]; +}> { + const chainNodeInstance = await models.ChainNode.create({ + url: 'http://localhost:8546', + balance_type: BalanceType.Ethereum, + name: 'Local Ethereum Sepolia', + eth_chain_id: commonProtocol.ValidChains.Sepolia, + max_ce_block_range: -1, + }); + const evmEventSourceInstances = await models.EvmEventSource.bulkCreate([ + { + chain_node_id: chainNodeInstance.id!, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.Sepolia + ].factory.toLowerCase(), + event_signature: namespaceDeployedSignature, + kind: 'DeployedNamespace', + abi_id: namespaceAbiInstance.id!, + }, + { + chain_node_id: chainNodeInstance.id!, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.Sepolia + ].communityStake.toLowerCase(), + event_signature: communityStakeTradeSignature, + kind: 'Trade', + abi_id: stakesAbiInstance.id!, + }, + ]); + + return { chainNodeInstance, evmEventSourceInstances }; +} + +export const singleEventSource = { + '1': { + rpc: localRpc, + contracts: { + [commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].communityStake.toLowerCase()]: { + abi: communityStakesAbi, + sources: [ + { + id: 2, + kind: 'Trade', + abi_id: 2, + active: true, + chain_node_id: 1, + event_signature: communityStakeTradeSignature, + events_migrated: null, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].communityStake.toLowerCase(), + created_at_block: null, + }, + ], + }, + [commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].factory.toLowerCase()]: { + abi: namespaceFactoryAbi, + sources: [ + { + id: 1, + kind: 'DeployedNamespace', + abi_id: 1, + active: true, + chain_node_id: 1, + event_signature: namespaceDeployedSignature, + events_migrated: null, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.SepoliaBase + ].factory.toLowerCase(), + created_at_block: null, + }, + ], + }, + }, + maxBlockRange: -1, + }, +}; + +export const multipleEventSource = { + ...singleEventSource, + '2': { + rpc: 'http://localhost:8546', + contracts: { + [commonProtocol.factoryContracts[ + commonProtocol.ValidChains.Sepolia + ].factory.toLowerCase()]: { + abi: namespaceFactoryAbi, + sources: [ + { + id: 3, + kind: 'DeployedNamespace', + abi_id: 1, + active: true, + chain_node_id: 2, + event_signature: namespaceDeployedSignature, + events_migrated: null, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.Sepolia + ].factory.toLowerCase(), + created_at_block: null, + }, + ], + }, + [commonProtocol.factoryContracts[ + commonProtocol.ValidChains.Sepolia + ].communityStake.toLowerCase()]: { + abi: communityStakesAbi, + sources: [ + { + id: 4, + kind: 'Trade', + abi_id: 2, + active: true, + chain_node_id: 2, + event_signature: communityStakeTradeSignature, + events_migrated: null, + contract_address: + commonProtocol.factoryContracts[ + commonProtocol.ValidChains.Sepolia + ].communityStake.toLowerCase(), + created_at_block: null, + }, + ], + }, + }, + maxBlockRange: -1, + }, +}; From d13f107ae1182aad72dbe205580100ea78439f6a Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 19:37:22 +0300 Subject: [PATCH 073/425] scheduleNodeProcessing.spec.ts --- .../evmChainEvents/getEventSources.spec.ts | 3 +- .../scheduleNodeProcessing.spec.ts | 35 +++++++------------ 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/packages/commonwealth/test/integration/evmChainEvents/getEventSources.spec.ts b/packages/commonwealth/test/integration/evmChainEvents/getEventSources.spec.ts index fb7d2925dd6..a9d5f9378b3 100644 --- a/packages/commonwealth/test/integration/evmChainEvents/getEventSources.spec.ts +++ b/packages/commonwealth/test/integration/evmChainEvents/getEventSources.spec.ts @@ -1,8 +1,7 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { dispose } from '@hicommonwealth/core'; import { ContractAbiInstance, models, tester } from '@hicommonwealth/model'; -import { expect } from 'chai'; -import { afterAll, beforeAll, describe, test } from 'vitest'; +import { afterAll, beforeAll, describe, expect, test } from 'vitest'; import { getEventSources } from '../../../server/workers/evmChainEvents/getEventSources'; import { createAdditionalEventSources, diff --git a/packages/commonwealth/test/integration/evmChainEvents/scheduleNodeProcessing.spec.ts b/packages/commonwealth/test/integration/evmChainEvents/scheduleNodeProcessing.spec.ts index 7127c73e6d7..68805c456fd 100644 --- a/packages/commonwealth/test/integration/evmChainEvents/scheduleNodeProcessing.spec.ts +++ b/packages/commonwealth/test/integration/evmChainEvents/scheduleNodeProcessing.spec.ts @@ -1,6 +1,5 @@ import { dispose } from '@hicommonwealth/core'; -import { DB, tester } from '@hicommonwealth/model'; -import { expect } from 'chai'; +import { ContractAbiInstance, models, tester } from '@hicommonwealth/model'; import sinon from 'sinon'; import { afterAll, @@ -8,27 +7,22 @@ import { beforeAll, beforeEach, describe, + expect, test, } from 'vitest'; import { scheduleNodeProcessing } from '../../../server/workers/evmChainEvents/nodeProcessing'; -import { - getTestAbi, - getTestCommunityContract, - getTestContract, - getTestSignatures, -} from './util'; +import { createAdditionalEventSources, createEventSources } from './util'; describe('scheduleNodeProcessing', () => { const sandbox = sinon.createSandbox(); let processChainStub: sinon.SinonSpy; let clock: sinon.SinonFakeTimers; let singleSourceSuccess = false; - let models: DB; + let namespaceAbiInstance: ContractAbiInstance; + let stakesAbiInstance: ContractAbiInstance; beforeAll(async () => { - await tester.seedDb(); - const res = await import('@hicommonwealth/model'); - models = res['models']; + await tester.bootstrap_testing(true); }); afterAll(async () => { @@ -51,11 +45,9 @@ describe('scheduleNodeProcessing', () => { }); test('should schedule processing for a single source', async () => { - await getTestCommunityContract(); - const abi = await getTestAbi(); - const contract = await getTestContract(); - await contract.update({ abi_id: abi.id }); - await getTestSignatures(); + const res = await createEventSources(); + namespaceAbiInstance = res.namespaceAbiInstance; + stakesAbiInstance = res.stakesAbiInstance; const interval = 10_000; await scheduleNodeProcessing(models, interval, processChainStub); @@ -69,11 +61,10 @@ describe('scheduleNodeProcessing', () => { test('should evenly schedule 2 sources per interval', async () => { expect(singleSourceSuccess).to.be.true; - await getTestCommunityContract('v2'); - const abi = await getTestAbi('v2'); - const contract = await getTestContract('v2'); - await contract.update({ abi_id: abi.id }); - await getTestSignatures('v2'); + expect(namespaceAbiInstance).toBeTruthy(); + expect(stakesAbiInstance).toBeTruthy(); + + await createAdditionalEventSources(namespaceAbiInstance, stakesAbiInstance); const interval = 10_000; await scheduleNodeProcessing(models, interval, processChainStub); From 2816f5e1e9667775195ecbef3c314274c3118bc0 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 19:42:12 +0300 Subject: [PATCH 074/425] remove unused utils --- libs/evm-testing/src/utils/chainUtil.ts | 2 + .../workers/evmChainEvents/hardCodedAbis.ts | 2283 ----------------- .../evmChainEvents.spec.ts | 9 +- .../test/devnet/evm/evmChainEvents/util.ts | 6 - .../test/integration/evmChainEvents/util.ts | 210 +- 5 files changed, 8 insertions(+), 2502 deletions(-) delete mode 100644 packages/commonwealth/server/workers/evmChainEvents/hardCodedAbis.ts rename packages/commonwealth/test/devnet/evm/{evmChainEvents => }/evmChainEvents.spec.ts (98%) delete mode 100644 packages/commonwealth/test/devnet/evm/evmChainEvents/util.ts diff --git a/libs/evm-testing/src/utils/chainUtil.ts b/libs/evm-testing/src/utils/chainUtil.ts index 62411cf8bc4..258bb5fa4f8 100644 --- a/libs/evm-testing/src/utils/chainUtil.ts +++ b/libs/evm-testing/src/utils/chainUtil.ts @@ -3,6 +3,8 @@ import { Anvil, createAnvil, CreateAnvilOptions } from '@viem/anvil'; import Web3 from 'web3'; import getProvider from './getProvider'; +export const localRpc = 'http://localhost:8545'; + export async function advanceTime(seconds: number, blocks = 1) { const provider = new Web3.providers.HttpProvider( config.TEST_EVM.PROVIDER_URL, diff --git a/packages/commonwealth/server/workers/evmChainEvents/hardCodedAbis.ts b/packages/commonwealth/server/workers/evmChainEvents/hardCodedAbis.ts deleted file mode 100644 index 722a845947f..00000000000 --- a/packages/commonwealth/server/workers/evmChainEvents/hardCodedAbis.ts +++ /dev/null @@ -1,2283 +0,0 @@ -export const rawAaveAbi = [ - { - inputs: [ - { - internalType: 'address', - name: 'governanceStrategy', - type: 'address', - }, - { - internalType: 'uint256', - name: 'votingDelay', - type: 'uint256', - }, - { - internalType: 'address', - name: 'guardian', - type: 'address', - }, - { - internalType: 'address[]', - name: 'executors', - type: 'address[]', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'executor', - type: 'address', - }, - ], - name: 'ExecutorAuthorized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'executor', - type: 'address', - }, - ], - name: 'ExecutorUnauthorized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'newStrategy', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorChange', - type: 'address', - }, - ], - name: 'GovernanceStrategyChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - ], - name: 'ProposalCanceled', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'creator', - type: 'address', - }, - { - indexed: true, - internalType: 'contract IExecutorWithTimelock', - name: 'executor', - type: 'address', - }, - { - indexed: false, - internalType: 'address[]', - name: 'targets', - type: 'address[]', - }, - { - indexed: false, - internalType: 'uint256[]', - name: 'values', - type: 'uint256[]', - }, - { - indexed: false, - internalType: 'string[]', - name: 'signatures', - type: 'string[]', - }, - { - indexed: false, - internalType: 'bytes[]', - name: 'calldatas', - type: 'bytes[]', - }, - { - indexed: false, - internalType: 'bool[]', - name: 'withDelegatecalls', - type: 'bool[]', - }, - { - indexed: false, - internalType: 'uint256', - name: 'startBlock', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'endBlock', - type: 'uint256', - }, - { - indexed: false, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'ipfsHash', - type: 'bytes32', - }, - ], - name: 'ProposalCreated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorExecution', - type: 'address', - }, - ], - name: 'ProposalExecuted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'executionTime', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorQueueing', - type: 'address', - }, - ], - name: 'ProposalQueued', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'voter', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'support', - type: 'bool', - }, - { - indexed: false, - internalType: 'uint256', - name: 'votingPower', - type: 'uint256', - }, - ], - name: 'VoteEmitted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'newVotingDelay', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorChange', - type: 'address', - }, - ], - name: 'VotingDelayChanged', - type: 'event', - }, - { - inputs: [], - name: 'DOMAIN_TYPEHASH', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'NAME', - outputs: [{ internalType: 'string', name: '', type: 'string' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'VOTE_EMITTED_TYPEHASH', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: '__abdicate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address[]', - name: 'executors', - type: 'address[]', - }, - ], - name: 'authorizeExecutors', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'cancel', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'contract IExecutorWithTimelock', - name: 'executor', - type: 'address', - }, - { - internalType: 'address[]', - name: 'targets', - type: 'address[]', - }, - { - internalType: 'uint256[]', - name: 'values', - type: 'uint256[]', - }, - { - internalType: 'string[]', - name: 'signatures', - type: 'string[]', - }, - { - internalType: 'bytes[]', - name: 'calldatas', - type: 'bytes[]', - }, - { - internalType: 'bool[]', - name: 'withDelegatecalls', - type: 'bool[]', - }, - { - internalType: 'bytes32', - name: 'ipfsHash', - type: 'bytes32', - }, - ], - name: 'create', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'execute', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'getGovernanceStrategy', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getGuardian', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'getProposalById', - outputs: [ - { - components: [ - { - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - internalType: 'address', - name: 'creator', - type: 'address', - }, - { - internalType: 'contract IExecutorWithTimelock', - name: 'executor', - type: 'address', - }, - { - internalType: 'address[]', - name: 'targets', - type: 'address[]', - }, - { - internalType: 'uint256[]', - name: 'values', - type: 'uint256[]', - }, - { - internalType: 'string[]', - name: 'signatures', - type: 'string[]', - }, - { - internalType: 'bytes[]', - name: 'calldatas', - type: 'bytes[]', - }, - { - internalType: 'bool[]', - name: 'withDelegatecalls', - type: 'bool[]', - }, - { - internalType: 'uint256', - name: 'startBlock', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'endBlock', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'executionTime', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'forVotes', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'againstVotes', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'executed', - type: 'bool', - }, - { - internalType: 'bool', - name: 'canceled', - type: 'bool', - }, - { - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - internalType: 'bytes32', - name: 'ipfsHash', - type: 'bytes32', - }, - ], - internalType: 'struct IAaveGovernanceV2.ProposalWithoutVotes', - name: '', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'getProposalState', - outputs: [ - { - internalType: 'enum IAaveGovernanceV2.ProposalState', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getProposalsCount', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - { internalType: 'address', name: 'voter', type: 'address' }, - ], - name: 'getVoteOnProposal', - outputs: [ - { - components: [ - { - internalType: 'bool', - name: 'support', - type: 'bool', - }, - { - internalType: 'uint248', - name: 'votingPower', - type: 'uint248', - }, - ], - internalType: 'struct IAaveGovernanceV2.Vote', - name: '', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getVotingDelay', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'executor', - type: 'address', - }, - ], - name: 'isExecutorAuthorized', - outputs: [{ internalType: 'bool', name: '', type: 'bool' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'queue', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'governanceStrategy', - type: 'address', - }, - ], - name: 'setGovernanceStrategy', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'votingDelay', - type: 'uint256', - }, - ], - name: 'setVotingDelay', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - { internalType: 'bool', name: 'support', type: 'bool' }, - ], - name: 'submitVote', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - { internalType: 'bool', name: 'support', type: 'bool' }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { internalType: 'bytes32', name: 'r', type: 'bytes32' }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'submitVoteBySignature', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address[]', - name: 'executors', - type: 'address[]', - }, - ], - name: 'unauthorizeExecutors', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, -]; - -export const rawCompoundAbi = [ - { - type: 'constructor', - inputs: [ - { - name: 'tribe', - type: 'address', - internalType: 'contract ERC20VotesComp', - }, - { - name: 'timelock', - type: 'address', - internalType: 'contract ICompoundTimelock', - }, - { name: 'guardian', type: 'address', internalType: 'address' }, - ], - stateMutability: 'nonpayable', - }, - { - name: 'ProposalCanceled', - type: 'event', - inputs: [ - { - name: 'proposalId', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - ], - anonymous: false, - }, - { - name: 'ProposalCreated', - type: 'event', - inputs: [ - { - name: 'proposalId', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { - name: 'proposer', - type: 'address', - indexed: false, - internalType: 'address', - }, - { - name: 'targets', - type: 'address[]', - indexed: false, - internalType: 'address[]', - }, - { - name: 'values', - type: 'uint256[]', - indexed: false, - internalType: 'uint256[]', - }, - { - name: 'signatures', - type: 'string[]', - indexed: false, - internalType: 'string[]', - }, - { - name: 'calldatas', - type: 'bytes[]', - indexed: false, - internalType: 'bytes[]', - }, - { - name: 'startBlock', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { - name: 'endBlock', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { - name: 'description', - type: 'string', - indexed: false, - internalType: 'string', - }, - ], - anonymous: false, - }, - { - name: 'ProposalExecuted', - type: 'event', - inputs: [ - { - name: 'proposalId', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - ], - anonymous: false, - }, - { - name: 'ProposalQueued', - type: 'event', - inputs: [ - { - name: 'proposalId', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { - name: 'eta', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - ], - anonymous: false, - }, - { - name: 'ProposalThresholdUpdated', - type: 'event', - inputs: [ - { - name: 'oldProposalThreshold', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { - name: 'newProposalThreshold', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - ], - anonymous: false, - }, - { - name: 'QuorumUpdated', - type: 'event', - inputs: [ - { - name: 'oldQuorum', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { - name: 'newQuorum', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - ], - anonymous: false, - }, - { name: 'Rollback', type: 'event', inputs: [], anonymous: false }, - { - name: 'RollbackQueued', - type: 'event', - inputs: [ - { name: 'eta', type: 'uint256', indexed: false, internalType: 'uint256' }, - ], - anonymous: false, - }, - { - name: 'TimelockChange', - type: 'event', - inputs: [ - { - name: 'oldTimelock', - type: 'address', - indexed: false, - internalType: 'address', - }, - { - name: 'newTimelock', - type: 'address', - indexed: false, - internalType: 'address', - }, - ], - anonymous: false, - }, - { - name: 'VoteCast', - type: 'event', - inputs: [ - { - name: 'voter', - type: 'address', - indexed: true, - internalType: 'address', - }, - { - name: 'proposalId', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { name: 'support', type: 'uint8', indexed: false, internalType: 'uint8' }, - { - name: 'weight', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { - name: 'reason', - type: 'string', - indexed: false, - internalType: 'string', - }, - ], - anonymous: false, - }, - { - name: 'VotingDelayUpdated', - type: 'event', - inputs: [ - { - name: 'oldVotingDelay', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { - name: 'newVotingDelay', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - ], - anonymous: false, - }, - { - name: 'VotingPeriodUpdated', - type: 'event', - inputs: [ - { - name: 'oldVotingPeriod', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - { - name: 'newVotingPeriod', - type: 'uint256', - indexed: false, - internalType: 'uint256', - }, - ], - anonymous: false, - }, - { - name: 'BACKUP_GOVERNOR', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'address', internalType: 'address' }], - stateMutability: 'view', - }, - { - name: 'BALLOT_TYPEHASH', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'bytes32', internalType: 'bytes32' }], - stateMutability: 'view', - }, - { - name: 'COUNTING_MODE', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'string', internalType: 'string' }], - stateMutability: 'pure', - }, - { - name: 'ROLLBACK_DEADLINE', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, - { - name: '__acceptAdmin', - type: 'function', - inputs: [], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: '__executeRollback', - type: 'function', - inputs: [], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: '__rollback', - type: 'function', - inputs: [{ name: 'eta', type: 'uint256', internalType: 'uint256' }], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: 'cancel', - type: 'function', - inputs: [{ name: 'proposalId', type: 'uint256', internalType: 'uint256' }], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: 'castVote', - type: 'function', - inputs: [ - { name: 'proposalId', type: 'uint256', internalType: 'uint256' }, - { - name: 'support', - type: 'uint8', - internalType: 'uint8', - }, - ], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'nonpayable', - }, - { - name: 'castVoteBySig', - type: 'function', - inputs: [ - { name: 'proposalId', type: 'uint256', internalType: 'uint256' }, - { - name: 'support', - type: 'uint8', - internalType: 'uint8', - }, - { name: 'v', type: 'uint8', internalType: 'uint8' }, - { - name: 'r', - type: 'bytes32', - internalType: 'bytes32', - }, - { name: 's', type: 'bytes32', internalType: 'bytes32' }, - ], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'nonpayable', - }, - { - name: 'castVoteWithReason', - type: 'function', - inputs: [ - { name: 'proposalId', type: 'uint256', internalType: 'uint256' }, - { - name: 'support', - type: 'uint8', - internalType: 'uint8', - }, - { name: 'reason', type: 'string', internalType: 'string' }, - ], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'nonpayable', - }, - { - name: 'execute', - type: 'function', - inputs: [ - { name: 'targets', type: 'address[]', internalType: 'address[]' }, - { - name: 'values', - type: 'uint256[]', - internalType: 'uint256[]', - }, - { name: 'calldatas', type: 'bytes[]', internalType: 'bytes[]' }, - { - name: 'descriptionHash', - type: 'bytes32', - internalType: 'bytes32', - }, - ], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'payable', - }, - { - name: 'execute', - type: 'function', - inputs: [{ name: 'proposalId', type: 'uint256', internalType: 'uint256' }], - outputs: [], - stateMutability: 'payable', - }, - { - name: 'getActions', - type: 'function', - inputs: [{ name: 'proposalId', type: 'uint256', internalType: 'uint256' }], - outputs: [ - { name: 'targets', type: 'address[]', internalType: 'address[]' }, - { - name: 'values', - type: 'uint256[]', - internalType: 'uint256[]', - }, - { name: 'signatures', type: 'string[]', internalType: 'string[]' }, - { - name: 'calldatas', - type: 'bytes[]', - internalType: 'bytes[]', - }, - ], - stateMutability: 'view', - }, - { - name: 'getReceipt', - type: 'function', - inputs: [ - { name: 'proposalId', type: 'uint256', internalType: 'uint256' }, - { - name: 'voter', - type: 'address', - internalType: 'address', - }, - ], - outputs: [ - { - name: '', - type: 'tuple', - components: [ - { name: 'hasVoted', type: 'bool', internalType: 'bool' }, - { - name: 'support', - type: 'uint8', - internalType: 'uint8', - }, - { name: 'votes', type: 'uint96', internalType: 'uint96' }, - ], - internalType: 'struct IGovernorCompatibilityBravo.Receipt', - }, - ], - stateMutability: 'view', - }, - { - name: 'getVotes', - type: 'function', - inputs: [ - { name: 'account', type: 'address', internalType: 'address' }, - { - name: 'blockNumber', - type: 'uint256', - internalType: 'uint256', - }, - ], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, - { - name: 'hasVoted', - type: 'function', - inputs: [ - { name: 'proposalId', type: 'uint256', internalType: 'uint256' }, - { - name: 'account', - type: 'address', - internalType: 'address', - }, - ], - outputs: [{ name: '', type: 'bool', internalType: 'bool' }], - stateMutability: 'view', - }, - { - name: 'hashProposal', - type: 'function', - inputs: [ - { name: 'targets', type: 'address[]', internalType: 'address[]' }, - { - name: 'values', - type: 'uint256[]', - internalType: 'uint256[]', - }, - { name: 'calldatas', type: 'bytes[]', internalType: 'bytes[]' }, - { - name: 'descriptionHash', - type: 'bytes32', - internalType: 'bytes32', - }, - ], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'pure', - }, - { - name: 'name', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'string', internalType: 'string' }], - stateMutability: 'view', - }, - { - name: 'proposalDeadline', - type: 'function', - inputs: [{ name: 'proposalId', type: 'uint256', internalType: 'uint256' }], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, - { - name: 'proposalEta', - type: 'function', - inputs: [{ name: 'proposalId', type: 'uint256', internalType: 'uint256' }], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, - { - name: 'proposalSnapshot', - type: 'function', - inputs: [{ name: 'proposalId', type: 'uint256', internalType: 'uint256' }], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, - { - name: 'proposalThreshold', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, - { - name: 'proposals', - type: 'function', - inputs: [{ name: 'proposalId', type: 'uint256', internalType: 'uint256' }], - outputs: [ - { name: 'id', type: 'uint256', internalType: 'uint256' }, - { - name: 'proposer', - type: 'address', - internalType: 'address', - }, - { name: 'eta', type: 'uint256', internalType: 'uint256' }, - { - name: 'startBlock', - type: 'uint256', - internalType: 'uint256', - }, - { name: 'endBlock', type: 'uint256', internalType: 'uint256' }, - { - name: 'forVotes', - type: 'uint256', - internalType: 'uint256', - }, - { name: 'againstVotes', type: 'uint256', internalType: 'uint256' }, - { - name: 'abstainVotes', - type: 'uint256', - internalType: 'uint256', - }, - { name: 'canceled', type: 'bool', internalType: 'bool' }, - { - name: 'executed', - type: 'bool', - internalType: 'bool', - }, - ], - stateMutability: 'view', - }, - { - name: 'propose', - type: 'function', - inputs: [ - { name: 'targets', type: 'address[]', internalType: 'address[]' }, - { - name: 'values', - type: 'uint256[]', - internalType: 'uint256[]', - }, - { name: 'calldatas', type: 'bytes[]', internalType: 'bytes[]' }, - { - name: 'description', - type: 'string', - internalType: 'string', - }, - ], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'nonpayable', - }, - { - name: 'propose', - type: 'function', - inputs: [ - { name: 'targets', type: 'address[]', internalType: 'address[]' }, - { - name: 'values', - type: 'uint256[]', - internalType: 'uint256[]', - }, - { name: 'signatures', type: 'string[]', internalType: 'string[]' }, - { - name: 'calldatas', - type: 'bytes[]', - internalType: 'bytes[]', - }, - { name: 'description', type: 'string', internalType: 'string' }, - ], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'nonpayable', - }, - { - name: 'queue', - type: 'function', - inputs: [ - { name: 'targets', type: 'address[]', internalType: 'address[]' }, - { - name: 'values', - type: 'uint256[]', - internalType: 'uint256[]', - }, - { name: 'calldatas', type: 'bytes[]', internalType: 'bytes[]' }, - { - name: 'descriptionHash', - type: 'bytes32', - internalType: 'bytes32', - }, - ], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'nonpayable', - }, - { - name: 'queue', - type: 'function', - inputs: [{ name: 'proposalId', type: 'uint256', internalType: 'uint256' }], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: 'quorum', - type: 'function', - inputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, - { - name: 'quorumVotes', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, - { - name: 'setProposalThreshold', - type: 'function', - inputs: [ - { - name: 'newProposalThreshold', - type: 'uint256', - internalType: 'uint256', - }, - ], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: 'setQuorum', - type: 'function', - inputs: [{ name: 'newQuorum', type: 'uint256', internalType: 'uint256' }], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: 'setVotingDelay', - type: 'function', - inputs: [ - { name: 'newVotingDelay', type: 'uint256', internalType: 'uint256' }, - ], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: 'setVotingPeriod', - type: 'function', - inputs: [ - { name: 'newVotingPeriod', type: 'uint256', internalType: 'uint256' }, - ], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: 'state', - type: 'function', - inputs: [{ name: 'proposalId', type: 'uint256', internalType: 'uint256' }], - outputs: [ - { name: '', type: 'uint8', internalType: 'enum IGovernor.ProposalState' }, - ], - stateMutability: 'view', - }, - { - name: 'supportsInterface', - type: 'function', - inputs: [{ name: 'interfaceId', type: 'bytes4', internalType: 'bytes4' }], - outputs: [{ name: '', type: 'bool', internalType: 'bool' }], - stateMutability: 'view', - }, - { - name: 'timelock', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'address', internalType: 'address' }], - stateMutability: 'view', - }, - { - name: 'token', - type: 'function', - inputs: [], - outputs: [ - { name: '', type: 'address', internalType: 'contract ERC20VotesComp' }, - ], - stateMutability: 'view', - }, - { - name: 'updateTimelock', - type: 'function', - inputs: [ - { - name: 'newTimelock', - type: 'address', - internalType: 'contract ICompoundTimelock', - }, - ], - outputs: [], - stateMutability: 'nonpayable', - }, - { - name: 'version', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'string', internalType: 'string' }], - stateMutability: 'view', - }, - { - name: 'votingDelay', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, - { - name: 'votingPeriod', - type: 'function', - inputs: [], - outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], - stateMutability: 'view', - }, -]; - -export const rawDydxAbi = [ - { - inputs: [ - { - internalType: 'address', - name: 'governanceStrategy', - type: 'address', - }, - { - internalType: 'uint256', - name: 'votingDelay', - type: 'uint256', - }, - { - internalType: 'address', - name: 'addExecutorAdmin', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'executor', - type: 'address', - }, - ], - name: 'ExecutorAuthorized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'executor', - type: 'address', - }, - ], - name: 'ExecutorUnauthorized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'newStrategy', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorChange', - type: 'address', - }, - ], - name: 'GovernanceStrategyChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - ], - name: 'ProposalCanceled', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'creator', - type: 'address', - }, - { - indexed: true, - internalType: 'contract IExecutorWithTimelock', - name: 'executor', - type: 'address', - }, - { - indexed: false, - internalType: 'address[]', - name: 'targets', - type: 'address[]', - }, - { - indexed: false, - internalType: 'uint256[]', - name: 'values', - type: 'uint256[]', - }, - { - indexed: false, - internalType: 'string[]', - name: 'signatures', - type: 'string[]', - }, - { - indexed: false, - internalType: 'bytes[]', - name: 'calldatas', - type: 'bytes[]', - }, - { - indexed: false, - internalType: 'bool[]', - name: 'withDelegatecalls', - type: 'bool[]', - }, - { - indexed: false, - internalType: 'uint256', - name: 'startBlock', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'endBlock', - type: 'uint256', - }, - { - indexed: false, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'ipfsHash', - type: 'bytes32', - }, - ], - name: 'ProposalCreated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorExecution', - type: 'address', - }, - ], - name: 'ProposalExecuted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'executionTime', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorQueueing', - type: 'address', - }, - ], - name: 'ProposalQueued', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'previousAdminRole', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'newAdminRole', - type: 'bytes32', - }, - ], - name: 'RoleAdminChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleGranted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleRevoked', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'voter', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'support', - type: 'bool', - }, - { - indexed: false, - internalType: 'uint256', - name: 'votingPower', - type: 'uint256', - }, - ], - name: 'VoteEmitted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'newVotingDelay', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorChange', - type: 'address', - }, - ], - name: 'VotingDelayChanged', - type: 'event', - }, - { - inputs: [], - name: 'ADD_EXECUTOR_ROLE', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'DEFAULT_ADMIN_ROLE', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'DOMAIN_TYPEHASH', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'EIP712_DOMAIN_NAME', - outputs: [{ internalType: 'string', name: '', type: 'string' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'OWNER_ROLE', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'VOTE_EMITTED_TYPEHASH', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address[]', - name: 'executors', - type: 'address[]', - }, - ], - name: 'authorizeExecutors', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'cancel', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'contract IExecutorWithTimelock', - name: 'executor', - type: 'address', - }, - { - internalType: 'address[]', - name: 'targets', - type: 'address[]', - }, - { - internalType: 'uint256[]', - name: 'values', - type: 'uint256[]', - }, - { - internalType: 'string[]', - name: 'signatures', - type: 'string[]', - }, - { - internalType: 'bytes[]', - name: 'calldatas', - type: 'bytes[]', - }, - { - internalType: 'bool[]', - name: 'withDelegatecalls', - type: 'bool[]', - }, - { - internalType: 'bytes32', - name: 'ipfsHash', - type: 'bytes32', - }, - ], - name: 'create', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'execute', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'getGovernanceStrategy', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'getProposalById', - outputs: [ - { - components: [ - { - internalType: 'uint256', - name: 'id', - type: 'uint256', - }, - { - internalType: 'address', - name: 'creator', - type: 'address', - }, - { - internalType: 'contract IExecutorWithTimelock', - name: 'executor', - type: 'address', - }, - { - internalType: 'address[]', - name: 'targets', - type: 'address[]', - }, - { - internalType: 'uint256[]', - name: 'values', - type: 'uint256[]', - }, - { - internalType: 'string[]', - name: 'signatures', - type: 'string[]', - }, - { - internalType: 'bytes[]', - name: 'calldatas', - type: 'bytes[]', - }, - { - internalType: 'bool[]', - name: 'withDelegatecalls', - type: 'bool[]', - }, - { - internalType: 'uint256', - name: 'startBlock', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'endBlock', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'executionTime', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'forVotes', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'againstVotes', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'executed', - type: 'bool', - }, - { - internalType: 'bool', - name: 'canceled', - type: 'bool', - }, - { - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - internalType: 'bytes32', - name: 'ipfsHash', - type: 'bytes32', - }, - ], - internalType: 'struct IDydxGovernor.ProposalWithoutVotes', - name: '', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'getProposalState', - outputs: [ - { - internalType: 'enum IDydxGovernor.ProposalState', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getProposalsCount', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [{ internalType: 'bytes32', name: 'role', type: 'bytes32' }], - name: 'getRoleAdmin', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - { internalType: 'address', name: 'voter', type: 'address' }, - ], - name: 'getVoteOnProposal', - outputs: [ - { - components: [ - { - internalType: 'bool', - name: 'support', - type: 'bool', - }, - { - internalType: 'uint248', - name: 'votingPower', - type: 'uint248', - }, - ], - internalType: 'struct IDydxGovernor.Vote', - name: '', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getVotingDelay', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'grantRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'hasRole', - outputs: [{ internalType: 'bool', name: '', type: 'bool' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'executor', - type: 'address', - }, - ], - name: 'isExecutorAuthorized', - outputs: [{ internalType: 'bool', name: '', type: 'bool' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - ], - name: 'queue', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'renounceRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'revokeRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'governanceStrategy', - type: 'address', - }, - ], - name: 'setGovernanceStrategy', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'votingDelay', - type: 'uint256', - }, - ], - name: 'setVotingDelay', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - { internalType: 'bool', name: 'support', type: 'bool' }, - ], - name: 'submitVote', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - { internalType: 'bool', name: 'support', type: 'bool' }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { internalType: 'bytes32', name: 'r', type: 'bytes32' }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'submitVoteBySignature', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes4', - name: 'interfaceId', - type: 'bytes4', - }, - ], - name: 'supportsInterface', - outputs: [{ internalType: 'bool', name: '', type: 'bool' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address[]', - name: 'executors', - type: 'address[]', - }, - ], - name: 'unauthorizeExecutors', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, -]; diff --git a/packages/commonwealth/test/devnet/evm/evmChainEvents/evmChainEvents.spec.ts b/packages/commonwealth/test/devnet/evm/evmChainEvents.spec.ts similarity index 98% rename from packages/commonwealth/test/devnet/evm/evmChainEvents/evmChainEvents.spec.ts rename to packages/commonwealth/test/devnet/evm/evmChainEvents.spec.ts index bac03b5f77f..7d1e30252de 100644 --- a/packages/commonwealth/test/devnet/evm/evmChainEvents/evmChainEvents.spec.ts +++ b/packages/commonwealth/test/devnet/evm/evmChainEvents.spec.ts @@ -4,6 +4,7 @@ import { CommunityStake, communityStakesAbi, getAnvil, + localRpc, NamespaceFactory, namespaceFactoryAbi, } from '@hicommonwealth/evm-testing'; @@ -27,14 +28,12 @@ import { getLogs, getProvider, parseLogs, -} from '../../../../server/workers/evmChainEvents/logProcessing'; -import { startEvmPolling } from '../../../../server/workers/evmChainEvents/startEvmPolling'; +} from '../../../server/workers/evmChainEvents/logProcessing'; +import { startEvmPolling } from '../../../server/workers/evmChainEvents/startEvmPolling'; import { ContractSources, EvmSource, -} from '../../../../server/workers/evmChainEvents/types'; - -const localRpc = 'http://localhost:8545'; +} from '../../../server/workers/evmChainEvents/types'; const namespaceDeployedLog = { address: '0xd8a357847caba76133d5f2cb51317d3c74609710', diff --git a/packages/commonwealth/test/devnet/evm/evmChainEvents/util.ts b/packages/commonwealth/test/devnet/evm/evmChainEvents/util.ts deleted file mode 100644 index 6745f8b3d7e..00000000000 --- a/packages/commonwealth/test/devnet/evm/evmChainEvents/util.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const localRpc = 'http://localhost:8545'; - -export const compoundPropCreatedSignature = - '0x7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0'; -export const compoundPropQueuedSignature = - '0x9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892'; diff --git a/packages/commonwealth/test/integration/evmChainEvents/util.ts b/packages/commonwealth/test/integration/evmChainEvents/util.ts index af6d732a6fd..ff8f3575616 100644 --- a/packages/commonwealth/test/integration/evmChainEvents/util.ts +++ b/packages/commonwealth/test/integration/evmChainEvents/util.ts @@ -1,5 +1,6 @@ import { communityStakesAbi, + localRpc, namespaceFactoryAbi, } from '@hicommonwealth/evm-testing'; import { @@ -9,214 +10,7 @@ import { hashAbi, models, } from '@hicommonwealth/model'; -import { - BalanceType, - ChainBase, - ChainNetwork, - ChainType, - commonProtocol, -} from '@hicommonwealth/shared'; -import { - rawCompoundAbi, - rawDydxAbi, -} from '../../../server/workers/evmChainEvents/hardCodedAbis'; -import { - compoundPropCreatedSignature, - compoundPropQueuedSignature, - localRpc, -} from '../../devnet/evm/evmChainEvents/util'; - -export const testChainId = 'compound-test'; -export const testChainIdV2 = 'dydx-test'; -export const testAbiNickname = 'NamespaceFactory'; -export const testAbiNicknameV2 = 'CommunityStakes'; - -export async function getTestChainNode(version?: 'v1' | 'v2') { - let url = localRpc; - let name = 'Local Base Sepolia'; - let eth_chain_id = commonProtocol.ValidChains.SepoliaBase; - - if (version === 'v2') { - url = 'http://localhost:8546'; - name = 'Local Ethereum Sepolia'; - eth_chain_id = commonProtocol.ValidChains.Sepolia; - } - - const chainNode = await models.ChainNode.findOne({ - where: { - eth_chain_id: eth_chain_id, - }, - }); - - if (chainNode) { - chainNode.url = url; - chainNode.name = name; - chainNode.balance_type = BalanceType.Ethereum; - await chainNode.save(); - return chainNode; - } - - return await models.ChainNode.create({ - url, - balance_type: BalanceType.Ethereum, - name, - eth_chain_id, - }); -} - -export async function getTestCommunity(version?: 'v1' | 'v2') { - const chainNode = await getTestChainNode(version); - - let chainId: string, name: string, defaultSymbol: string; - if (!version || version === 'v1') { - chainId = testChainId; - name = 'Compound Test'; - defaultSymbol = 'COW'; - } else { - chainId = testChainIdV2; - name = 'DyDx Test'; - defaultSymbol = 'DYDX'; - } - - const [chain, created] = await models.Community.findOrCreate({ - where: { - id: chainId, - chain_node_id: chainNode.id, - }, - // @ts-expect-error StrictNullChecks - defaults: { - name, - network: ChainNetwork.Compound, - type: ChainType.Chain, - base: ChainBase.Ethereum, - default_symbol: defaultSymbol, - }, - }); - - if ( - (!created && chain.network !== ChainNetwork.Compound) || - chain.type !== ChainType.Chain || - chain.base !== ChainBase.Ethereum - ) { - await chain.update({ - network: ChainNetwork.Compound, - type: ChainType.Chain, - base: ChainBase.Ethereum, - }); - } - - return chain; -} - -export async function getTestAbi(version?: 'v1' | 'v2') { - let hash: string, nickname: string; - if (!version || version === 'v1') { - hash = hashAbi(namespaceFactoryAbi); - nickname = testAbiNickname; - } else { - hash = hashAbi(communityStakesAbi); - nickname = testAbiNicknameV2; - } - const existingAbi = await models.ContractAbi.findOne({ - where: { - abi_hash: hash, - nickname, - }, - }); - - if (existingAbi) return existingAbi; - - return await models.ContractAbi.create({ - abi: !version || version === 'v1' ? rawCompoundAbi : rawDydxAbi, - nickname: nickname, - abi_hash: hash, - }); -} - -export async function getTestContract(version?: 'v1' | 'v2') { - const chainNode = await getTestChainNode(version); - - let address: string; - if (!version || version === 'v1') { - address = commonProtocol.factoryContracts[chainNode.eth_chain_id!].factory; - } else { - address = - commonProtocol.factoryContracts[chainNode.eth_chain_id!].communityStake; - } - - const [contract] = await models.Contract.findOrCreate({ - where: { - address, - chain_node_id: chainNode.id!, - type: 'erc20', - }, - }); - - return contract; -} - -export async function getTestCommunityContract(version?: 'v1' | 'v2') { - const contract = await getTestContract(version); - const chain = await getTestCommunity(version); - - const [communityContract] = await models.CommunityContract.findOrCreate({ - where: { - community_id: chain.id, - contract_id: contract.id, - }, - }); - - communityContract.Contract = contract; - return communityContract; -} - -export async function getTestUser() { - const [user] = await models.User.findOrCreate({ - where: { - email: 'test@gmail.com', - profile: {}, - }, - }); - - return user; -} - -export async function getTestSignatures(version?: 'v1' | 'v2') { - const chainNode = await getTestChainNode(version); - const abi = await getTestAbi(version); - - let contractAddress: string; - if (!version || version === 'v1') { - contractAddress = - commonProtocol.factoryContracts[chainNode.eth_chain_id!].factory; - } else { - contractAddress = - commonProtocol.factoryContracts[chainNode.eth_chain_id!].communityStake; - } - - // signatures are the same for v1 and v2 - const [es1] = await models.EvmEventSource.findOrCreate({ - where: { - chain_node_id: chainNode.id!, - contract_address: contractAddress, - event_signature: compoundPropCreatedSignature, - kind: 'proposal-created', - abi_id: abi.id, - }, - }); - - const [es2] = await models.EvmEventSource.findOrCreate({ - where: { - chain_node_id: chainNode.id!, - contract_address: contractAddress, - event_signature: compoundPropQueuedSignature, - kind: 'proposal-queued', - abi_id: abi.id, - }, - }); - - return [es1, es2]; -} +import { BalanceType, commonProtocol } from '@hicommonwealth/shared'; const namespaceDeployedSignature = '0x8870ba2202802ce285ce6bead5ac915b6dc2d35c8a9d6f96fa56de9de12829d5'; From 96782be49e93f4146da2feadb6a8fcc64d11f825 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 21:06:26 +0300 Subject: [PATCH 075/425] remove eth types from chains lib --- libs/chains/hardhat.config.ts | 84 - libs/chains/package.json | 22 +- libs/chains/src/eth/README.md | 40 - libs/chains/src/eth/TESTING.md | 38 - .../dependencies/open-zeppelin/Address.sol | 60 - .../BaseAdminUpgradeabilityProxy.sol | 125 - .../open-zeppelin/BaseUpgradeabilityProxy.sol | 63 - .../dependencies/open-zeppelin/Context.sol | 23 - .../InitializableAdminUpgradeabilityProxy.sol | 42 - .../InitializableUpgradeabilityProxy.sol | 29 - .../dependencies/open-zeppelin/Ownable.sol | 68 - .../AAVE/dependencies/open-zeppelin/Proxy.sol | 70 - .../dependencies/open-zeppelin/SafeMath.sol | 163 -- .../open-zeppelin/UpgradeabilityProxy.sol | 27 - .../AAVE/governance/AaveGovernanceV2.sol | 500 ---- .../contracts/AAVE/governance/Executor.sol | 31 - .../AAVE/governance/ExecutorWithTimelock.sol | 287 -- .../AAVE/governance/GovernanceStrategy.sol | 95 - .../AAVE/governance/ProposalValidator.sol | 196 -- .../AAVE/interfaces/IAaveGovernanceV2.sol | 270 -- .../eth/contracts/AAVE/interfaces/IERC20.sol | 9 - .../AAVE/interfaces/IExecutorWithTimelock.sol | 185 -- .../IGovernancePowerDelegationToken.sol | 38 - .../AAVE/interfaces/IGovernanceStrategy.sol | 32 - .../AAVE/interfaces/IProposalValidator.sol | 132 - .../AAVE/interfaces/IVotingStrategy.sol | 7 - .../AAVE/misc/GovernanceV2Helper.sol | 106 - .../src/eth/contracts/AAVE/misc/Helpers.sol | 24 - .../misc/interfaces/IGovernanceV2Helper.sol | 65 - .../contracts/AAVE/mocks/AaveTokenV1Mock.sol | 32 - .../contracts/AAVE/mocks/AaveTokenV2Mock.sol | 7 - .../eth/contracts/AAVE/mocks/FlashAttacks.sol | 49 - .../AAVE/mocks/SelfdestructTransfer.sol | 8 - .../AAVE/mocks/interfaces/IERC20.sol | 17 - .../eth/contracts/Compound/ERC20VotesMock.sol | 21 - .../src/eth/contracts/Compound/FeiDao.sol | 206 -- .../eth/contracts/Compound/GovernorAlpha.sol | 547 ---- .../contracts/Compound/GovernorAlphaMock.sol | 547 ---- .../Compound/GovernorBravoDelegate.sol | 598 ---- .../Compound/GovernorBravoDelegateMock.sol | 378 --- .../Compound/GovernorBravoDelegator.sol | 79 - .../Compound/GovernorBravoImmutable.sol | 37 - .../Compound/GovernorBravoInterfaces.sol | 184 -- .../eth/contracts/Compound/GovernorMock.sol | 128 - .../src/eth/contracts/Compound/MPond.sol | 578 ---- .../src/eth/contracts/Compound/Timelock.sol | 206 -- .../eth/contracts/Compound/TimelockMock.sol | 211 -- .../src/eth/contracts/ERC1155Mintable.sol | 14 - .../src/eth/contracts/ERC721Mintable.sol | 11 - libs/chains/src/eth/contracts/Migrations.sol | 23 - .../src/eth/migrations/1_initial_migration.js | 6 - .../src/eth/migrations/2_deploy_contracts.js | 8 - libs/chains/src/eth/migrations/3_moloch_v1.js | 12 - .../chains/src/eth/scripts/build-contracts.sh | 2 - libs/chains/src/eth/scripts/deployAave.ts | 81 - libs/chains/src/eth/scripts/deployAlpha.ts | 45 - libs/chains/src/eth/scripts/deployBravo.ts | 49 - libs/chains/src/eth/scripts/deployErc20.ts | 30 - libs/chains/src/eth/scripts/deployErc721.ts | 30 - libs/chains/src/eth/scripts/deployOz.ts | 77 - libs/chains/src/eth/scripts/mineBlocks.ts | 34 - .../src/eth/types/AaveGovernanceV2.d.ts | 1764 ------------ libs/chains/src/eth/types/AaveToken.d.ts | 1194 -------- .../chains/src/eth/types/AaveTokenV1Mock.d.ts | 1184 -------- libs/chains/src/eth/types/AaveTokenV2.d.ts | 1881 ------------- .../chains/src/eth/types/AaveTokenV2Mock.d.ts | 1947 ------------- libs/chains/src/eth/types/AccessControl.d.ts | 526 ---- .../types/BaseAdminUpgradeabilityProxy.d.ts | 360 --- .../eth/types/BaseUpgradeabilityProxy.d.ts | 81 - libs/chains/src/eth/types/CompInterface.d.ts | 150 - libs/chains/src/eth/types/Context.d.ts | 72 - libs/chains/src/eth/types/ERC1155.d.ts | 712 ----- .../chains/src/eth/types/ERC1155Mintable.d.ts | 798 ------ libs/chains/src/eth/types/ERC165.d.ts | 139 - libs/chains/src/eth/types/ERC20.d.ts | 592 ---- libs/chains/src/eth/types/ERC20Permit.d.ts | 857 ------ libs/chains/src/eth/types/ERC20Votes.d.ts | 1377 --------- libs/chains/src/eth/types/ERC20VotesComp.d.ts | 1505 ---------- libs/chains/src/eth/types/ERC20VotesMock.d.ts | 1535 ---------- libs/chains/src/eth/types/ERC721.d.ts | 694 ----- libs/chains/src/eth/types/ERC721Mintable.d.ts | 840 ------ libs/chains/src/eth/types/ERC777.d.ts | 1185 -------- libs/chains/src/eth/types/Executor.d.ts | 1684 ----------- .../src/eth/types/ExecutorWithTimelock.d.ts | 947 ------- libs/chains/src/eth/types/FeiDAO.d.ts | 2473 ----------------- libs/chains/src/eth/types/FlashAttacks.d.ts | 413 --- .../types/GovernancePowerDelegationERC20.d.ts | 1145 -------- .../src/eth/types/GovernanceStrategy.d.ts | 383 --- .../src/eth/types/GovernanceV2Helper.d.ts | 1206 -------- libs/chains/src/eth/types/Governor.d.ts | 1235 -------- libs/chains/src/eth/types/GovernorAlpha.d.ts | 1636 ----------- .../src/eth/types/GovernorAlphaMock.d.ts | 1636 ----------- .../src/eth/types/GovernorBravoDelegate.d.ts | 2222 --------------- .../eth/types/GovernorBravoDelegateMock.d.ts | 2222 --------------- .../types/GovernorBravoDelegateStorageV1.d.ts | 619 ----- .../src/eth/types/GovernorBravoDelegator.d.ts | 364 --- .../types/GovernorBravoDelegatorStorage.d.ts | 164 -- .../src/eth/types/GovernorBravoEvents.d.ts | 214 -- .../src/eth/types/GovernorBravoImmutable.d.ts | 2261 --------------- .../eth/types/GovernorCompatibilityBravo.d.ts | 1905 ------------- .../src/eth/types/GovernorCountingSimple.d.ts | 1497 ---------- libs/chains/src/eth/types/GovernorMock.d.ts | 1848 ------------ .../eth/types/GovernorProposalThreshold.d.ts | 1266 --------- .../eth/types/GovernorTimelockCompound.d.ts | 1527 ---------- .../eth/types/GovernorTimelockControl.d.ts | 1482 ---------- libs/chains/src/eth/types/GovernorVotes.d.ts | 1258 --------- .../src/eth/types/GovernorVotesComp.d.ts | 1258 --------- .../types/GovernorVotesQuorumFraction.d.ts | 1389 --------- libs/chains/src/eth/types/GuildBank1.d.ts | 360 --- libs/chains/src/eth/types/GuildBank2.d.ts | 421 --- libs/chains/src/eth/types/Helper.d.ts | 72 - .../src/eth/types/IAaveGovernanceV2.d.ts | 1540 ---------- libs/chains/src/eth/types/IAccessControl.d.ts | 434 --- .../src/eth/types/ICompoundTimelock.d.ts | 756 ----- .../chains/src/eth/types/ICuratedProject.d.ts | 1312 --------- .../src/eth/types/ICuratedProjectFactory.d.ts | 960 ------- libs/chains/src/eth/types/IERC1155.d.ts | 671 ----- .../src/eth/types/IERC1155MetadataURI.d.ts | 709 ----- .../src/eth/types/IERC1155Receiver.d.ts | 340 --- libs/chains/src/eth/types/IERC165.d.ts | 139 - .../src/eth/types/IERC1820Registry.d.ts | 626 ----- libs/chains/src/eth/types/IERC20.d.ts | 454 --- libs/chains/src/eth/types/IERC20Metadata.d.ts | 523 ---- libs/chains/src/eth/types/IERC20Permit.d.ts | 279 -- libs/chains/src/eth/types/IERC721.d.ts | 697 ----- .../chains/src/eth/types/IERC721Metadata.d.ts | 793 ------ .../chains/src/eth/types/IERC721Receiver.d.ts | 172 -- libs/chains/src/eth/types/IERC777.d.ts | 854 ------ .../src/eth/types/IERC777Recipient.d.ts | 192 -- libs/chains/src/eth/types/IERC777Sender.d.ts | 192 -- .../src/eth/types/IExecutorWithTimelock.d.ts | 790 ------ .../IGovernancePowerDelegationToken.d.ts | 161 -- .../src/eth/types/IGovernanceStrategy.d.ts | 337 --- .../src/eth/types/IGovernanceV2Helper.d.ts | 1167 -------- libs/chains/src/eth/types/IGovernor.d.ts | 1204 -------- .../types/IGovernorCompatibilityBravo.d.ts | 1761 ------------ .../src/eth/types/IGovernorTimelock.d.ts | 1382 --------- libs/chains/src/eth/types/IProjectBase.d.ts | 778 ------ .../src/eth/types/IProjectBaseFactory.d.ts | 763 ----- .../src/eth/types/IProposalValidator.d.ts | 818 ------ libs/chains/src/eth/types/ITransferHook.d.ts | 159 -- .../chains/src/eth/types/IVotingStrategy.d.ts | 150 - ...InitializableAdminUpgradeabilityProxy.d.ts | 432 --- .../InitializableUpgradeabilityProxy.d.ts | 157 -- libs/chains/src/eth/types/MPond.d.ts | 1682 ----------- libs/chains/src/eth/types/MPondInterface.d.ts | 150 - libs/chains/src/eth/types/Migrations.d.ts | 250 -- libs/chains/src/eth/types/Ownable.d.ts | 221 -- .../src/eth/types/ProposalValidator.d.ts | 818 ------ libs/chains/src/eth/types/Proxy.d.ts | 72 - .../src/eth/types/SelfdestructTransfer.d.ts | 138 - libs/chains/src/eth/types/Timelock.d.ts | 842 ------ .../src/eth/types/TimelockController.d.ts | 1704 ------------ .../src/eth/types/TimelockInterface.d.ts | 537 ---- libs/chains/src/eth/types/TimelockMock.d.ts | 842 ------ libs/chains/src/eth/types/Token.d.ts | 592 ---- .../src/eth/types/UpgradeabilityProxy.d.ts | 81 - libs/chains/src/eth/types/commons.ts | 22 - .../factories/AaveGovernanceV2__factory.ts | 848 ------ .../factories/AaveTokenV1Mock__factory.ts | 550 ---- .../factories/AaveTokenV2Mock__factory.ts | 798 ------ .../types/factories/AaveTokenV2__factory.ts | 785 ------ .../eth/types/factories/AaveToken__factory.ts | 542 ---- .../types/factories/AccessControl__factory.ts | 225 -- .../BaseAdminUpgradeabilityProxy__factory.ts | 156 -- .../BaseUpgradeabilityProxy__factory.ts | 65 - .../types/factories/CompInterface__factory.ts | 47 - .../eth/types/factories/Context__factory.ts | 27 - .../factories/ERC1155Mintable__factory.ts | 388 --- .../eth/types/factories/ERC1155__factory.ts | 368 --- .../eth/types/factories/ERC165__factory.ts | 45 - .../types/factories/ERC20Permit__factory.ts | 366 --- .../factories/ERC20VotesComp__factory.ts | 646 ----- .../factories/ERC20VotesMock__factory.ts | 699 ----- .../types/factories/ERC20Votes__factory.ts | 603 ---- .../src/eth/types/factories/ERC20__factory.ts | 288 -- .../factories/ERC721Mintable__factory.ts | 392 --- .../eth/types/factories/ERC721__factory.ts | 352 --- .../eth/types/factories/ERC777__factory.ts | 670 ----- .../ExecutorWithTimelock__factory.ts | 591 ---- .../eth/types/factories/Executor__factory.ts | 890 ------ .../eth/types/factories/FeiDAO__factory.ts | 1190 -------- .../types/factories/FlashAttacks__factory.ts | 190 -- ...GovernancePowerDelegationERC20__factory.ts | 498 ---- .../factories/GovernanceStrategy__factory.ts | 180 -- .../factories/GovernanceV2Helper__factory.ts | 389 --- .../factories/GovernorAlphaMock__factory.ts | 725 ----- .../types/factories/GovernorAlpha__factory.ts | 725 ----- .../GovernorBravoDelegateMock__factory.ts | 1077 ------- ...GovernorBravoDelegateStorageV1__factory.ts | 287 -- .../GovernorBravoDelegate__factory.ts | 1077 ------- .../GovernorBravoDelegatorStorage__factory.ts | 95 - .../GovernorBravoDelegator__factory.ts | 450 --- .../factories/GovernorBravoEvents__factory.ts | 301 -- .../GovernorBravoImmutable__factory.ts | 1157 -------- .../GovernorCompatibilityBravo__factory.ts | 892 ------ .../GovernorCountingSimple__factory.ts | 644 ----- .../types/factories/GovernorMock__factory.ts | 926 ------ .../GovernorProposalThreshold__factory.ts | 577 ---- .../GovernorTimelockCompound__factory.ts | 688 ----- .../GovernorTimelockControl__factory.ts | 681 ----- .../factories/GovernorVotesComp__factory.ts | 573 ---- .../GovernorVotesQuorumFraction__factory.ts | 635 ----- .../types/factories/GovernorVotes__factory.ts | 573 ---- .../eth/types/factories/Governor__factory.ts | 560 ---- .../types/factories/GuildBank1__factory.ts | 199 -- .../types/factories/GuildBank2__factory.ts | 209 -- .../eth/types/factories/Helper__factory.ts | 47 - .../factories/IAaveGovernanceV2__factory.ts | 682 ----- .../factories/IAccessControl__factory.ts | 193 -- .../factories/ICompoundTimelock__factory.ts | 266 -- .../ICuratedProjectFactory__factory.ts | 434 --- .../factories/ICuratedProject__factory.ts | 597 ---- .../factories/IERC1155MetadataURI__factory.ts | 332 --- .../factories/IERC1155Receiver__factory.ts | 117 - .../eth/types/factories/IERC1155__factory.ts | 313 --- .../eth/types/factories/IERC165__factory.ts | 42 - .../factories/IERC1820Registry__factory.ts | 250 -- .../types/factories/IERC20Permit__factory.ts | 96 - .../eth/types/factories/IERC20__factory.ts | 213 -- .../factories/IERC721Receiver__factory.ts | 57 - .../eth/types/factories/IERC721__factory.ts | 326 --- .../factories/IERC777Recipient__factory.ts | 61 - .../types/factories/IERC777Sender__factory.ts | 61 - .../eth/types/factories/IERC777__factory.ts | 438 --- .../IExecutorWithTimelock__factory.ts | 470 ---- ...GovernancePowerDelegationToken__factory.ts | 54 - .../factories/IGovernanceStrategy__factory.ts | 107 - .../factories/IGovernanceV2Helper__factory.ts | 353 --- .../IGovernorCompatibilityBravo__factory.ts | 794 ------ .../factories/IGovernorTimelock__factory.ts | 632 ----- .../eth/types/factories/IGovernor__factory.ts | 547 ---- .../factories/IProjectBaseFactory__factory.ts | 363 --- .../types/factories/IProjectBase__factory.ts | 360 --- .../factories/IProposalValidator__factory.ts | 288 -- .../types/factories/ITransferHook__factory.ts | 44 - .../factories/IVotingStrategy__factory.ts | 45 - ...izableAdminUpgradeabilityProxy__factory.ts | 199 -- ...itializableUpgradeabilityProxy__factory.ts | 85 - .../factories/MPondInterface__factory.ts | 45 - .../src/eth/types/factories/MPond__factory.ts | 742 ----- .../types/factories/Migrations__factory.ts | 101 - .../eth/types/factories/Ownable__factory.ts | 100 - .../factories/ProposalValidator__factory.ts | 363 --- .../src/eth/types/factories/Proxy__factory.ts | 22 - .../SelfdestructTransfer__factory.ts | 61 - .../factories/TimelockController__factory.ts | 806 ------ .../factories/TimelockInterface__factory.ts | 198 -- .../types/factories/TimelockMock__factory.ts | 515 ---- .../eth/types/factories/Timelock__factory.ts | 511 ---- .../src/eth/types/factories/Token__factory.ts | 308 -- .../factories/UpgradeabilityProxy__factory.ts | 91 - libs/chains/src/eth/types/index.ts | 190 -- libs/chains/src/index.ts | 4 - libs/evm-testing/src/sdk/chainTesting.ts | 119 - libs/evm-testing/src/utils/abi/aaveGov.ts | 483 ---- libs/evm-testing/src/utils/abi/compGov.ts | 756 ----- libs/evm-testing/src/utils/contracts.ts | 10 - .../src/utils/governance/IGovernor.ts | 39 - .../src/utils/governance/aaveGov.ts | 199 -- .../src/utils/governance/compoundGov.ts | 226 -- libs/model/src/contest/Contests.projection.ts | 2 +- pnpm-lock.yaml | 1060 +------ 263 files changed, 6 insertions(+), 132889 deletions(-) delete mode 100644 libs/chains/hardhat.config.ts delete mode 100644 libs/chains/src/eth/README.md delete mode 100644 libs/chains/src/eth/TESTING.md delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Address.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/BaseAdminUpgradeabilityProxy.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/BaseUpgradeabilityProxy.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Context.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/InitializableAdminUpgradeabilityProxy.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/InitializableUpgradeabilityProxy.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Ownable.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Proxy.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/SafeMath.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/UpgradeabilityProxy.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/governance/AaveGovernanceV2.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/governance/Executor.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/governance/ExecutorWithTimelock.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/governance/GovernanceStrategy.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/governance/ProposalValidator.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/interfaces/IAaveGovernanceV2.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/interfaces/IERC20.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/interfaces/IExecutorWithTimelock.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/interfaces/IGovernancePowerDelegationToken.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/interfaces/IGovernanceStrategy.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/interfaces/IProposalValidator.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/interfaces/IVotingStrategy.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/misc/GovernanceV2Helper.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/misc/Helpers.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/misc/interfaces/IGovernanceV2Helper.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/mocks/AaveTokenV1Mock.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/mocks/AaveTokenV2Mock.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/mocks/FlashAttacks.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/mocks/SelfdestructTransfer.sol delete mode 100644 libs/chains/src/eth/contracts/AAVE/mocks/interfaces/IERC20.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/ERC20VotesMock.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/FeiDao.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/GovernorAlpha.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/GovernorAlphaMock.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/GovernorBravoDelegate.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/GovernorBravoDelegateMock.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/GovernorBravoDelegator.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/GovernorBravoImmutable.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/GovernorBravoInterfaces.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/GovernorMock.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/MPond.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/Timelock.sol delete mode 100644 libs/chains/src/eth/contracts/Compound/TimelockMock.sol delete mode 100644 libs/chains/src/eth/contracts/ERC1155Mintable.sol delete mode 100644 libs/chains/src/eth/contracts/ERC721Mintable.sol delete mode 100644 libs/chains/src/eth/contracts/Migrations.sol delete mode 100644 libs/chains/src/eth/migrations/1_initial_migration.js delete mode 100644 libs/chains/src/eth/migrations/2_deploy_contracts.js delete mode 100644 libs/chains/src/eth/migrations/3_moloch_v1.js delete mode 100755 libs/chains/src/eth/scripts/build-contracts.sh delete mode 100644 libs/chains/src/eth/scripts/deployAave.ts delete mode 100644 libs/chains/src/eth/scripts/deployAlpha.ts delete mode 100644 libs/chains/src/eth/scripts/deployBravo.ts delete mode 100644 libs/chains/src/eth/scripts/deployErc20.ts delete mode 100644 libs/chains/src/eth/scripts/deployErc721.ts delete mode 100644 libs/chains/src/eth/scripts/deployOz.ts delete mode 100644 libs/chains/src/eth/scripts/mineBlocks.ts delete mode 100644 libs/chains/src/eth/types/AaveGovernanceV2.d.ts delete mode 100644 libs/chains/src/eth/types/AaveToken.d.ts delete mode 100644 libs/chains/src/eth/types/AaveTokenV1Mock.d.ts delete mode 100644 libs/chains/src/eth/types/AaveTokenV2.d.ts delete mode 100644 libs/chains/src/eth/types/AaveTokenV2Mock.d.ts delete mode 100644 libs/chains/src/eth/types/AccessControl.d.ts delete mode 100644 libs/chains/src/eth/types/BaseAdminUpgradeabilityProxy.d.ts delete mode 100644 libs/chains/src/eth/types/BaseUpgradeabilityProxy.d.ts delete mode 100644 libs/chains/src/eth/types/CompInterface.d.ts delete mode 100644 libs/chains/src/eth/types/Context.d.ts delete mode 100644 libs/chains/src/eth/types/ERC1155.d.ts delete mode 100644 libs/chains/src/eth/types/ERC1155Mintable.d.ts delete mode 100644 libs/chains/src/eth/types/ERC165.d.ts delete mode 100644 libs/chains/src/eth/types/ERC20.d.ts delete mode 100644 libs/chains/src/eth/types/ERC20Permit.d.ts delete mode 100644 libs/chains/src/eth/types/ERC20Votes.d.ts delete mode 100644 libs/chains/src/eth/types/ERC20VotesComp.d.ts delete mode 100644 libs/chains/src/eth/types/ERC20VotesMock.d.ts delete mode 100644 libs/chains/src/eth/types/ERC721.d.ts delete mode 100644 libs/chains/src/eth/types/ERC721Mintable.d.ts delete mode 100644 libs/chains/src/eth/types/ERC777.d.ts delete mode 100644 libs/chains/src/eth/types/Executor.d.ts delete mode 100644 libs/chains/src/eth/types/ExecutorWithTimelock.d.ts delete mode 100644 libs/chains/src/eth/types/FeiDAO.d.ts delete mode 100644 libs/chains/src/eth/types/FlashAttacks.d.ts delete mode 100644 libs/chains/src/eth/types/GovernancePowerDelegationERC20.d.ts delete mode 100644 libs/chains/src/eth/types/GovernanceStrategy.d.ts delete mode 100644 libs/chains/src/eth/types/GovernanceV2Helper.d.ts delete mode 100644 libs/chains/src/eth/types/Governor.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorAlpha.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorAlphaMock.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorBravoDelegate.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorBravoDelegateMock.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorBravoDelegateStorageV1.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorBravoDelegator.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorBravoDelegatorStorage.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorBravoEvents.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorBravoImmutable.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorCompatibilityBravo.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorCountingSimple.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorMock.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorProposalThreshold.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorTimelockCompound.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorTimelockControl.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorVotes.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorVotesComp.d.ts delete mode 100644 libs/chains/src/eth/types/GovernorVotesQuorumFraction.d.ts delete mode 100644 libs/chains/src/eth/types/GuildBank1.d.ts delete mode 100644 libs/chains/src/eth/types/GuildBank2.d.ts delete mode 100644 libs/chains/src/eth/types/Helper.d.ts delete mode 100644 libs/chains/src/eth/types/IAaveGovernanceV2.d.ts delete mode 100644 libs/chains/src/eth/types/IAccessControl.d.ts delete mode 100644 libs/chains/src/eth/types/ICompoundTimelock.d.ts delete mode 100644 libs/chains/src/eth/types/ICuratedProject.d.ts delete mode 100644 libs/chains/src/eth/types/ICuratedProjectFactory.d.ts delete mode 100644 libs/chains/src/eth/types/IERC1155.d.ts delete mode 100644 libs/chains/src/eth/types/IERC1155MetadataURI.d.ts delete mode 100644 libs/chains/src/eth/types/IERC1155Receiver.d.ts delete mode 100644 libs/chains/src/eth/types/IERC165.d.ts delete mode 100644 libs/chains/src/eth/types/IERC1820Registry.d.ts delete mode 100644 libs/chains/src/eth/types/IERC20.d.ts delete mode 100644 libs/chains/src/eth/types/IERC20Metadata.d.ts delete mode 100644 libs/chains/src/eth/types/IERC20Permit.d.ts delete mode 100644 libs/chains/src/eth/types/IERC721.d.ts delete mode 100644 libs/chains/src/eth/types/IERC721Metadata.d.ts delete mode 100644 libs/chains/src/eth/types/IERC721Receiver.d.ts delete mode 100644 libs/chains/src/eth/types/IERC777.d.ts delete mode 100644 libs/chains/src/eth/types/IERC777Recipient.d.ts delete mode 100644 libs/chains/src/eth/types/IERC777Sender.d.ts delete mode 100644 libs/chains/src/eth/types/IExecutorWithTimelock.d.ts delete mode 100644 libs/chains/src/eth/types/IGovernancePowerDelegationToken.d.ts delete mode 100644 libs/chains/src/eth/types/IGovernanceStrategy.d.ts delete mode 100644 libs/chains/src/eth/types/IGovernanceV2Helper.d.ts delete mode 100644 libs/chains/src/eth/types/IGovernor.d.ts delete mode 100644 libs/chains/src/eth/types/IGovernorCompatibilityBravo.d.ts delete mode 100644 libs/chains/src/eth/types/IGovernorTimelock.d.ts delete mode 100644 libs/chains/src/eth/types/IProjectBase.d.ts delete mode 100644 libs/chains/src/eth/types/IProjectBaseFactory.d.ts delete mode 100644 libs/chains/src/eth/types/IProposalValidator.d.ts delete mode 100644 libs/chains/src/eth/types/ITransferHook.d.ts delete mode 100644 libs/chains/src/eth/types/IVotingStrategy.d.ts delete mode 100644 libs/chains/src/eth/types/InitializableAdminUpgradeabilityProxy.d.ts delete mode 100644 libs/chains/src/eth/types/InitializableUpgradeabilityProxy.d.ts delete mode 100644 libs/chains/src/eth/types/MPond.d.ts delete mode 100644 libs/chains/src/eth/types/MPondInterface.d.ts delete mode 100644 libs/chains/src/eth/types/Migrations.d.ts delete mode 100644 libs/chains/src/eth/types/Ownable.d.ts delete mode 100644 libs/chains/src/eth/types/ProposalValidator.d.ts delete mode 100644 libs/chains/src/eth/types/Proxy.d.ts delete mode 100644 libs/chains/src/eth/types/SelfdestructTransfer.d.ts delete mode 100644 libs/chains/src/eth/types/Timelock.d.ts delete mode 100644 libs/chains/src/eth/types/TimelockController.d.ts delete mode 100644 libs/chains/src/eth/types/TimelockInterface.d.ts delete mode 100644 libs/chains/src/eth/types/TimelockMock.d.ts delete mode 100644 libs/chains/src/eth/types/Token.d.ts delete mode 100644 libs/chains/src/eth/types/UpgradeabilityProxy.d.ts delete mode 100644 libs/chains/src/eth/types/commons.ts delete mode 100644 libs/chains/src/eth/types/factories/AaveGovernanceV2__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/AaveTokenV1Mock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/AaveTokenV2Mock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/AaveTokenV2__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/AaveToken__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/AccessControl__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/BaseAdminUpgradeabilityProxy__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/BaseUpgradeabilityProxy__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/CompInterface__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/Context__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC1155Mintable__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC1155__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC165__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC20Permit__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC20VotesComp__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC20VotesMock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC20Votes__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC20__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC721Mintable__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC721__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ERC777__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ExecutorWithTimelock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/Executor__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/FeiDAO__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/FlashAttacks__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernancePowerDelegationERC20__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernanceStrategy__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernanceV2Helper__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorAlphaMock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorAlpha__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorBravoDelegateMock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorBravoDelegateStorageV1__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorBravoDelegate__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorBravoDelegatorStorage__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorBravoDelegator__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorBravoEvents__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorBravoImmutable__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorCompatibilityBravo__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorCountingSimple__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorMock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorProposalThreshold__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorTimelockCompound__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorTimelockControl__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorVotesComp__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorVotesQuorumFraction__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GovernorVotes__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/Governor__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GuildBank1__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/GuildBank2__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/Helper__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IAaveGovernanceV2__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IAccessControl__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ICompoundTimelock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ICuratedProjectFactory__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ICuratedProject__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC1155MetadataURI__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC1155Receiver__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC1155__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC165__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC1820Registry__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC20Permit__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC20__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC721Receiver__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC721__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC777Recipient__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC777Sender__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IERC777__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IExecutorWithTimelock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IGovernancePowerDelegationToken__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IGovernanceStrategy__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IGovernanceV2Helper__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IGovernorCompatibilityBravo__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IGovernorTimelock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IGovernor__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IProjectBaseFactory__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IProjectBase__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IProposalValidator__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ITransferHook__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/IVotingStrategy__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/InitializableAdminUpgradeabilityProxy__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/InitializableUpgradeabilityProxy__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/MPondInterface__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/MPond__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/Migrations__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/Ownable__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/ProposalValidator__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/Proxy__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/SelfdestructTransfer__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/TimelockController__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/TimelockInterface__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/TimelockMock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/Timelock__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/Token__factory.ts delete mode 100644 libs/chains/src/eth/types/factories/UpgradeabilityProxy__factory.ts delete mode 100644 libs/chains/src/eth/types/index.ts delete mode 100644 libs/evm-testing/src/utils/abi/aaveGov.ts delete mode 100644 libs/evm-testing/src/utils/abi/compGov.ts delete mode 100644 libs/evm-testing/src/utils/governance/IGovernor.ts delete mode 100644 libs/evm-testing/src/utils/governance/aaveGov.ts delete mode 100644 libs/evm-testing/src/utils/governance/compoundGov.ts diff --git a/libs/chains/hardhat.config.ts b/libs/chains/hardhat.config.ts deleted file mode 100644 index 2d63ede110e..00000000000 --- a/libs/chains/hardhat.config.ts +++ /dev/null @@ -1,84 +0,0 @@ -// eslint-disable-next-line -import '@nomiclabs/hardhat-ethers'; -import 'hardhat-typechain'; -import type { HardhatUserConfig } from 'hardhat/types'; - -const config: HardhatUserConfig = { - networks: { - hardhat: { - allowUnlimitedContractSize: true, - loggingEnabled: true, - }, - }, - solidity: { - compilers: [ - { - version: '0.8.7', - settings: { - optimizer: { enabled: true, runs: 200 }, - evmVersion: 'istanbul', - }, - }, - { - version: '0.8.0', - settings: { - optimizer: { enabled: true, runs: 200 }, - evmVersion: 'istanbul', - }, - }, - { - version: '0.7.5', - settings: { - optimizer: { enabled: true, runs: 200 }, - evmVersion: 'istanbul', - }, - }, - { - version: '0.6.8', - settings: { - optimizer: { enabled: true, runs: 200 }, - evmVersion: 'istanbul', - }, - }, - { - version: '0.6.12', - settings: { - optimizer: { enabled: true, runs: 200 }, - evmVersion: 'istanbul', - }, - }, - { - version: '0.7.5', - settings: { - optimizer: { enabled: true, runs: 200 }, - evmVersion: 'istanbul', - }, - }, - { - version: '0.5.5', - settings: { - optimizer: { enabled: true, runs: 200 }, - evmVersion: 'petersburg', - }, - }, - { - version: '0.5.16', - settings: { - optimizer: { enabled: true, runs: 200 }, - evmVersion: 'istanbul', - }, - }, - ], - }, - paths: { - sources: './src/eth/contracts', - artifacts: './src/eth/artifacts', - cache: './src/eth/cache', - }, - typechain: { - outDir: './src/eth/types', - target: 'ethers-v5', - }, -}; - -export default config; diff --git a/libs/chains/package.json b/libs/chains/package.json index cbf5068a9c7..673a013cda6 100644 --- a/libs/chains/package.json +++ b/libs/chains/package.json @@ -25,33 +25,13 @@ "@cosmjs/proto-signing": "^0.31.3", "@cosmjs/stargate": "^0.31.3", "@cosmjs/tendermint-rpc": "^0.31.3", - "@ethersproject/abi": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/units": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", "@osmonauts/lcd": "^0.10.0", - "ethers": "5.7.2", "long": "^5.2.3", "moment": "^2.23.0", - "protobufjs": "^6.1.13", - "web3": "^4.7.0", - "web3-core": "^4.3.2", - "web3-utils": "^4.2.2" + "protobufjs": "^6.1.13" }, "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.2", - "@typechain/ethers-v5": "^6.0.0", "@types/moment": "^2.13.0", - "hardhat": "^2.3.0", - "hardhat-typechain": "^0.3.5", - "ts-generator": "^0.1.1", - "typechain": "^4.0.1", "tsx": "^4.7.2" } } diff --git a/libs/chains/src/eth/README.md b/libs/chains/src/eth/README.md deleted file mode 100644 index b666652b5d5..00000000000 --- a/libs/chains/src/eth/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# Commonwealth Ethereum Configuration - -## Compiling Contracts - -Build the solidity contracts via typechain using hardhat: - -```bash -commonwealth/shared/eth$ npx hardhat compile -``` - -## Aave Local Development - -Spin up a test chain in one terminal: - -```bash -commonwealth/shared/eth$ npx hardhat node -``` - -Deploy the contracts from another terminal: - -```bash -commonwealth/shared/eth$ npx hardhat run scripts/deployAave.ts --network localhost -``` - -Note that this will deploy slightly edited versions of the governance contracts with reduced voting and execution times, to permit easy testing. - -To advance blocks and timestamps (default 1 block): - -```bash -commonwealth/shared/eth$ tsx scripts/mineBlocks.ts -``` - -Mining occurs in a loop, so be careful of the argument size as it could take a long time to process. - -Reset your server and load the app: - -```bash -commonwealth$ pnpm reset-server -pnpm start -``` diff --git a/libs/chains/src/eth/TESTING.md b/libs/chains/src/eth/TESTING.md deleted file mode 100644 index 6b0c4167ae5..00000000000 --- a/libs/chains/src/eth/TESTING.md +++ /dev/null @@ -1,38 +0,0 @@ -## Testing Compound/OpenZeppelin Governance contracts on Commonwealth - -### Node Configuration - -The first step is to configure all necessary processes in order for Commonwealth to run. For this, we need an active hardhat chain with the requisite contract deployed on it, as well as a local chain events listener and commonwealth server. - -1. Run a local hardhat node from this directory (shared/eth), via `npx hardhat node`. -2. Decide which contract you want to test: alpha, bravo, or generic OZ governance. Run the corresponding script with `tsx scripts/deployAlpha.ts` (or deployBravo.ts or deployOz.ts depending which you decided to test). This will deploy the governance contract to the local node and print the address of the contract. -3. Select which chain you will be overriding for testing. It must already be a Compound chain. For this example, I will use **frax**, but you can use whichever you'd like. Simply edit the SQL commands as needed. Go into the database (`pnpm psql`) and edit the ChainNode of frax to use the hardhat url and address printed above (`UPDATE "ChainNodes" SET url = 'ws://localhost:8545', address = '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' WHERE chain = 'frax';`). If testing Alpha or Bravo, you will also need to set the token name to "comp" (`UPDATE "ChainNodes" SET token_name = 'comp' WHERE chain = 'frax';`), but on OZ you should set it to NULL instead (`UPDATE "ChainNodes" SET token_name = NULL WHERE chain = 'frax';`). -4. If running the test again after a previous test, you will need to remove prior ChainEvents from the database. Do this with the following SQL commands: `DELETE FROM "ChainEvents" WHERE chain_event_type_id LIKE 'frax%'; DELETE FROM "ChainEntities" WHERE chain = 'frax';` -5. Keeping the hardhat node up, open up two new terminals, both at the root of the Commonwealth directory. In the first, run the chain events listener via `CHAIN_EVENTS=frax pnpm listen`, and in the second run Commonwealth via `pnpm start`. These three should remain up until you've finished your testing process, but you will need to restart the hardhat node and chain events listener if you plan to switch to a different contract during testing. - -### Frontend Usage - -1. Load the frax page at http://localhost:8080/frax. -2. Configure metamask: - 1. If not already added, create a local chain via Settings -> Networks -> Add Network, at url http://localhost:8545 and chain id 31337. Ensure Metamask is set to use this chain. - 2. If not already added, Add a new address using the private key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80. Ensure this account (0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266) is selected. - 3. If the address already exists, reset its history using Settings -> Advanced -> Reset Account. - 4. Metamask should display slightly less than 10000 ETH for the test account. -3. Delegate to yourself via the "Delegate" page from the sidebar. Use the same address as displayed in Metamask (0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266) and you can enter any numeric value (it is ignored). - - On loading this page, verify in the console that it correctly detects the type of token and governance based on the contract deployed earlier. -4. Navigate to the "Proposals" page from the sidebar. It should display a few parameters and no proposals. -5. Click "New Proposal", and it should take you to the page to create a proposal. - a. Set whatever description you'd like. - b. Any acceptable target address will work (0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B). - c. Any value will work (0). - d. Any acceptable calldata will work (0x000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f40000000000000000000000000000000000000000000000000853a0d2313c0000). - e. Signature is optional and can be any string. -6. Click "Send Transaction" and then sign it on Metamask. -7. Navigate to the "Proposals" page again via the sidebar and the proposal should appear, as "Pending". -8. To advance the proposal to the voting stage, you will need to mine blocks. Open up a console window at "commonwealth/shared/eth" and run `tsx scripts/mineBlocks.ts 2`. This will mine 2 blocks and advance the timestamp accordingly. -9. Refresh the page to see the block update, as hardhat does not support websocket listening for ETH blocks. -10. Navigate into the proposal's page by clicking into it, and the voting options should be displayed. If you want to advance the proposal further, you should vote "YES". Sign the transaction via metamask. The vote should appear in the voting results panel. -11. After voting, advance the proposal to completion. Running `tsx scripts/mineBlocks.ts 8` should be sufficient. Refresh the page again. The proposal should appear as "Ready to queue". -12. Now, you should be able to click "Queue" on the proposal's page. Sign the transaction via metamask. The proposal should soon appear as "Queued". -13. Advance another few blocks (10 should work?). Refresh the page again. The "Execute" button should appear on the proposal. Click it and sign the transaction via metamask. THe proposal should appear as "Executed" and will no longer be displayed as Active on the proposals page. -14. You can repeat the above process to test calling Cancel, as well as other voting choices (No, Abstain). diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Address.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Address.sol deleted file mode 100644 index 4787d9a6706..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Address.sol +++ /dev/null @@ -1,60 +0,0 @@ -pragma solidity 0.7.5; - -/** - * @dev Collection of functions related to the address type - */ -library Address { - /** - * @dev Returns true if `account` is a contract. - * - * [IMPORTANT] - * ==== - * It is unsafe to assume that an address for which this function returns - * false is an externally-owned account (EOA) and not a contract. - * - * Among others, `isContract` will return false for the following - * types of addresses: - * - * - an externally-owned account - * - a contract in construction - * - an address where a contract will be created - * - an address where a contract lived, but was destroyed - * ==== - */ - function isContract(address account) internal view returns (bool) { - // According to EIP-1052, 0x0 is the value returned for not-yet created accounts - // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned - // for accounts without code, i.e. `keccak256('')` - bytes32 codehash; - bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; - // solhint-disable-next-line no-inline-assembly - assembly { - codehash := extcodehash(account) - } - return (codehash != accountHash && codehash != 0x0); - } - - /** - * @dev Replacement for Solidity's `transfer`: sends `amount` wei to - * `recipient`, forwarding all available gas and reverting on errors. - * - * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost - * of certain opcodes, possibly making contracts go over the 2300 gas limit - * imposed by `transfer`, making them unable to receive funds via - * `transfer`. {sendValue} removes this limitation. - * - * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. - * - * IMPORTANT: because control is transferred to `recipient`, care must be - * taken to not create reentrancy vulnerabilities. Consider using - * {ReentrancyGuard} or the - * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. - */ - function sendValue(address payable recipient, uint256 amount) internal { - require(address(this).balance >= amount, 'Address: insufficient balance'); - - // solhint-disable-next-line avoid-low-level-calls, avoid-call-value - (bool success, ) = recipient.call{value: amount}(''); - require(success, 'Address: unable to send value, recipient may have reverted'); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/BaseAdminUpgradeabilityProxy.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/BaseAdminUpgradeabilityProxy.sol deleted file mode 100644 index 74c9f0ed5ba..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/BaseAdminUpgradeabilityProxy.sol +++ /dev/null @@ -1,125 +0,0 @@ -pragma solidity 0.7.5; - -import './UpgradeabilityProxy.sol'; - -/** - * @title BaseAdminUpgradeabilityProxy - * @dev This contract combines an upgradeability proxy with an authorization - * mechanism for administrative tasks. - * All external functions in this contract must be guarded by the - * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity - * feature proposal that would enable this to be done automatically. - */ -contract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy { - /** - * @dev Emitted when the administration has been transferred. - * @param previousAdmin Address of the previous admin. - * @param newAdmin Address of the new admin. - */ - event AdminChanged(address previousAdmin, address newAdmin); - - /** - * @dev Storage slot with the admin of the contract. - * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is - * validated in the constructor. - */ - - bytes32 - internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; - - /** - * @dev Modifier to check whether the `msg.sender` is the admin. - * If it is, it will run the function. Otherwise, it will delegate the call - * to the implementation. - */ - modifier ifAdmin() { - if (msg.sender == _admin()) { - _; - } else { - _fallback(); - } - } - - /** - * @return The address of the proxy admin. - */ - function admin() external ifAdmin returns (address) { - return _admin(); - } - - /** - * @return The address of the implementation. - */ - function implementation() external ifAdmin returns (address) { - return _implementation(); - } - - /** - * @dev Changes the admin of the proxy. - * Only the current admin can call this function. - * @param newAdmin Address to transfer proxy administration to. - */ - function changeAdmin(address newAdmin) external ifAdmin { - require(newAdmin != address(0), 'Cannot change the admin of a proxy to the zero address'); - emit AdminChanged(_admin(), newAdmin); - _setAdmin(newAdmin); - } - - /** - * @dev Upgrade the backing implementation of the proxy. - * Only the admin can call this function. - * @param newImplementation Address of the new implementation. - */ - function upgradeTo(address newImplementation) external ifAdmin { - _upgradeTo(newImplementation); - } - - /** - * @dev Upgrade the backing implementation of the proxy and call a function - * on the new implementation. - * This is useful to initialize the proxied contract. - * @param newImplementation Address of the new implementation. - * @param data Data to send as msg.data in the low level call. - * It should include the signature and the parameters of the function to be called, as described in - * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. - */ - function upgradeToAndCall(address newImplementation, bytes calldata data) - external - payable - ifAdmin - { - _upgradeTo(newImplementation); - (bool success, ) = newImplementation.delegatecall(data); - require(success); - } - - /** - * @return adm The admin slot. - */ - function _admin() internal view returns (address adm) { - bytes32 slot = ADMIN_SLOT; - assembly { - adm := sload(slot) - } - } - - /** - * @dev Sets the address of the proxy admin. - * @param newAdmin Address of the new proxy admin. - */ - function _setAdmin(address newAdmin) internal { - bytes32 slot = ADMIN_SLOT; - - assembly { - sstore(slot, newAdmin) - } - } - - /** - * @dev Only fall back when the sender is not the admin. - */ - function _willFallback() internal virtual override { - require(msg.sender != _admin(), 'Cannot call fallback function from the proxy admin'); - super._willFallback(); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/BaseUpgradeabilityProxy.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/BaseUpgradeabilityProxy.sol deleted file mode 100644 index 1ef3e757fd3..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/BaseUpgradeabilityProxy.sol +++ /dev/null @@ -1,63 +0,0 @@ -pragma solidity 0.7.5; - -import './Proxy.sol'; -import './Address.sol'; - -/** - * @title BaseUpgradeabilityProxy - * @dev This contract implements a proxy that allows to change the - * implementation address to which it will delegate. - * Such a change is called an implementation upgrade. - */ -contract BaseUpgradeabilityProxy is Proxy { - /** - * @dev Emitted when the implementation is upgraded. - * @param implementation Address of the new implementation. - */ - event Upgraded(address indexed implementation); - - /** - * @dev Storage slot with the address of the current implementation. - * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is - * validated in the constructor. - */ - bytes32 - internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; - - /** - * @dev Returns the current implementation. - * @return impl Address of the current implementation - */ - function _implementation() internal override view returns (address impl) { - bytes32 slot = IMPLEMENTATION_SLOT; - assembly { - impl := sload(slot) - } - } - - /** - * @dev Upgrades the proxy to a new implementation. - * @param newImplementation Address of the new implementation. - */ - function _upgradeTo(address newImplementation) internal { - _setImplementation(newImplementation); - emit Upgraded(newImplementation); - } - - /** - * @dev Sets the implementation address of the proxy. - * @param newImplementation Address of the new implementation. - */ - function _setImplementation(address newImplementation) internal { - require( - Address.isContract(newImplementation), - 'Cannot set a proxy implementation to a non-contract address' - ); - - bytes32 slot = IMPLEMENTATION_SLOT; - - assembly { - sstore(slot, newImplementation) - } - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Context.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Context.sol deleted file mode 100644 index 19c265f4283..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Context.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.7.5; - -/* - * @dev Provides information about the current execution context, including the - * sender of the transaction and its data. While these are generally available - * via msg.sender and msg.data, they should not be accessed in such a direct - * manner, since when dealing with GSN meta-transactions the account sending and - * paying for execution may not be the actual sender (as far as an application - * is concerned). - * - * This contract is only required for intermediate, library-like contracts. - */ -abstract contract Context { - function _msgSender() internal view virtual returns (address payable) { - return msg.sender; - } - - function _msgData() internal view virtual returns (bytes memory) { - this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 - return msg.data; - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/InitializableAdminUpgradeabilityProxy.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/InitializableAdminUpgradeabilityProxy.sol deleted file mode 100644 index 4a5fb1a2685..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/InitializableAdminUpgradeabilityProxy.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; - -import './BaseAdminUpgradeabilityProxy.sol'; -import './InitializableUpgradeabilityProxy.sol'; - -/** - * @title InitializableAdminUpgradeabilityProxy - * @dev Extends from BaseAdminUpgradeabilityProxy with an initializer for - * initializing the implementation, admin, and init data. - */ -contract InitializableAdminUpgradeabilityProxy is - BaseAdminUpgradeabilityProxy, - InitializableUpgradeabilityProxy -{ - /** - * Contract initializer. - * @param _logic address of the initial implementation. - * @param _admin Address of the proxy administrator. - * @param _data Data to send as msg.data to the implementation to initialize the proxied contract. - * It should include the signature and the parameters of the function to be called, as described in - * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. - * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped. - */ - function initialize( - address _logic, - address _admin, - bytes memory _data - ) public payable { - require(_implementation() == address(0)); - InitializableUpgradeabilityProxy.initialize(_logic, _data); - assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)); - _setAdmin(_admin); - } - - /** - * @dev Only fall back when the sender is not the admin. - */ - function _willFallback() internal override(BaseAdminUpgradeabilityProxy, Proxy) { - BaseAdminUpgradeabilityProxy._willFallback(); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/InitializableUpgradeabilityProxy.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/InitializableUpgradeabilityProxy.sol deleted file mode 100644 index 563f33f811b..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/InitializableUpgradeabilityProxy.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; - -import './BaseUpgradeabilityProxy.sol'; - -/** - * @title InitializableUpgradeabilityProxy - * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing - * implementation and init data. - */ -contract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy { - /** - * @dev Contract initializer. - * @param _logic Address of the initial implementation. - * @param _data Data to send as msg.data to the implementation to initialize the proxied contract. - * It should include the signature and the parameters of the function to be called, as described in - * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. - * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped. - */ - function initialize(address _logic, bytes memory _data) public payable { - require(_implementation() == address(0)); - assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)); - _setImplementation(_logic); - if (_data.length > 0) { - (bool success, ) = _logic.delegatecall(_data); - require(success); - } - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Ownable.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Ownable.sol deleted file mode 100644 index 26e37f785fc..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Ownable.sol +++ /dev/null @@ -1,68 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.7.5; - -import './Context.sol'; - -/** - * @dev Contract module which provides a basic access control mechanism, where - * there is an account (an owner) that can be granted exclusive access to - * specific functions. - * - * By default, the owner account will be the one that deploys the contract. This - * can later be changed with {transferOwnership}. - * - * This module is used through inheritance. It will make available the modifier - * `onlyOwner`, which can be applied to your functions to restrict their use to - * the owner. - */ -contract Ownable is Context { - address private _owner; - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - /** - * @dev Initializes the contract setting the deployer as the initial owner. - */ - constructor() { - address msgSender = _msgSender(); - _owner = msgSender; - emit OwnershipTransferred(address(0), msgSender); - } - - /** - * @dev Returns the address of the current owner. - */ - function owner() public view returns (address) { - return _owner; - } - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(_owner == _msgSender(), 'Ownable: caller is not the owner'); - _; - } - - /** - * @dev Leaves the contract without owner. It will not be possible to call - * `onlyOwner` functions anymore. Can only be called by the current owner. - * - * NOTE: Renouncing ownership will leave the contract without an owner, - * thereby removing any functionality that is only available to the owner. - */ - function renounceOwnership() public virtual onlyOwner { - emit OwnershipTransferred(_owner, address(0)); - _owner = address(0); - } - - /** - * @dev Transfers ownership of the contract to a new account (`newOwner`). - * Can only be called by the current owner. - */ - function transferOwnership(address newOwner) public virtual onlyOwner { - require(newOwner != address(0), 'Ownable: new owner is the zero address'); - emit OwnershipTransferred(_owner, newOwner); - _owner = newOwner; - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Proxy.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Proxy.sol deleted file mode 100644 index 83b0bf6958c..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/Proxy.sol +++ /dev/null @@ -1,70 +0,0 @@ -pragma solidity 0.7.5; - -/** - * @title Proxy - * @dev Implements delegation of calls to other contracts, with proper - * forwarding of return values and bubbling of failures. - * It defines a fallback function that delegates all calls to the address - * returned by the abstract _implementation() internal function. - */ -abstract contract Proxy { - /** - * @dev Fallback function. - * Implemented entirely in `_fallback`. - */ - fallback() external payable { - _fallback(); - } - - /** - * @return The Address of the implementation. - */ - function _implementation() internal virtual view returns (address); - - /** - * @dev Delegates execution to an implementation contract. - * This is a low level function that doesn't return to its internal call site. - * It will return to the external caller whatever the implementation returns. - * @param implementation Address to delegate. - */ - function _delegate(address implementation) internal { - assembly { - // Copy msg.data. We take full control of memory in this inline assembly - // block because it will not return to Solidity code. We overwrite the - // Solidity scratch pad at memory position 0. - calldatacopy(0, 0, calldatasize()) - - // Call the implementation. - // out and outsize are 0 because we don't know the size yet. - let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) - - // Copy the returned data. - returndatacopy(0, 0, returndatasize()) - - switch result - // delegatecall returns 0 on error. - case 0 { - revert(0, returndatasize()) - } - default { - return(0, returndatasize()) - } - } - } - - /** - * @dev Function that is run as the first thing in the fallback function. - * Can be redefined in derived contracts to add functionality. - * Redefinitions must call super._willFallback(). - */ - function _willFallback() internal virtual {} - - /** - * @dev fallback implementation. - * Extracted to enable manual triggering. - */ - function _fallback() internal { - _willFallback(); - _delegate(_implementation()); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/SafeMath.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/SafeMath.sol deleted file mode 100644 index f044c25120e..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/SafeMath.sol +++ /dev/null @@ -1,163 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.7.5; - -/** - * @dev Wrappers over Solidity's arithmetic operations with added overflow - * checks. - * - * Arithmetic operations in Solidity wrap on overflow. This can easily result - * in bugs, because programmers usually assume that an overflow raises an - * error, which is the standard behavior in high level programming languages. - * `SafeMath` restores this intuition by reverting the transaction when an - * operation overflows. - * - * Using this library instead of the unchecked operations eliminates an entire - * class of bugs, so it's recommended to use it always. - */ -library SafeMath { - /** - * @dev Returns the addition of two unsigned integers, reverting on - * overflow. - * - * Counterpart to Solidity's `+` operator. - * - * Requirements: - * - Addition cannot overflow. - */ - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - require(c >= a, 'SafeMath: addition overflow'); - - return c; - } - - /** - * @dev Returns the subtraction of two unsigned integers, reverting on - * overflow (when the result is negative). - * - * Counterpart to Solidity's `-` operator. - * - * Requirements: - * - Subtraction cannot overflow. - */ - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - return sub(a, b, 'SafeMath: subtraction overflow'); - } - - /** - * @dev Returns the subtraction of two unsigned integers, reverting with custom message on - * overflow (when the result is negative). - * - * Counterpart to Solidity's `-` operator. - * - * Requirements: - * - Subtraction cannot overflow. - */ - function sub( - uint256 a, - uint256 b, - string memory errorMessage - ) internal pure returns (uint256) { - require(b <= a, errorMessage); - uint256 c = a - b; - - return c; - } - - /** - * @dev Returns the multiplication of two unsigned integers, reverting on - * overflow. - * - * Counterpart to Solidity's `*` operator. - * - * Requirements: - * - Multiplication cannot overflow. - */ - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - // Gas optimization: this is cheaper than requiring 'a' not being zero, but the - // benefit is lost if 'b' is also tested. - // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 - if (a == 0) { - return 0; - } - - uint256 c = a * b; - require(c / a == b, 'SafeMath: multiplication overflow'); - - return c; - } - - /** - * @dev Returns the integer division of two unsigned integers. Reverts on - * division by zero. The result is rounded towards zero. - * - * Counterpart to Solidity's `/` operator. Note: this function uses a - * `revert` opcode (which leaves remaining gas untouched) while Solidity - * uses an invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - The divisor cannot be zero. - */ - function div(uint256 a, uint256 b) internal pure returns (uint256) { - return div(a, b, 'SafeMath: division by zero'); - } - - /** - * @dev Returns the integer division of two unsigned integers. Reverts with custom message on - * division by zero. The result is rounded towards zero. - * - * Counterpart to Solidity's `/` operator. Note: this function uses a - * `revert` opcode (which leaves remaining gas untouched) while Solidity - * uses an invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - The divisor cannot be zero. - */ - function div( - uint256 a, - uint256 b, - string memory errorMessage - ) internal pure returns (uint256) { - // Solidity only automatically asserts when dividing by 0 - require(b > 0, errorMessage); - uint256 c = a / b; - // assert(a == b * c + a % b); // There is no case in which this doesn't hold - - return c; - } - - /** - * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), - * Reverts when dividing by zero. - * - * Counterpart to Solidity's `%` operator. This function uses a `revert` - * opcode (which leaves remaining gas untouched) while Solidity uses an - * invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - The divisor cannot be zero. - */ - function mod(uint256 a, uint256 b) internal pure returns (uint256) { - return mod(a, b, 'SafeMath: modulo by zero'); - } - - /** - * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), - * Reverts with custom message when dividing by zero. - * - * Counterpart to Solidity's `%` operator. This function uses a `revert` - * opcode (which leaves remaining gas untouched) while Solidity uses an - * invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - The divisor cannot be zero. - */ - function mod( - uint256 a, - uint256 b, - string memory errorMessage - ) internal pure returns (uint256) { - require(b != 0, errorMessage); - return a % b; - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/UpgradeabilityProxy.sol b/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/UpgradeabilityProxy.sol deleted file mode 100644 index 9ecc837e646..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/dependencies/open-zeppelin/UpgradeabilityProxy.sol +++ /dev/null @@ -1,27 +0,0 @@ -pragma solidity 0.7.5; - -import './BaseUpgradeabilityProxy.sol'; - -/** - * @title UpgradeabilityProxy - * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing - * implementation and init data. - */ -contract UpgradeabilityProxy is BaseUpgradeabilityProxy { - /** - * @dev Contract constructor. - * @param _logic Address of the initial implementation. - * @param _data Data to send as msg.data to the implementation to initialize the proxied contract. - * It should include the signature and the parameters of the function to be called, as described in - * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. - * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped. - */ - constructor(address _logic, bytes memory _data) public payable { - assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)); - _setImplementation(_logic); - if (_data.length > 0) { - (bool success, ) = _logic.delegatecall(_data); - require(success); - } - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/governance/AaveGovernanceV2.sol b/libs/chains/src/eth/contracts/AAVE/governance/AaveGovernanceV2.sol deleted file mode 100644 index 60449d3ad51..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/governance/AaveGovernanceV2.sol +++ /dev/null @@ -1,500 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IVotingStrategy} from '../interfaces/IVotingStrategy.sol'; -import {IExecutorWithTimelock} from '../interfaces/IExecutorWithTimelock.sol'; -import {IProposalValidator} from '../interfaces/IProposalValidator.sol'; -import {IGovernanceStrategy} from '../interfaces/IGovernanceStrategy.sol'; -import {IAaveGovernanceV2} from '../interfaces/IAaveGovernanceV2.sol'; -import {Ownable} from '../dependencies/open-zeppelin/Ownable.sol'; -import {SafeMath} from '../dependencies/open-zeppelin/SafeMath.sol'; -import {isContract, getChainId} from '../misc/Helpers.sol'; - -/** - * @title Governance V2 contract - * @dev Main point of interaction with Aave protocol's governance - * - Create a Proposal - * - Cancel a Proposal - * - Queue a Proposal - * - Execute a Proposal - * - Submit Vote to a Proposal - * Proposal States : Pending => Active => Succeeded(/Failed) => Queued => Executed(/Expired) - * The transition to "Canceled" can appear in multiple states - * @author Aave - **/ -contract AaveGovernanceV2 is Ownable, IAaveGovernanceV2 { - using SafeMath for uint256; - - address private _governanceStrategy; - uint256 private _votingDelay; - - uint256 private _proposalsCount; - mapping(uint256 => Proposal) private _proposals; - mapping(address => bool) private _authorizedExecutors; - - address private _guardian; - - bytes32 public constant DOMAIN_TYPEHASH = keccak256( - 'EIP712Domain(string name,uint256 chainId,address verifyingContract)' - ); - bytes32 public constant VOTE_EMITTED_TYPEHASH = keccak256('VoteEmitted(uint256 id,bool support)'); - string public constant NAME = 'Aave Governance v2'; - - modifier onlyGuardian() { - require(msg.sender == _guardian, 'ONLY_BY_GUARDIAN'); - _; - } - - constructor( - address governanceStrategy, - uint256 votingDelay, - address guardian, - address[] memory executors - ) { - _setGovernanceStrategy(governanceStrategy); - _setVotingDelay(votingDelay); - _guardian = guardian; - - authorizeExecutors(executors); - } - - struct CreateVars { - uint256 startBlock; - uint256 endBlock; - uint256 previousProposalsCount; - } - - /** - * @dev Creates a Proposal (needs to be validated by the Proposal Validator) - * @param executor The ExecutorWithTimelock contract that will execute the proposal - * @param targets list of contracts called by proposal's associated transactions - * @param values list of value in wei for each propoposal's associated transaction - * @param signatures list of function signatures (can be empty) to be used when created the callData - * @param calldatas list of calldatas: if associated signature empty, calldata ready, else calldata is arguments - * @param withDelegatecalls boolean, true = transaction delegatecalls the taget, else calls the target - * @param ipfsHash IPFS hash of the proposal - **/ - function create( - IExecutorWithTimelock executor, - address[] memory targets, - uint256[] memory values, - string[] memory signatures, - bytes[] memory calldatas, - bool[] memory withDelegatecalls, - bytes32 ipfsHash - ) external override returns (uint256) { - require(targets.length != 0, 'INVALID_EMPTY_TARGETS'); - require( - targets.length == values.length && - targets.length == signatures.length && - targets.length == calldatas.length && - targets.length == withDelegatecalls.length, - 'INCONSISTENT_PARAMS_LENGTH' - ); - - require(isExecutorAuthorized(address(executor)), 'EXECUTOR_NOT_AUTHORIZED'); - - require( - IProposalValidator(address(executor)).validateCreatorOfProposal( - this, - msg.sender, - block.number - 1 - ), - 'PROPOSITION_CREATION_INVALID' - ); - - CreateVars memory vars; - - vars.startBlock = block.number.add(_votingDelay); - vars.endBlock = vars.startBlock.add(IProposalValidator(address(executor)).VOTING_DURATION()); - - vars.previousProposalsCount = _proposalsCount; - - Proposal storage newProposal = _proposals[vars.previousProposalsCount]; - newProposal.id = vars.previousProposalsCount; - newProposal.creator = msg.sender; - newProposal.executor = executor; - newProposal.targets = targets; - newProposal.values = values; - newProposal.signatures = signatures; - newProposal.calldatas = calldatas; - newProposal.withDelegatecalls = withDelegatecalls; - newProposal.startBlock = vars.startBlock; - newProposal.endBlock = vars.endBlock; - newProposal.strategy = _governanceStrategy; - newProposal.ipfsHash = ipfsHash; - _proposalsCount++; - - emit ProposalCreated( - vars.previousProposalsCount, - msg.sender, - executor, - targets, - values, - signatures, - calldatas, - withDelegatecalls, - vars.startBlock, - vars.endBlock, - _governanceStrategy, - ipfsHash - ); - - return newProposal.id; - } - - /** - * @dev Cancels a Proposal. - * - Callable by the _guardian with relaxed conditions, or by anybody if the conditions of - * cancellation on the executor are fulfilled - * @param proposalId id of the proposal - **/ - function cancel(uint256 proposalId) external override { - ProposalState state = getProposalState(proposalId); - require( - state != ProposalState.Executed && - state != ProposalState.Canceled && - state != ProposalState.Expired, - 'ONLY_BEFORE_EXECUTED' - ); - - Proposal storage proposal = _proposals[proposalId]; - require( - msg.sender == _guardian || - IProposalValidator(address(proposal.executor)).validateProposalCancellation( - this, - proposal.creator, - block.number - 1 - ), - 'PROPOSITION_CANCELLATION_INVALID' - ); - proposal.canceled = true; - for (uint256 i = 0; i < proposal.targets.length; i++) { - proposal.executor.cancelTransaction( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - proposal.executionTime, - proposal.withDelegatecalls[i] - ); - } - - emit ProposalCanceled(proposalId); - } - - /** - * @dev Queue the proposal (If Proposal Succeeded) - * @param proposalId id of the proposal to queue - **/ - function queue(uint256 proposalId) external override { - require(getProposalState(proposalId) == ProposalState.Succeeded, 'INVALID_STATE_FOR_QUEUE'); - Proposal storage proposal = _proposals[proposalId]; - uint256 executionTime = block.timestamp.add(proposal.executor.getDelay()); - for (uint256 i = 0; i < proposal.targets.length; i++) { - _queueOrRevert( - proposal.executor, - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - executionTime, - proposal.withDelegatecalls[i] - ); - } - proposal.executionTime = executionTime; - - emit ProposalQueued(proposalId, executionTime, msg.sender); - } - - /** - * @dev Execute the proposal (If Proposal Queued) - * @param proposalId id of the proposal to execute - **/ - function execute(uint256 proposalId) external payable override { - require(getProposalState(proposalId) == ProposalState.Queued, 'ONLY_QUEUED_PROPOSALS'); - Proposal storage proposal = _proposals[proposalId]; - proposal.executed = true; - for (uint256 i = 0; i < proposal.targets.length; i++) { - proposal.executor.executeTransaction{value: proposal.values[i]}( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - proposal.executionTime, - proposal.withDelegatecalls[i] - ); - } - emit ProposalExecuted(proposalId, msg.sender); - } - - /** - * @dev Function allowing msg.sender to vote for/against a proposal - * @param proposalId id of the proposal - * @param support boolean, true = vote for, false = vote against - **/ - function submitVote(uint256 proposalId, bool support) external override { - return _submitVote(msg.sender, proposalId, support); - } - - /** - * @dev Function to register the vote of user that has voted offchain via signature - * @param proposalId id of the proposal - * @param support boolean, true = vote for, false = vote against - * @param v v part of the voter signature - * @param r r part of the voter signature - * @param s s part of the voter signature - **/ - function submitVoteBySignature( - uint256 proposalId, - bool support, - uint8 v, - bytes32 r, - bytes32 s - ) external override { - bytes32 digest = keccak256( - abi.encodePacked( - '\x19\x01', - keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(NAME)), getChainId(), address(this))), - keccak256(abi.encode(VOTE_EMITTED_TYPEHASH, proposalId, support)) - ) - ); - address signer = ecrecover(digest, v, r, s); - require(signer != address(0), 'INVALID_SIGNATURE'); - return _submitVote(signer, proposalId, support); - } - - /** - * @dev Set new GovernanceStrategy - * Note: owner should be a timelocked executor, so needs to make a proposal - * @param governanceStrategy new Address of the GovernanceStrategy contract - **/ - function setGovernanceStrategy(address governanceStrategy) external override onlyOwner { - _setGovernanceStrategy(governanceStrategy); - } - - /** - * @dev Set new Voting Delay (delay before a newly created proposal can be voted on) - * Note: owner should be a timelocked executor, so needs to make a proposal - * @param votingDelay new voting delay in terms of blocks - **/ - function setVotingDelay(uint256 votingDelay) external override onlyOwner { - _setVotingDelay(votingDelay); - } - - /** - * @dev Add new addresses to the list of authorized executors - * @param executors list of new addresses to be authorized executors - **/ - function authorizeExecutors(address[] memory executors) public override onlyOwner { - for (uint256 i = 0; i < executors.length; i++) { - _authorizeExecutor(executors[i]); - } - } - - /** - * @dev Remove addresses to the list of authorized executors - * @param executors list of addresses to be removed as authorized executors - **/ - function unauthorizeExecutors(address[] memory executors) public override onlyOwner { - for (uint256 i = 0; i < executors.length; i++) { - _unauthorizeExecutor(executors[i]); - } - } - - /** - * @dev Let the guardian abdicate from its priviledged rights - **/ - function __abdicate() external override onlyGuardian { - _guardian = address(0); - } - - /** - * @dev Getter of the current GovernanceStrategy address - * @return The address of the current GovernanceStrategy contracts - **/ - function getGovernanceStrategy() external view override returns (address) { - return _governanceStrategy; - } - - /** - * @dev Getter of the current Voting Delay (delay before a created proposal can be voted on) - * Different from the voting duration - * @return The voting delay in number of blocks - **/ - function getVotingDelay() external view override returns (uint256) { - return _votingDelay; - } - - /** - * @dev Returns whether an address is an authorized executor - * @param executor address to evaluate as authorized executor - * @return true if authorized - **/ - function isExecutorAuthorized(address executor) public view override returns (bool) { - return _authorizedExecutors[executor]; - } - - /** - * @dev Getter the address of the guardian, that can mainly cancel proposals - * @return The address of the guardian - **/ - function getGuardian() external view override returns (address) { - return _guardian; - } - - /** - * @dev Getter of the proposal count (the current number of proposals ever created) - * @return the proposal count - **/ - function getProposalsCount() external view override returns (uint256) { - return _proposalsCount; - } - - /** - * @dev Getter of a proposal by id - * @param proposalId id of the proposal to get - * @return the proposal as ProposalWithoutVotes memory object - **/ - function getProposalById(uint256 proposalId) - external - view - override - returns (ProposalWithoutVotes memory) - { - Proposal storage proposal = _proposals[proposalId]; - ProposalWithoutVotes memory proposalWithoutVotes = ProposalWithoutVotes({ - id: proposal.id, - creator: proposal.creator, - executor: proposal.executor, - targets: proposal.targets, - values: proposal.values, - signatures: proposal.signatures, - calldatas: proposal.calldatas, - withDelegatecalls: proposal.withDelegatecalls, - startBlock: proposal.startBlock, - endBlock: proposal.endBlock, - executionTime: proposal.executionTime, - forVotes: proposal.forVotes, - againstVotes: proposal.againstVotes, - executed: proposal.executed, - canceled: proposal.canceled, - strategy: proposal.strategy, - ipfsHash: proposal.ipfsHash - }); - - return proposalWithoutVotes; - } - - /** - * @dev Getter of the Vote of a voter about a proposal - * Note: Vote is a struct: ({bool support, uint248 votingPower}) - * @param proposalId id of the proposal - * @param voter address of the voter - * @return The associated Vote memory object - **/ - function getVoteOnProposal(uint256 proposalId, address voter) - external - view - override - returns (Vote memory) - { - return _proposals[proposalId].votes[voter]; - } - - /** - * @dev Get the current state of a proposal - * @param proposalId id of the proposal - * @return The current state if the proposal - **/ - function getProposalState(uint256 proposalId) public view override returns (ProposalState) { - require(_proposalsCount >= proposalId, 'INVALID_PROPOSAL_ID'); - Proposal storage proposal = _proposals[proposalId]; - if (proposal.canceled) { - return ProposalState.Canceled; - } else if (block.number <= proposal.startBlock) { - return ProposalState.Pending; - } else if (block.number <= proposal.endBlock) { - return ProposalState.Active; - } else if (!IProposalValidator(address(proposal.executor)).isProposalPassed(this, proposalId)) { - return ProposalState.Failed; - } else if (proposal.executionTime == 0) { - return ProposalState.Succeeded; - } else if (proposal.executed) { - return ProposalState.Executed; - } else if (proposal.executor.isProposalOverGracePeriod(this, proposalId)) { - return ProposalState.Expired; - } else { - return ProposalState.Queued; - } - } - - function _queueOrRevert( - IExecutorWithTimelock executor, - address target, - uint256 value, - string memory signature, - bytes memory callData, - uint256 executionTime, - bool withDelegatecall - ) internal { - require( - !executor.isActionQueued( - keccak256(abi.encode(target, value, signature, callData, executionTime, withDelegatecall)) - ), - 'DUPLICATED_ACTION' - ); - executor.queueTransaction(target, value, signature, callData, executionTime, withDelegatecall); - } - - function _submitVote( - address voter, - uint256 proposalId, - bool support - ) internal { - require(getProposalState(proposalId) == ProposalState.Active, 'VOTING_CLOSED'); - Proposal storage proposal = _proposals[proposalId]; - Vote storage vote = proposal.votes[voter]; - - require(vote.votingPower == 0, 'VOTE_ALREADY_SUBMITTED'); - - uint256 votingPower = IVotingStrategy(proposal.strategy).getVotingPowerAt( - voter, - proposal.startBlock - ); - - if (support) { - proposal.forVotes = proposal.forVotes.add(votingPower); - } else { - proposal.againstVotes = proposal.againstVotes.add(votingPower); - } - - vote.support = support; - vote.votingPower = uint248(votingPower); - - emit VoteEmitted(proposalId, voter, support, votingPower); - } - - function _setGovernanceStrategy(address governanceStrategy) internal { - _governanceStrategy = governanceStrategy; - - emit GovernanceStrategyChanged(governanceStrategy, msg.sender); - } - - function _setVotingDelay(uint256 votingDelay) internal { - _votingDelay = votingDelay; - - emit VotingDelayChanged(votingDelay, msg.sender); - } - - function _authorizeExecutor(address executor) internal { - _authorizedExecutors[executor] = true; - emit ExecutorAuthorized(executor); - } - - function _unauthorizeExecutor(address executor) internal { - _authorizedExecutors[executor] = false; - emit ExecutorUnauthorized(executor); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/governance/Executor.sol b/libs/chains/src/eth/contracts/AAVE/governance/Executor.sol deleted file mode 100644 index 9aca4d65f99..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/governance/Executor.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {ExecutorWithTimelock} from './ExecutorWithTimelock.sol'; -import {ProposalValidator} from './ProposalValidator.sol'; - -/** - * @title Time Locked, Validator, Executor Contract - * @dev Contract - * - Validate Proposal creations/ cancellation - * - Validate Vote Quorum and Vote success on proposal - * - Queue, Execute, Cancel, successful proposals' transactions. - * @author Aave - **/ -contract Executor is ExecutorWithTimelock, ProposalValidator { - constructor( - address admin, - uint256 delay, - uint256 gracePeriod, - uint256 minimumDelay, - uint256 maximumDelay, - uint256 propositionThreshold, - uint256 voteDuration, - uint256 voteDifferential, - uint256 minimumQuorum - ) - ExecutorWithTimelock(admin, delay, gracePeriod, minimumDelay, maximumDelay) - ProposalValidator(propositionThreshold, voteDuration, voteDifferential, minimumQuorum) - {} -} diff --git a/libs/chains/src/eth/contracts/AAVE/governance/ExecutorWithTimelock.sol b/libs/chains/src/eth/contracts/AAVE/governance/ExecutorWithTimelock.sol deleted file mode 100644 index 29cdadf65e4..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/governance/ExecutorWithTimelock.sol +++ /dev/null @@ -1,287 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IExecutorWithTimelock} from '../interfaces/IExecutorWithTimelock.sol'; -import {IAaveGovernanceV2} from '../interfaces/IAaveGovernanceV2.sol'; -import {SafeMath} from '../dependencies/open-zeppelin/SafeMath.sol'; - -/** - * @title Time Locked Executor Contract, inherited by Aave Governance Executors - * @dev Contract that can queue, execute, cancel transactions voted by Governance - * Queued transactions can be executed after a delay and until - * Grace period is not over. - * @author Aave - **/ -contract ExecutorWithTimelock is IExecutorWithTimelock { - using SafeMath for uint256; - - uint256 public immutable override GRACE_PERIOD; - uint256 public immutable override MINIMUM_DELAY; - uint256 public immutable override MAXIMUM_DELAY; - - address private _admin; - address private _pendingAdmin; - uint256 private _delay; - - mapping(bytes32 => bool) private _queuedTransactions; - - /** - * @dev Constructor - * @param admin admin address, that can call the main functions, (Governance) - * @param delay minimum time between queueing and execution of proposal - * @param gracePeriod time after `delay` while a proposal can be executed - * @param minimumDelay lower threshold of `delay`, in seconds - * @param maximumDelay upper threhold of `delay`, in seconds - **/ - constructor( - address admin, - uint256 delay, - uint256 gracePeriod, - uint256 minimumDelay, - uint256 maximumDelay - ) { - require(delay >= minimumDelay, 'DELAY_SHORTER_THAN_MINIMUM'); - require(delay <= maximumDelay, 'DELAY_LONGER_THAN_MAXIMUM'); - _delay = delay; - _admin = admin; - - GRACE_PERIOD = gracePeriod; - MINIMUM_DELAY = minimumDelay; - MAXIMUM_DELAY = maximumDelay; - - emit NewDelay(delay); - emit NewAdmin(admin); - } - - modifier onlyAdmin() { - require(msg.sender == _admin, 'ONLY_BY_ADMIN'); - _; - } - - modifier onlyTimelock() { - require(msg.sender == address(this), 'ONLY_BY_THIS_TIMELOCK'); - _; - } - - modifier onlyPendingAdmin() { - require(msg.sender == _pendingAdmin, 'ONLY_BY_PENDING_ADMIN'); - _; - } - - /** - * @dev Set the delay - * @param delay delay between queue and execution of proposal - **/ - function setDelay(uint256 delay) public onlyTimelock { - _validateDelay(delay); - _delay = delay; - - emit NewDelay(delay); - } - - /** - * @dev Function enabling pending admin to become admin - **/ - function acceptAdmin() public onlyPendingAdmin { - _admin = msg.sender; - _pendingAdmin = address(0); - - emit NewAdmin(msg.sender); - } - - /** - * @dev Setting a new pending admin (that can then become admin) - * Can only be called by this executor (i.e via proposal) - * @param newPendingAdmin address of the new admin - **/ - function setPendingAdmin(address newPendingAdmin) public onlyTimelock { - _pendingAdmin = newPendingAdmin; - - emit NewPendingAdmin(newPendingAdmin); - } - - /** - * @dev Function, called by Governance, that queue a transaction, returns action hash - * @param target smart contract target - * @param value wei value of the transaction - * @param signature function signature of the transaction - * @param data function arguments of the transaction or callData if signature empty - * @param executionTime time at which to execute the transaction - * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target - * @return the action Hash - **/ - function queueTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 executionTime, - bool withDelegatecall - ) public override onlyAdmin returns (bytes32) { - require(executionTime >= block.timestamp.add(_delay), 'EXECUTION_TIME_UNDERESTIMATED'); - - bytes32 actionHash = keccak256( - abi.encode(target, value, signature, data, executionTime, withDelegatecall) - ); - _queuedTransactions[actionHash] = true; - - emit QueuedAction(actionHash, target, value, signature, data, executionTime, withDelegatecall); - return actionHash; - } - - /** - * @dev Function, called by Governance, that cancels a transaction, returns action hash - * @param target smart contract target - * @param value wei value of the transaction - * @param signature function signature of the transaction - * @param data function arguments of the transaction or callData if signature empty - * @param executionTime time at which to execute the transaction - * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target - * @return the action Hash of the canceled tx - **/ - function cancelTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 executionTime, - bool withDelegatecall - ) public override onlyAdmin returns (bytes32) { - bytes32 actionHash = keccak256( - abi.encode(target, value, signature, data, executionTime, withDelegatecall) - ); - _queuedTransactions[actionHash] = false; - - emit CancelledAction( - actionHash, - target, - value, - signature, - data, - executionTime, - withDelegatecall - ); - return actionHash; - } - - /** - * @dev Function, called by Governance, that cancels a transaction, returns the callData executed - * @param target smart contract target - * @param value wei value of the transaction - * @param signature function signature of the transaction - * @param data function arguments of the transaction or callData if signature empty - * @param executionTime time at which to execute the transaction - * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target - * @return the callData executed as memory bytes - **/ - function executeTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 executionTime, - bool withDelegatecall - ) public payable override onlyAdmin returns (bytes memory) { - bytes32 actionHash = keccak256( - abi.encode(target, value, signature, data, executionTime, withDelegatecall) - ); - require(_queuedTransactions[actionHash], 'ACTION_NOT_QUEUED'); - require(block.timestamp >= executionTime, 'TIMELOCK_NOT_FINISHED'); - require(block.timestamp <= executionTime.add(GRACE_PERIOD), 'GRACE_PERIOD_FINISHED'); - - _queuedTransactions[actionHash] = false; - - bytes memory callData; - - if (bytes(signature).length == 0) { - callData = data; - } else { - callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data); - } - - bool success; - bytes memory resultData; - if (withDelegatecall) { - require(msg.value >= value, "NOT_ENOUGH_MSG_VALUE"); - // solium-disable-next-line security/no-call-value - (success, resultData) = target.delegatecall(callData); - } else { - // solium-disable-next-line security/no-call-value - (success, resultData) = target.call{value: value}(callData); - } - - require(success, 'FAILED_ACTION_EXECUTION'); - - emit ExecutedAction( - actionHash, - target, - value, - signature, - data, - executionTime, - withDelegatecall, - resultData - ); - - return resultData; - } - - /** - * @dev Getter of the current admin address (should be governance) - * @return The address of the current admin - **/ - function getAdmin() external view override returns (address) { - return _admin; - } - - /** - * @dev Getter of the current pending admin address - * @return The address of the pending admin - **/ - function getPendingAdmin() external view override returns (address) { - return _pendingAdmin; - } - - /** - * @dev Getter of the delay between queuing and execution - * @return The delay in seconds - **/ - function getDelay() external view override returns (uint256) { - return _delay; - } - - /** - * @dev Returns whether an action (via actionHash) is queued - * @param actionHash hash of the action to be checked - * keccak256(abi.encode(target, value, signature, data, executionTime, withDelegatecall)) - * @return true if underlying action of actionHash is queued - **/ - function isActionQueued(bytes32 actionHash) external view override returns (bool) { - return _queuedTransactions[actionHash]; - } - - /** - * @dev Checks whether a proposal is over its grace period - * @param governance Governance contract - * @param proposalId Id of the proposal against which to test - * @return true of proposal is over grace period - **/ - function isProposalOverGracePeriod(IAaveGovernanceV2 governance, uint256 proposalId) - external - view - override - returns (bool) - { - IAaveGovernanceV2.ProposalWithoutVotes memory proposal = governance.getProposalById(proposalId); - - return (block.timestamp > proposal.executionTime.add(GRACE_PERIOD)); - } - - function _validateDelay(uint256 delay) internal view { - require(delay >= MINIMUM_DELAY, 'DELAY_SHORTER_THAN_MINIMUM'); - require(delay <= MAXIMUM_DELAY, 'DELAY_LONGER_THAN_MAXIMUM'); - } - - receive() external payable {} -} diff --git a/libs/chains/src/eth/contracts/AAVE/governance/GovernanceStrategy.sol b/libs/chains/src/eth/contracts/AAVE/governance/GovernanceStrategy.sol deleted file mode 100644 index 31fb4dd5d9f..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/governance/GovernanceStrategy.sol +++ /dev/null @@ -1,95 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IGovernanceStrategy} from '../interfaces/IGovernanceStrategy.sol'; -import {IERC20} from '../interfaces/IERC20.sol'; -import {IGovernancePowerDelegationToken} from '../interfaces/IGovernancePowerDelegationToken.sol'; - -/** - * @title Governance Strategy contract - * @dev Smart contract containing logic to measure users' relative power to propose and vote. - * User Power = User Power from Aave Token + User Power from stkAave Token. - * User Power from Token = Token Power + Token Power as Delegatee [- Token Power if user has delegated] - * Two wrapper functions linked to Aave Tokens's GovernancePowerDelegationERC20.sol implementation - * - getPropositionPowerAt: fetching a user Proposition Power at a specified block - * - getVotingPowerAt: fetching a user Voting Power at a specified block - * @author Aave - **/ -contract GovernanceStrategy is IGovernanceStrategy { - address public immutable AAVE; - address public immutable STK_AAVE; - - /** - * @dev Constructor, register tokens used for Voting and Proposition Powers. - * @param aave The address of the AAVE Token contract. - * @param stkAave The address of the stkAAVE Token Contract - **/ - constructor(address aave, address stkAave) { - AAVE = aave; - STK_AAVE = stkAave; - } - - /** - * @dev Returns the total supply of Proposition Tokens Available for Governance - * = AAVE Available for governance + stkAAVE available - * The supply of AAVE staked in stkAAVE are not taken into account so: - * = (Supply of AAVE - AAVE in stkAAVE) + (Supply of stkAAVE) - * = Supply of AAVE, Since the supply of stkAAVE is equal to the number of AAVE staked - * @param blockNumber Blocknumber at which to evaluate - * @return total supply at blockNumber - **/ - function getTotalPropositionSupplyAt(uint256 blockNumber) public view override returns (uint256) { - return IERC20(AAVE).totalSupplyAt(blockNumber); - } - - /** - * @dev Returns the total supply of Outstanding Voting Tokens - * @param blockNumber Blocknumber at which to evaluate - * @return total supply at blockNumber - **/ - function getTotalVotingSupplyAt(uint256 blockNumber) public view override returns (uint256) { - return getTotalPropositionSupplyAt(blockNumber); - } - - /** - * @dev Returns the Proposition Power of a user at a specific block number. - * @param user Address of the user. - * @param blockNumber Blocknumber at which to fetch Proposition Power - * @return Power number - **/ - function getPropositionPowerAt(address user, uint256 blockNumber) - public - view - override - returns (uint256) - { - return - _getPowerByTypeAt(user, blockNumber, IGovernancePowerDelegationToken.DelegationType.PROPOSITION_POWER); - } - - /** - * @dev Returns the Vote Power of a user at a specific block number. - * @param user Address of the user. - * @param blockNumber Blocknumber at which to fetch Vote Power - * @return Vote number - **/ - function getVotingPowerAt(address user, uint256 blockNumber) - public - view - override - returns (uint256) - { - return _getPowerByTypeAt(user, blockNumber, IGovernancePowerDelegationToken.DelegationType.VOTING_POWER); - } - - function _getPowerByTypeAt( - address user, - uint256 blockNumber, - IGovernancePowerDelegationToken.DelegationType powerType - ) internal view returns (uint256) { - return - IGovernancePowerDelegationToken(AAVE).getPowerAtBlock(user, blockNumber, powerType) + - IGovernancePowerDelegationToken(STK_AAVE).getPowerAtBlock(user, blockNumber, powerType); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/governance/ProposalValidator.sol b/libs/chains/src/eth/contracts/AAVE/governance/ProposalValidator.sol deleted file mode 100644 index 41cfcb80d65..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/governance/ProposalValidator.sol +++ /dev/null @@ -1,196 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IAaveGovernanceV2} from '../interfaces/IAaveGovernanceV2.sol'; -import {IGovernanceStrategy} from '../interfaces/IGovernanceStrategy.sol'; -import {IProposalValidator} from '../interfaces/IProposalValidator.sol'; -import {SafeMath} from '../dependencies/open-zeppelin/SafeMath.sol'; - -/** - * @title Proposal Validator Contract, inherited by Aave Governance Executors - * @dev Validates/Invalidations propositions state modifications. - * Proposition Power functions: Validates proposition creations/ cancellation - * Voting Power functions: Validates success of propositions. - * @author Aave - **/ -contract ProposalValidator is IProposalValidator { - using SafeMath for uint256; - - uint256 public immutable override PROPOSITION_THRESHOLD; - uint256 public immutable override VOTING_DURATION; - uint256 public immutable override VOTE_DIFFERENTIAL; - uint256 public immutable override MINIMUM_QUORUM; - uint256 public constant override ONE_HUNDRED_WITH_PRECISION = 10000; // Equivalent to 100%, but scaled for precision - - /** - * @dev Constructor - * @param propositionThreshold minimum percentage of supply needed to submit a proposal - * - In ONE_HUNDRED_WITH_PRECISION units - * @param votingDuration duration in blocks of the voting period - * @param voteDifferential percentage of supply that `for` votes need to be over `against` - * in order for the proposal to pass - * - In ONE_HUNDRED_WITH_PRECISION units - * @param minimumQuorum minimum percentage of the supply in FOR-voting-power need for a proposal to pass - * - In ONE_HUNDRED_WITH_PRECISION units - **/ - constructor( - uint256 propositionThreshold, - uint256 votingDuration, - uint256 voteDifferential, - uint256 minimumQuorum - ) { - PROPOSITION_THRESHOLD = propositionThreshold; - VOTING_DURATION = votingDuration; - VOTE_DIFFERENTIAL = voteDifferential; - MINIMUM_QUORUM = minimumQuorum; - } - - /** - * @dev Called to validate a proposal (e.g when creating new proposal in Governance) - * @param governance Governance Contract - * @param user Address of the proposal creator - * @param blockNumber Block Number against which to make the test (e.g proposal creation block -1). - * @return boolean, true if can be created - **/ - function validateCreatorOfProposal( - IAaveGovernanceV2 governance, - address user, - uint256 blockNumber - ) external view override returns (bool) { - return isPropositionPowerEnough(governance, user, blockNumber); - } - - /** - * @dev Called to validate the cancellation of a proposal - * Needs to creator to have lost proposition power threashold - * @param governance Governance Contract - * @param user Address of the proposal creator - * @param blockNumber Block Number against which to make the test (e.g proposal creation block -1). - * @return boolean, true if can be cancelled - **/ - function validateProposalCancellation( - IAaveGovernanceV2 governance, - address user, - uint256 blockNumber - ) external view override returns (bool) { - return !isPropositionPowerEnough(governance, user, blockNumber); - } - - /** - * @dev Returns whether a user has enough Proposition Power to make a proposal. - * @param governance Governance Contract - * @param user Address of the user to be challenged. - * @param blockNumber Block Number against which to make the challenge. - * @return true if user has enough power - **/ - function isPropositionPowerEnough( - IAaveGovernanceV2 governance, - address user, - uint256 blockNumber - ) public view override returns (bool) { - IGovernanceStrategy currentGovernanceStrategy = IGovernanceStrategy( - governance.getGovernanceStrategy() - ); - return - currentGovernanceStrategy.getPropositionPowerAt(user, blockNumber) >= - getMinimumPropositionPowerNeeded(governance, blockNumber); - } - - /** - * @dev Returns the minimum Proposition Power needed to create a proposition. - * @param governance Governance Contract - * @param blockNumber Blocknumber at which to evaluate - * @return minimum Proposition Power needed - **/ - function getMinimumPropositionPowerNeeded(IAaveGovernanceV2 governance, uint256 blockNumber) - public - view - override - returns (uint256) - { - IGovernanceStrategy currentGovernanceStrategy = IGovernanceStrategy( - governance.getGovernanceStrategy() - ); - return - currentGovernanceStrategy - .getTotalPropositionSupplyAt(blockNumber) - .mul(PROPOSITION_THRESHOLD) - .div(ONE_HUNDRED_WITH_PRECISION); - } - - /** - * @dev Returns whether a proposal passed or not - * @param governance Governance Contract - * @param proposalId Id of the proposal to set - * @return true if proposal passed - **/ - function isProposalPassed(IAaveGovernanceV2 governance, uint256 proposalId) - external - view - override - returns (bool) - { - return (isQuorumValid(governance, proposalId) && - isVoteDifferentialValid(governance, proposalId)); - } - - /** - * @dev Calculates the minimum amount of Voting Power needed for a proposal to Pass - * @param votingSupply Total number of oustanding voting tokens - * @return voting power needed for a proposal to pass - **/ - function getMinimumVotingPowerNeeded(uint256 votingSupply) - public - view - override - returns (uint256) - { - return votingSupply.mul(MINIMUM_QUORUM).div(ONE_HUNDRED_WITH_PRECISION); - } - - /** - * @dev Check whether a proposal has reached quorum, ie has enough FOR-voting-power - * Here quorum is not to understand as number of votes reached, but number of for-votes reached - * @param governance Governance Contract - * @param proposalId Id of the proposal to verify - * @return voting power needed for a proposal to pass - **/ - function isQuorumValid(IAaveGovernanceV2 governance, uint256 proposalId) - public - view - override - returns (bool) - { - IAaveGovernanceV2.ProposalWithoutVotes memory proposal = governance.getProposalById(proposalId); - uint256 votingSupply = IGovernanceStrategy(proposal.strategy).getTotalVotingSupplyAt( - proposal.startBlock - ); - - return proposal.forVotes >= getMinimumVotingPowerNeeded(votingSupply); - } - - /** - * @dev Check whether a proposal has enough extra FOR-votes than AGAINST-votes - * FOR VOTES - AGAINST VOTES > VOTE_DIFFERENTIAL * voting supply - * @param governance Governance Contract - * @param proposalId Id of the proposal to verify - * @return true if enough For-Votes - **/ - function isVoteDifferentialValid(IAaveGovernanceV2 governance, uint256 proposalId) - public - view - override - returns (bool) - { - IAaveGovernanceV2.ProposalWithoutVotes memory proposal = governance.getProposalById(proposalId); - uint256 votingSupply = IGovernanceStrategy(proposal.strategy).getTotalVotingSupplyAt( - proposal.startBlock - ); - - return (proposal.forVotes.mul(ONE_HUNDRED_WITH_PRECISION).div(votingSupply) > - proposal.againstVotes.mul(ONE_HUNDRED_WITH_PRECISION).div(votingSupply).add( - VOTE_DIFFERENTIAL - )); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/interfaces/IAaveGovernanceV2.sol b/libs/chains/src/eth/contracts/AAVE/interfaces/IAaveGovernanceV2.sol deleted file mode 100644 index a4c8d86e8ee..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/interfaces/IAaveGovernanceV2.sol +++ /dev/null @@ -1,270 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IExecutorWithTimelock} from './IExecutorWithTimelock.sol'; - -interface IAaveGovernanceV2 { - enum ProposalState {Pending, Canceled, Active, Failed, Succeeded, Queued, Expired, Executed} - - struct Vote { - bool support; - uint248 votingPower; - } - - struct Proposal { - uint256 id; - address creator; - IExecutorWithTimelock executor; - address[] targets; - uint256[] values; - string[] signatures; - bytes[] calldatas; - bool[] withDelegatecalls; - uint256 startBlock; - uint256 endBlock; - uint256 executionTime; - uint256 forVotes; - uint256 againstVotes; - bool executed; - bool canceled; - address strategy; - bytes32 ipfsHash; - mapping(address => Vote) votes; - } - - struct ProposalWithoutVotes { - uint256 id; - address creator; - IExecutorWithTimelock executor; - address[] targets; - uint256[] values; - string[] signatures; - bytes[] calldatas; - bool[] withDelegatecalls; - uint256 startBlock; - uint256 endBlock; - uint256 executionTime; - uint256 forVotes; - uint256 againstVotes; - bool executed; - bool canceled; - address strategy; - bytes32 ipfsHash; - } - - /** - * @dev emitted when a new proposal is created - * @param id Id of the proposal - * @param creator address of the creator - * @param executor The ExecutorWithTimelock contract that will execute the proposal - * @param targets list of contracts called by proposal's associated transactions - * @param values list of value in wei for each propoposal's associated transaction - * @param signatures list of function signatures (can be empty) to be used when created the callData - * @param calldatas list of calldatas: if associated signature empty, calldata ready, else calldata is arguments - * @param withDelegatecalls boolean, true = transaction delegatecalls the taget, else calls the target - * @param startBlock block number when vote starts - * @param endBlock block number when vote ends - * @param strategy address of the governanceStrategy contract - * @param ipfsHash IPFS hash of the proposal - **/ - event ProposalCreated( - uint256 id, - address indexed creator, - IExecutorWithTimelock indexed executor, - address[] targets, - uint256[] values, - string[] signatures, - bytes[] calldatas, - bool[] withDelegatecalls, - uint256 startBlock, - uint256 endBlock, - address strategy, - bytes32 ipfsHash - ); - - /** - * @dev emitted when a proposal is canceled - * @param id Id of the proposal - **/ - event ProposalCanceled(uint256 id); - - /** - * @dev emitted when a proposal is queued - * @param id Id of the proposal - * @param executionTime time when proposal underlying transactions can be executed - * @param initiatorQueueing address of the initiator of the queuing transaction - **/ - event ProposalQueued(uint256 id, uint256 executionTime, address indexed initiatorQueueing); - /** - * @dev emitted when a proposal is executed - * @param id Id of the proposal - * @param initiatorExecution address of the initiator of the execution transaction - **/ - event ProposalExecuted(uint256 id, address indexed initiatorExecution); - /** - * @dev emitted when a vote is registered - * @param id Id of the proposal - * @param voter address of the voter - * @param support boolean, true = vote for, false = vote against - * @param votingPower Power of the voter/vote - **/ - event VoteEmitted(uint256 id, address indexed voter, bool support, uint256 votingPower); - - event GovernanceStrategyChanged(address indexed newStrategy, address indexed initiatorChange); - - event VotingDelayChanged(uint256 newVotingDelay, address indexed initiatorChange); - - event ExecutorAuthorized(address executor); - - event ExecutorUnauthorized(address executor); - - /** - * @dev Creates a Proposal (needs Proposition Power of creator > Threshold) - * @param executor The ExecutorWithTimelock contract that will execute the proposal - * @param targets list of contracts called by proposal's associated transactions - * @param values list of value in wei for each propoposal's associated transaction - * @param signatures list of function signatures (can be empty) to be used when created the callData - * @param calldatas list of calldatas: if associated signature empty, calldata ready, else calldata is arguments - * @param withDelegatecalls if true, transaction delegatecalls the taget, else calls the target - * @param ipfsHash IPFS hash of the proposal - **/ - function create( - IExecutorWithTimelock executor, - address[] memory targets, - uint256[] memory values, - string[] memory signatures, - bytes[] memory calldatas, - bool[] memory withDelegatecalls, - bytes32 ipfsHash - ) external returns (uint256); - - /** - * @dev Cancels a Proposal, - * either at anytime by guardian - * or when proposal is Pending/Active and threshold no longer reached - * @param proposalId id of the proposal - **/ - function cancel(uint256 proposalId) external; - - /** - * @dev Queue the proposal (If Proposal Succeeded) - * @param proposalId id of the proposal to queue - **/ - function queue(uint256 proposalId) external; - - /** - * @dev Execute the proposal (If Proposal Queued) - * @param proposalId id of the proposal to execute - **/ - function execute(uint256 proposalId) external payable; - - /** - * @dev Function allowing msg.sender to vote for/against a proposal - * @param proposalId id of the proposal - * @param support boolean, true = vote for, false = vote against - **/ - function submitVote(uint256 proposalId, bool support) external; - - /** - * @dev Function to register the vote of user that has voted offchain via signature - * @param proposalId id of the proposal - * @param support boolean, true = vote for, false = vote against - * @param v v part of the voter signature - * @param r r part of the voter signature - * @param s s part of the voter signature - **/ - function submitVoteBySignature( - uint256 proposalId, - bool support, - uint8 v, - bytes32 r, - bytes32 s - ) external; - - /** - * @dev Set new GovernanceStrategy - * Note: owner should be a timelocked executor, so needs to make a proposal - * @param governanceStrategy new Address of the GovernanceStrategy contract - **/ - function setGovernanceStrategy(address governanceStrategy) external; - - /** - * @dev Set new Voting Delay (delay before a newly created proposal can be voted on) - * Note: owner should be a timelocked executor, so needs to make a proposal - * @param votingDelay new voting delay in seconds - **/ - function setVotingDelay(uint256 votingDelay) external; - - /** - * @dev Add new addresses to the list of authorized executors - * @param executors list of new addresses to be authorized executors - **/ - function authorizeExecutors(address[] memory executors) external; - - /** - * @dev Remove addresses to the list of authorized executors - * @param executors list of addresses to be removed as authorized executors - **/ - function unauthorizeExecutors(address[] memory executors) external; - - /** - * @dev Let the guardian abdicate from its priviledged rights - **/ - function __abdicate() external; - - /** - * @dev Getter of the current GovernanceStrategy address - * @return The address of the current GovernanceStrategy contracts - **/ - function getGovernanceStrategy() external view returns (address); - - /** - * @dev Getter of the current Voting Delay (delay before a created proposal can be voted on) - * Different from the voting duration - * @return The voting delay in seconds - **/ - function getVotingDelay() external view returns (uint256); - - /** - * @dev Returns whether an address is an authorized executor - * @param executor address to evaluate as authorized executor - * @return true if authorized - **/ - function isExecutorAuthorized(address executor) external view returns (bool); - - /** - * @dev Getter the address of the guardian, that can mainly cancel proposals - * @return The address of the guardian - **/ - function getGuardian() external view returns (address); - - /** - * @dev Getter of the proposal count (the current number of proposals ever created) - * @return the proposal count - **/ - function getProposalsCount() external view returns (uint256); - - /** - * @dev Getter of a proposal by id - * @param proposalId id of the proposal to get - * @return the proposal as ProposalWithoutVotes memory object - **/ - function getProposalById(uint256 proposalId) external view returns (ProposalWithoutVotes memory); - - /** - * @dev Getter of the Vote of a voter about a proposal - * Note: Vote is a struct: ({bool support, uint248 votingPower}) - * @param proposalId id of the proposal - * @param voter address of the voter - * @return The associated Vote memory object - **/ - function getVoteOnProposal(uint256 proposalId, address voter) external view returns (Vote memory); - - /** - * @dev Get the current state of a proposal - * @param proposalId id of the proposal - * @return The current state if the proposal - **/ - function getProposalState(uint256 proposalId) external view returns (ProposalState); -} diff --git a/libs/chains/src/eth/contracts/AAVE/interfaces/IERC20.sol b/libs/chains/src/eth/contracts/AAVE/interfaces/IERC20.sol deleted file mode 100644 index 40b56d02b60..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/interfaces/IERC20.sol +++ /dev/null @@ -1,9 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -interface IERC20 { - function totalSupplyAt(uint256 blockNumber) external view returns (uint256); - - function balanceOf(address account) external view returns (uint256); -} diff --git a/libs/chains/src/eth/contracts/AAVE/interfaces/IExecutorWithTimelock.sol b/libs/chains/src/eth/contracts/AAVE/interfaces/IExecutorWithTimelock.sol deleted file mode 100644 index b3be8d20cec..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/interfaces/IExecutorWithTimelock.sol +++ /dev/null @@ -1,185 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IAaveGovernanceV2} from './IAaveGovernanceV2.sol'; - -interface IExecutorWithTimelock { - /** - * @dev emitted when a new pending admin is set - * @param newPendingAdmin address of the new pending admin - **/ - event NewPendingAdmin(address newPendingAdmin); - - /** - * @dev emitted when a new admin is set - * @param newAdmin address of the new admin - **/ - event NewAdmin(address newAdmin); - - /** - * @dev emitted when a new delay (between queueing and execution) is set - * @param delay new delay - **/ - event NewDelay(uint256 delay); - - /** - * @dev emitted when a new (trans)action is Queued. - * @param actionHash hash of the action - * @param target address of the targeted contract - * @param value wei value of the transaction - * @param signature function signature of the transaction - * @param data function arguments of the transaction or callData if signature empty - * @param executionTime time at which to execute the transaction - * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target - **/ - event QueuedAction( - bytes32 actionHash, - address indexed target, - uint256 value, - string signature, - bytes data, - uint256 executionTime, - bool withDelegatecall - ); - - /** - * @dev emitted when an action is Cancelled - * @param actionHash hash of the action - * @param target address of the targeted contract - * @param value wei value of the transaction - * @param signature function signature of the transaction - * @param data function arguments of the transaction or callData if signature empty - * @param executionTime time at which to execute the transaction - * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target - **/ - event CancelledAction( - bytes32 actionHash, - address indexed target, - uint256 value, - string signature, - bytes data, - uint256 executionTime, - bool withDelegatecall - ); - - /** - * @dev emitted when an action is Cancelled - * @param actionHash hash of the action - * @param target address of the targeted contract - * @param value wei value of the transaction - * @param signature function signature of the transaction - * @param data function arguments of the transaction or callData if signature empty - * @param executionTime time at which to execute the transaction - * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target - * @param resultData the actual callData used on the target - **/ - event ExecutedAction( - bytes32 actionHash, - address indexed target, - uint256 value, - string signature, - bytes data, - uint256 executionTime, - bool withDelegatecall, - bytes resultData - ); - /** - * @dev Getter of the current admin address (should be governance) - * @return The address of the current admin - **/ - function getAdmin() external view returns (address); - /** - * @dev Getter of the current pending admin address - * @return The address of the pending admin - **/ - function getPendingAdmin() external view returns (address); - /** - * @dev Getter of the delay between queuing and execution - * @return The delay in seconds - **/ - function getDelay() external view returns (uint256); - /** - * @dev Returns whether an action (via actionHash) is queued - * @param actionHash hash of the action to be checked - * keccak256(abi.encode(target, value, signature, data, executionTime, withDelegatecall)) - * @return true if underlying action of actionHash is queued - **/ - function isActionQueued(bytes32 actionHash) external view returns (bool); - /** - * @dev Checks whether a proposal is over its grace period - * @param governance Governance contract - * @param proposalId Id of the proposal against which to test - * @return true of proposal is over grace period - **/ - function isProposalOverGracePeriod(IAaveGovernanceV2 governance, uint256 proposalId) - external - view - returns (bool); - /** - * @dev Getter of grace period constant - * @return grace period in seconds - **/ - function GRACE_PERIOD() external view returns (uint256); - /** - * @dev Getter of minimum delay constant - * @return minimum delay in seconds - **/ - function MINIMUM_DELAY() external view returns (uint256); - /** - * @dev Getter of maximum delay constant - * @return maximum delay in seconds - **/ - function MAXIMUM_DELAY() external view returns (uint256); - /** - * @dev Function, called by Governance, that queue a transaction, returns action hash - * @param target smart contract target - * @param value wei value of the transaction - * @param signature function signature of the transaction - * @param data function arguments of the transaction or callData if signature empty - * @param executionTime time at which to execute the transaction - * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target - **/ - function queueTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 executionTime, - bool withDelegatecall - ) external returns (bytes32); - /** - * @dev Function, called by Governance, that cancels a transaction, returns the callData executed - * @param target smart contract target - * @param value wei value of the transaction - * @param signature function signature of the transaction - * @param data function arguments of the transaction or callData if signature empty - * @param executionTime time at which to execute the transaction - * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target - **/ - function executeTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 executionTime, - bool withDelegatecall - ) external payable returns (bytes memory); - /** - * @dev Function, called by Governance, that cancels a transaction, returns action hash - * @param target smart contract target - * @param value wei value of the transaction - * @param signature function signature of the transaction - * @param data function arguments of the transaction or callData if signature empty - * @param executionTime time at which to execute the transaction - * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target - **/ - function cancelTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 executionTime, - bool withDelegatecall - ) external returns (bytes32); -} diff --git a/libs/chains/src/eth/contracts/AAVE/interfaces/IGovernancePowerDelegationToken.sol b/libs/chains/src/eth/contracts/AAVE/interfaces/IGovernancePowerDelegationToken.sol deleted file mode 100644 index 42f0281d9c9..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/interfaces/IGovernancePowerDelegationToken.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -interface IGovernancePowerDelegationToken { - enum DelegationType {VOTING_POWER, PROPOSITION_POWER} - - /** - * @dev returns the delegatee of an user - * @param delegator the address of the delegator - **/ - function getDelegateeByType( - address delegator, - DelegationType delegationType - ) external view virtual returns (address); - - /** - * @dev returns the current delegated power of a user. The current power is the - * power delegated at the time of the last snapshot - * @param user the user - **/ - function getPowerCurrent( - address user, - DelegationType delegationType - ) external view virtual returns (uint256); - - /** - * @dev get the power of a user at a specified block - * @param user address of the user - * @param blockNumber block number at which to get power - * @param delegationType delegation type (propose/vote) - **/ - function getPowerAtBlock( - address user, - uint256 blockNumber, - DelegationType delegationType - ) external view returns (uint256); -} diff --git a/libs/chains/src/eth/contracts/AAVE/interfaces/IGovernanceStrategy.sol b/libs/chains/src/eth/contracts/AAVE/interfaces/IGovernanceStrategy.sol deleted file mode 100644 index 8c6ffee460a..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/interfaces/IGovernanceStrategy.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -interface IGovernanceStrategy { - /** - * @dev Returns the Proposition Power of a user at a specific block number. - * @param user Address of the user. - * @param blockNumber Blocknumber at which to fetch Proposition Power - * @return Power number - **/ - function getPropositionPowerAt(address user, uint256 blockNumber) external view returns (uint256); - /** - * @dev Returns the total supply of Outstanding Proposition Tokens - * @param blockNumber Blocknumber at which to evaluate - * @return total supply at blockNumber - **/ - function getTotalPropositionSupplyAt(uint256 blockNumber) external view returns (uint256); - /** - * @dev Returns the total supply of Outstanding Voting Tokens - * @param blockNumber Blocknumber at which to evaluate - * @return total supply at blockNumber - **/ - function getTotalVotingSupplyAt(uint256 blockNumber) external view returns (uint256); - /** - * @dev Returns the Vote Power of a user at a specific block number. - * @param user Address of the user. - * @param blockNumber Blocknumber at which to fetch Vote Power - * @return Vote number - **/ - function getVotingPowerAt(address user, uint256 blockNumber) external view returns (uint256); -} diff --git a/libs/chains/src/eth/contracts/AAVE/interfaces/IProposalValidator.sol b/libs/chains/src/eth/contracts/AAVE/interfaces/IProposalValidator.sol deleted file mode 100644 index 4b995e8b3dc..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/interfaces/IProposalValidator.sol +++ /dev/null @@ -1,132 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IAaveGovernanceV2} from './IAaveGovernanceV2.sol'; - -interface IProposalValidator { - - /** - * @dev Called to validate a proposal (e.g when creating new proposal in Governance) - * @param governance Governance Contract - * @param user Address of the proposal creator - * @param blockNumber Block Number against which to make the test (e.g proposal creation block -1). - * @return boolean, true if can be created - **/ - function validateCreatorOfProposal( - IAaveGovernanceV2 governance, - address user, - uint256 blockNumber - ) external view returns (bool); - - /** - * @dev Called to validate the cancellation of a proposal - * @param governance Governance Contract - * @param user Address of the proposal creator - * @param blockNumber Block Number against which to make the test (e.g proposal creation block -1). - * @return boolean, true if can be cancelled - **/ - function validateProposalCancellation( - IAaveGovernanceV2 governance, - address user, - uint256 blockNumber - ) external view returns (bool); - - /** - * @dev Returns whether a user has enough Proposition Power to make a proposal. - * @param governance Governance Contract - * @param user Address of the user to be challenged. - * @param blockNumber Block Number against which to make the challenge. - * @return true if user has enough power - **/ - function isPropositionPowerEnough( - IAaveGovernanceV2 governance, - address user, - uint256 blockNumber - ) external view returns (bool); - - /** - * @dev Returns the minimum Proposition Power needed to create a proposition. - * @param governance Governance Contract - * @param blockNumber Blocknumber at which to evaluate - * @return minimum Proposition Power needed - **/ - function getMinimumPropositionPowerNeeded(IAaveGovernanceV2 governance, uint256 blockNumber) - external - view - returns (uint256); - - /** - * @dev Returns whether a proposal passed or not - * @param governance Governance Contract - * @param proposalId Id of the proposal to set - * @return true if proposal passed - **/ - function isProposalPassed(IAaveGovernanceV2 governance, uint256 proposalId) - external - view - returns (bool); - - /** - * @dev Check whether a proposal has reached quorum, ie has enough FOR-voting-power - * Here quorum is not to understand as number of votes reached, but number of for-votes reached - * @param governance Governance Contract - * @param proposalId Id of the proposal to verify - * @return voting power needed for a proposal to pass - **/ - function isQuorumValid(IAaveGovernanceV2 governance, uint256 proposalId) - external - view - returns (bool); - - /** - * @dev Check whether a proposal has enough extra FOR-votes than AGAINST-votes - * FOR VOTES - AGAINST VOTES > VOTE_DIFFERENTIAL * voting supply - * @param governance Governance Contract - * @param proposalId Id of the proposal to verify - * @return true if enough For-Votes - **/ - function isVoteDifferentialValid(IAaveGovernanceV2 governance, uint256 proposalId) - external - view - returns (bool); - - /** - * @dev Calculates the minimum amount of Voting Power needed for a proposal to Pass - * @param votingSupply Total number of oustanding voting tokens - * @return voting power needed for a proposal to pass - **/ - function getMinimumVotingPowerNeeded(uint256 votingSupply) external view returns (uint256); - - /** - * @dev Get proposition threshold constant value - * @return the proposition threshold value (100 <=> 1%) - **/ - function PROPOSITION_THRESHOLD() external view returns (uint256); - - /** - * @dev Get voting duration constant value - * @return the voting duration value in seconds - **/ - function VOTING_DURATION() external view returns (uint256); - - /** - * @dev Get the vote differential threshold constant value - * to compare with % of for votes/total supply - % of against votes/total supply - * @return the vote differential threshold value (100 <=> 1%) - **/ - function VOTE_DIFFERENTIAL() external view returns (uint256); - - /** - * @dev Get quorum threshold constant value - * to compare with % of for votes/total supply - * @return the quorum threshold value (100 <=> 1%) - **/ - function MINIMUM_QUORUM() external view returns (uint256); - - /** - * @dev precision helper: 100% = 10000 - * @return one hundred percents with our chosen precision - **/ - function ONE_HUNDRED_WITH_PRECISION() external view returns (uint256); -} diff --git a/libs/chains/src/eth/contracts/AAVE/interfaces/IVotingStrategy.sol b/libs/chains/src/eth/contracts/AAVE/interfaces/IVotingStrategy.sol deleted file mode 100644 index 1edb11ddebd..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/interfaces/IVotingStrategy.sol +++ /dev/null @@ -1,7 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -interface IVotingStrategy { - function getVotingPowerAt(address user, uint256 blockNumber) external view returns (uint256); -} diff --git a/libs/chains/src/eth/contracts/AAVE/misc/GovernanceV2Helper.sol b/libs/chains/src/eth/contracts/AAVE/misc/GovernanceV2Helper.sol deleted file mode 100644 index 7c2c312d36c..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/misc/GovernanceV2Helper.sol +++ /dev/null @@ -1,106 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IAaveGovernanceV2} from '../interfaces/IAaveGovernanceV2.sol'; -import {IProposalValidator} from '../interfaces/IProposalValidator.sol'; -import {IExecutorWithTimelock} from '../interfaces/IExecutorWithTimelock.sol'; -import {IGovernanceStrategy} from '../interfaces/IGovernanceStrategy.sol'; -import {IGovernancePowerDelegationToken} from '../interfaces/IGovernancePowerDelegationToken.sol'; -import {IGovernanceV2Helper} from './interfaces/IGovernanceV2Helper.sol'; -import {SafeMath} from '../dependencies/open-zeppelin/SafeMath.sol'; - -/** - * @title Governance V2 helper contract - * @dev Allows to easily read data from AaveGovernanceV2 contract - * - List of proposals with state - * - List of votes per proposal and voters - * @author Aave - **/ -contract GovernanceV2Helper is IGovernanceV2Helper { - using SafeMath for uint256; - uint256 public constant ONE_HUNDRED_WITH_PRECISION = 10000; - - function getProposal(uint256 id, IAaveGovernanceV2 governance) - public - view - override - returns (ProposalStats memory proposalStats) - { - IAaveGovernanceV2.ProposalWithoutVotes memory proposal = governance.getProposalById(id); - uint256 votingSupply = - IGovernanceStrategy(proposal.strategy).getTotalVotingSupplyAt(proposal.startBlock); - return - ProposalStats({ - totalVotingSupply: votingSupply, - minimumQuorum: IProposalValidator(address(proposal.executor)).MINIMUM_QUORUM(), - minimumDiff: IProposalValidator(address(proposal.executor)).VOTE_DIFFERENTIAL(), - executionTimeWithGracePeriod: proposal.executionTime > 0 - ? IExecutorWithTimelock(proposal.executor).GRACE_PERIOD().add(proposal.executionTime) - : proposal.executionTime, - proposalCreated: proposal.startBlock.sub(governance.getVotingDelay()), - id: proposal.id, - creator: proposal.creator, - executor: proposal.executor, - targets: proposal.targets, - values: proposal.values, - signatures: proposal.signatures, - calldatas: proposal.calldatas, - withDelegatecalls: proposal.withDelegatecalls, - startBlock: proposal.startBlock, - endBlock: proposal.endBlock, - executionTime: proposal.executionTime, - forVotes: proposal.forVotes, - againstVotes: proposal.againstVotes, - executed: proposal.executed, - canceled: proposal.canceled, - strategy: proposal.strategy, - ipfsHash: proposal.ipfsHash, - proposalState: governance.getProposalState(id) - }); - } - - function getProposals( - uint256 skip, - uint256 limit, - IAaveGovernanceV2 governance - ) external view override returns (ProposalStats[] memory proposalsStats) { - uint256 count = governance.getProposalsCount().sub(skip); - uint256 maxLimit = limit > count ? count : limit; - - proposalsStats = new ProposalStats[](maxLimit); - - for (uint256 i = 0; i < maxLimit; i++) { - proposalsStats[i] = getProposal(i.add(skip), governance); - } - - return proposalsStats; - } - - function getTokensPower(address user, address[] memory tokens) - external - view - override - returns (Power[] memory power) - { - power = new Power[](tokens.length); - for (uint256 i = 0; i < tokens.length; i++) { - IGovernancePowerDelegationToken delegation = IGovernancePowerDelegationToken(tokens[i]); - uint256 currentVotingPower = delegation.getPowerCurrent(user, IGovernancePowerDelegationToken.DelegationType.VOTING_POWER); - uint256 currentPropositionPower = delegation.getPowerCurrent(user, IGovernancePowerDelegationToken.DelegationType.PROPOSITION_POWER); - address delegatedAddressVotingPower = delegation.getDelegateeByType(user, IGovernancePowerDelegationToken.DelegationType.VOTING_POWER); - address delegatedAddressPropositionPower = delegation.getDelegateeByType(user, IGovernancePowerDelegationToken.DelegationType.PROPOSITION_POWER); - - power[i] = Power( - currentVotingPower, - delegatedAddressVotingPower, - currentPropositionPower, - delegatedAddressPropositionPower - ); - - } - - return power; - } - -} diff --git a/libs/chains/src/eth/contracts/AAVE/misc/Helpers.sol b/libs/chains/src/eth/contracts/AAVE/misc/Helpers.sol deleted file mode 100644 index dcd8fc627ae..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/misc/Helpers.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -function getChainId() pure returns (uint256) { - uint256 chainId; - assembly { - chainId := chainid() - } - return chainId; -} - -function isContract(address account) view returns (bool) { - // According to EIP-1052, 0x0 is the value returned for not-yet created accounts - // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned - // for accounts without code, i.e. `keccak256('')` - bytes32 codehash; - bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; - // solhint-disable-next-line no-inline-assembly - assembly { - codehash := extcodehash(account) - } - return (codehash != accountHash && codehash != 0x0); -} diff --git a/libs/chains/src/eth/contracts/AAVE/misc/interfaces/IGovernanceV2Helper.sol b/libs/chains/src/eth/contracts/AAVE/misc/interfaces/IGovernanceV2Helper.sol deleted file mode 100644 index b96884994f0..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/misc/interfaces/IGovernanceV2Helper.sol +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IAaveGovernanceV2} from '../../interfaces/IAaveGovernanceV2.sol'; -import {IExecutorWithTimelock} from '../../interfaces/IExecutorWithTimelock.sol'; - -interface IGovernanceV2Helper { - struct ProposalStats { - uint256 totalVotingSupply; - uint256 minimumQuorum; - uint256 minimumDiff; - uint256 executionTimeWithGracePeriod; - uint256 proposalCreated; - uint256 id; - address creator; - IExecutorWithTimelock executor; - address[] targets; - uint256[] values; - string[] signatures; - bytes[] calldatas; - bool[] withDelegatecalls; - uint256 startBlock; - uint256 endBlock; - uint256 executionTime; - uint256 forVotes; - uint256 againstVotes; - bool executed; - bool canceled; - address strategy; - bytes32 ipfsHash; - IAaveGovernanceV2.ProposalState proposalState; - } - - struct Power { - uint256 votingPower; - address delegatedAddressVotingPower; - uint256 propositionPower; - address delegatedAddressPropositionPower; - } - - - function getProposals( - uint256 skip, - uint256 limit, - IAaveGovernanceV2 governance - ) external view virtual returns (ProposalStats[] memory proposalsStats); - - function getProposal(uint256 id, IAaveGovernanceV2 governance) - external - view - virtual - returns (ProposalStats memory proposalStats); - - function getTokensPower( - address user, - address[] memory tokens - ) - external - view - virtual - returns ( - Power[] memory power - ); -} diff --git a/libs/chains/src/eth/contracts/AAVE/mocks/AaveTokenV1Mock.sol b/libs/chains/src/eth/contracts/AAVE/mocks/AaveTokenV1Mock.sol deleted file mode 100644 index 2aadb98ca27..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/mocks/AaveTokenV1Mock.sol +++ /dev/null @@ -1,32 +0,0 @@ -import {AaveToken} from '@aave/aave-token/contracts/token/AaveToken.sol'; - -contract AaveTokenV1Mock is AaveToken { - /** - * @dev initializes the contract upon assignment to the InitializableAdminUpgradeabilityProxy - * @param minter the address of the LEND -> AAVE migration contract - */ - function initialize(address minter) external initializer { - uint256 chainId; - - //solium-disable-next-line - assembly { - chainId := chainid() - } - - DOMAIN_SEPARATOR = keccak256( - abi.encode( - EIP712_DOMAIN, - keccak256(bytes(NAME)), - keccak256(EIP712_REVISION), - chainId, - address(this) - ) - ); - _name = NAME; - _symbol = SYMBOL; - _setupDecimals(DECIMALS); - // _aaveGovernance = aaveGovernance; - _mint(minter, MIGRATION_AMOUNT); - _mint(minter, DISTRIBUTION_AMOUNT); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/mocks/AaveTokenV2Mock.sol b/libs/chains/src/eth/contracts/AAVE/mocks/AaveTokenV2Mock.sol deleted file mode 100644 index 5c56367eac5..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/mocks/AaveTokenV2Mock.sol +++ /dev/null @@ -1,7 +0,0 @@ -import {AaveTokenV2} from '@aave/aave-token/contracts/token/AaveTokenV2.sol'; - -contract AaveTokenV2Mock is AaveTokenV2 { - function mint(address minter, uint256 amount) external { - _mint(minter, amount); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/mocks/FlashAttacks.sol b/libs/chains/src/eth/contracts/AAVE/mocks/FlashAttacks.sol deleted file mode 100644 index fe26ecd25b0..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/mocks/FlashAttacks.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -import {IAaveGovernanceV2} from '../interfaces/IAaveGovernanceV2.sol'; -import {IERC20} from './interfaces/IERC20.sol'; -import {IExecutorWithTimelock} from '../interfaces/IExecutorWithTimelock.sol'; - - -contract FlashAttacks { - - IERC20 internal immutable TOKEN; - address internal immutable MINTER; - IAaveGovernanceV2 internal immutable GOV; - - constructor(address _token, address _MINTER, address _governance) { - TOKEN = IERC20(_token); - MINTER = _MINTER; - GOV = IAaveGovernanceV2(_governance); - } - - function flashVote(uint256 votePower, uint256 proposalId, bool support) external { - TOKEN.transferFrom(MINTER,address(this), votePower); - GOV.submitVote(proposalId, support); - TOKEN.transfer(MINTER, votePower); - } - - function flashVotePermit(uint256 votePower, uint256 proposalId, - bool support, - uint8 v, - bytes32 r, - bytes32 s) external { - TOKEN.transferFrom(MINTER, address(this), votePower); - GOV.submitVoteBySignature(proposalId, support, v, r, s); - TOKEN.transfer(MINTER, votePower); - } - - function flashProposal(uint256 proposalPower, IExecutorWithTimelock executor, - address[] memory targets, - uint256[] memory values, - string[] memory signatures, - bytes[] memory calldatas, - bool[] memory withDelegatecalls, - bytes32 ipfsHash) external { - TOKEN.transferFrom(MINTER, address(this),proposalPower); - GOV.create(executor, targets, values, signatures, calldatas, withDelegatecalls, ipfsHash); - TOKEN.transfer(MINTER, proposalPower); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/mocks/SelfdestructTransfer.sol b/libs/chains/src/eth/contracts/AAVE/mocks/SelfdestructTransfer.sol deleted file mode 100644 index 6fe8e0595b9..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/mocks/SelfdestructTransfer.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.6.12; - -contract SelfdestructTransfer { - function destroyAndTransfer(address payable to) external payable { - selfdestruct(to); - } -} diff --git a/libs/chains/src/eth/contracts/AAVE/mocks/interfaces/IERC20.sol b/libs/chains/src/eth/contracts/AAVE/mocks/interfaces/IERC20.sol deleted file mode 100644 index e4619fc279b..00000000000 --- a/libs/chains/src/eth/contracts/AAVE/mocks/interfaces/IERC20.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: agpl-3.0 -pragma solidity 0.7.5; -pragma abicoder v2; - -interface IERC20 { - function totalSupplyAt(uint256 blockNumber) external view returns (uint256); - - function balanceOf(address account) external view returns (uint256); - - function transferFrom( - address sender, - address recipient, - uint256 amount - ) external returns (bool); - - function transfer(address recipient, uint256 amount) external returns (bool); -} diff --git a/libs/chains/src/eth/contracts/Compound/ERC20VotesMock.sol b/libs/chains/src/eth/contracts/Compound/ERC20VotesMock.sol deleted file mode 100644 index 342824bc4c7..00000000000 --- a/libs/chains/src/eth/contracts/Compound/ERC20VotesMock.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-governance/token/ERC20/extensions/ERC20Votes.sol"; - -contract ERC20VotesMock is ERC20Votes { - constructor(string memory name, string memory symbol) ERC20(name, symbol) ERC20Permit(name) {} - - function mint(address account, uint256 amount) public { - _mint(account, amount); - } - - function burn(address account, uint256 amount) public { - _burn(account, amount); - } - - function getChainId() external view returns (uint256) { - return block.chainid; - } -} \ No newline at end of file diff --git a/libs/chains/src/eth/contracts/Compound/FeiDao.sol b/libs/chains/src/eth/contracts/Compound/FeiDao.sol deleted file mode 100644 index 8c8c939bc76..00000000000 --- a/libs/chains/src/eth/contracts/Compound/FeiDao.sol +++ /dev/null @@ -1,206 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.4; - -import '@openzeppelin/contracts-governance/governance/compatibility/GovernorCompatibilityBravo.sol'; -import '@openzeppelin/contracts-governance/governance/extensions/GovernorTimelockCompound.sol'; -import '@openzeppelin/contracts-governance/governance/extensions/GovernorVotesComp.sol'; -import '@openzeppelin/contracts-governance/token/ERC20/extensions/ERC20VotesComp.sol'; - -// Forked functionality from https://github.com/unlock-protocol/unlock/blob/master/smart-contracts/contracts/UnlockProtocolGovernor.sol - -contract FeiDAO is - GovernorCompatibilityBravo, - GovernorVotesComp, - GovernorTimelockCompound -{ - uint256 private _votingDelay = 1; // reduce voting delay to 1 block - uint256 private _votingPeriod = 13000; // extend voting period to 48h - uint256 private _quorum = 25_000_000e18; - uint256 private _proposalThreshold = 2_500_000e18; - - address private _guardian; - uint256 private _eta; - address public constant BACKUP_GOVERNOR = - 0x4C895973334Af8E06fd6dA4f723Ac24A5f259e6B; - uint256 public constant ROLLBACK_DEADLINE = 1635724800; // Nov 1, 2021 midnight UTC - - constructor( - ERC20VotesComp tribe, - ICompoundTimelock timelock, - address guardian - ) - GovernorVotesComp(tribe) - GovernorTimelockCompound(timelock) - Governor('Fei DAO') - { - _guardian = guardian; - } - - /* - * Events to track params changes - */ - event QuorumUpdated(uint256 oldQuorum, uint256 newQuorum); - event VotingDelayUpdated(uint256 oldVotingDelay, uint256 newVotingDelay); - event VotingPeriodUpdated(uint256 oldVotingPeriod, uint256 newVotingPeriod); - event ProposalThresholdUpdated( - uint256 oldProposalThreshold, - uint256 newProposalThreshold - ); - event RollbackQueued(uint256 eta); - event Rollback(); - - function votingDelay() public view override returns (uint256) { - return _votingDelay; - } - - function votingPeriod() public view override returns (uint256) { - return _votingPeriod; - } - - function quorum(uint256) public view override returns (uint256) { - return _quorum; - } - - function proposalThreshold() public view override returns (uint256) { - return _proposalThreshold; - } - - // governance setters - function setVotingDelay(uint256 newVotingDelay) public onlyGovernance { - uint256 oldVotingDelay = _votingDelay; - _votingDelay = newVotingDelay; - emit VotingDelayUpdated(oldVotingDelay, newVotingDelay); - } - - function setVotingPeriod(uint256 newVotingPeriod) public onlyGovernance { - uint256 oldVotingPeriod = _votingPeriod; - _votingPeriod = newVotingPeriod; - emit VotingPeriodUpdated(oldVotingPeriod, newVotingPeriod); - } - - function setQuorum(uint256 newQuorum) public onlyGovernance { - uint256 oldQuorum = _quorum; - _quorum = newQuorum; - emit QuorumUpdated(oldQuorum, newQuorum); - } - - function setProposalThreshold(uint256 newProposalThreshold) - public - onlyGovernance - { - uint256 oldProposalThreshold = _proposalThreshold; - _proposalThreshold = newProposalThreshold; - emit ProposalThresholdUpdated( - oldProposalThreshold, - newProposalThreshold - ); - } - - /// @notice one-time option to roll back the DAO to old GovernorAlpha - /// @dev guardian-only, and expires after the deadline. This function is here as a fallback in case something goes wrong. - function __rollback(uint256 eta) external { - require(msg.sender == _guardian, 'FeiDAO: caller not guardian'); - // Deleting guardian prevents multiple triggers of this function - _guardian = address(0); - - require(eta <= ROLLBACK_DEADLINE, 'FeiDAO: rollback expired'); - _eta = eta; - - ICompoundTimelock _timelock = ICompoundTimelock(payable(timelock())); - _timelock.queueTransaction( - timelock(), - 0, - 'setPendingAdmin(address)', - abi.encode(BACKUP_GOVERNOR), - eta - ); - - emit RollbackQueued(eta); - } - - /// @notice complete the rollback - function __executeRollback() external { - require(_eta <= block.timestamp, 'FeiDAO: too soon'); - require(_guardian == address(0), 'FeiDAO: no queue'); - - ICompoundTimelock _timelock = ICompoundTimelock(payable(timelock())); - _timelock.executeTransaction( - timelock(), - 0, - 'setPendingAdmin(address)', - abi.encode(BACKUP_GOVERNOR), - _eta - ); - - emit Rollback(); - } - - // The following functions are overrides required by Solidity. - function getVotes(address account, uint256 blockNumber) - public - view - override(IGovernor, GovernorVotesComp) - returns (uint256) - { - return super.getVotes(account, blockNumber); - } - - function state(uint256 proposalId) - public - view - override(IGovernor, Governor, GovernorTimelockCompound) - returns (ProposalState) - { - return super.state(proposalId); - } - - function propose( - address[] memory targets, - uint256[] memory values, - bytes[] memory calldatas, - string memory description - ) - public - override(IGovernor, Governor, GovernorCompatibilityBravo) - returns (uint256) - { - return super.propose(targets, values, calldatas, description); - } - - function _execute( - uint256 proposalId, - address[] memory targets, - uint256[] memory values, - bytes[] memory calldatas, - bytes32 descriptionHash - ) internal override(Governor, GovernorTimelockCompound) { - super._execute(proposalId, targets, values, calldatas, descriptionHash); - } - - function _cancel( - address[] memory targets, - uint256[] memory values, - bytes[] memory calldatas, - bytes32 descriptionHash - ) internal override(Governor, GovernorTimelockCompound) returns (uint256) { - return super._cancel(targets, values, calldatas, descriptionHash); - } - - function _executor() - internal - view - override(Governor, GovernorTimelockCompound) - returns (address) - { - return super._executor(); - } - - function supportsInterface(bytes4 interfaceId) - public - view - override(IERC165, Governor, GovernorTimelockCompound) - returns (bool) - { - return super.supportsInterface(interfaceId); - } -} diff --git a/libs/chains/src/eth/contracts/Compound/GovernorAlpha.sol b/libs/chains/src/eth/contracts/Compound/GovernorAlpha.sol deleted file mode 100644 index c131cc3489d..00000000000 --- a/libs/chains/src/eth/contracts/Compound/GovernorAlpha.sol +++ /dev/null @@ -1,547 +0,0 @@ -pragma solidity >=0.4.21 <0.7.0; -pragma experimental ABIEncoderV2; - - -contract GovernorAlpha { - /// @notice The name of this contract - string public constant name = "Marlin Governor Alpha"; - - /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed - function quorumVotes() public pure returns (uint256) { - return 8000e18; - } // 8000 MPond - - /// @notice The number of votes required in order for a voter to become a proposer - function proposalThreshold() public pure returns (uint256) { - return 1e18; - } // 1 MPond - - /// @notice The maximum number of actions that can be included in a proposal - function proposalMaxOperations() public pure returns (uint256) { - return 10; - } // 10 actions - - /// @notice The delay before voting on a proposal may take place, once proposed - function votingDelay() public pure returns (uint256) { - return 1; - } // 1 block - - /// @notice The duration of voting on a proposal, in blocks - function votingPeriod() public pure returns (uint256) { - return 17200; - } // ~3 days in blocks (assuming 15s blocks) - - /// @notice The address of the MPond Protocol Timelock - TimelockInterface public timelock; - - /// @notice The address of the MPond governance token - MPondInterface public MPond; - - /// @notice The address of the Governor Guardian - address public guardian; - - /// @notice The total number of proposals - uint256 public proposalCount; - - struct Proposal { - /// @notice Unique id for looking up a proposal - uint256 id; - /// @notice Creator of the proposal - address proposer; - /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds - uint256 eta; - /// @notice the ordered list of target addresses for calls to be made - address[] targets; - /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made - uint256[] values; - /// @notice The ordered list of function signatures to be called - string[] signatures; - /// @notice The ordered list of calldata to be passed to each call - bytes[] calldatas; - /// @notice The block at which voting begins: holders must delegate their votes prior to this block - uint256 startBlock; - /// @notice The block at which voting ends: votes must be cast prior to this block - uint256 endBlock; - /// @notice Current number of votes in favor of this proposal - uint256 forVotes; - /// @notice Current number of votes in opposition to this proposal - uint256 againstVotes; - /// @notice Flag marking whether the proposal has been canceled - bool canceled; - /// @notice Flag marking whether the proposal has been executed - bool executed; - /// @notice Receipts of ballots for the entire set of voters - mapping(address => Receipt) receipts; - } - - /// @notice Ballot receipt record for a voter - struct Receipt { - /// @notice Whether or not a vote has been cast - bool hasVoted; - /// @notice Whether or not the voter supports the proposal - bool support; - /// @notice The number of votes the voter had, which were cast - uint96 votes; - } - - /// @notice Possible states that a proposal may be in - enum ProposalState { - Pending, - Active, - Canceled, - Defeated, - Succeeded, - Queued, - Expired, - Executed - } - - /// @notice The official record of all proposals ever proposed - mapping(uint256 => Proposal) public proposals; - - /// @notice The latest proposal for each proposer - mapping(address => uint256) public latestProposalIds; - - /// @notice The EIP-712 typehash for the contract's domain - bytes32 public constant DOMAIN_TYPEHASH = keccak256( - "EIP712Domain(string name,uint256 chainId,address verifyingContract)" - ); - - /// @notice The EIP-712 typehash for the ballot struct used by the contract - bytes32 public constant BALLOT_TYPEHASH = keccak256( - "Ballot(uint256 proposalId,bool support)" - ); - - /// @notice An event emitted when a new proposal is created - event ProposalCreated( - uint256 id, - address proposer, - address[] targets, - uint256[] values, - string[] signatures, - bytes[] calldatas, - uint256 startBlock, - uint256 endBlock, - string description - ); - - /// @notice An event emitted when a vote has been cast on a proposal - event VoteCast( - address voter, - uint256 proposalId, - bool support, - uint256 votes - ); - - /// @notice An event emitted when a proposal has been canceled - event ProposalCanceled(uint256 id); - - /// @notice An event emitted when a proposal has been queued in the Timelock - event ProposalQueued(uint256 id, uint256 eta); - - /// @notice An event emitted when a proposal has been executed in the Timelock - event ProposalExecuted(uint256 id); - - constructor( - address timelock_, - address MPond_, - address guardian_ - ) public { - timelock = TimelockInterface(timelock_); - MPond = MPondInterface(MPond_); - guardian = guardian_; - } - - function propose( - address[] memory targets, - uint256[] memory values, - string[] memory signatures, - bytes[] memory calldatas, - string memory description - ) public returns (uint256) { - require( - MPond.getPriorVotes(msg.sender, sub256(block.number, 1)) > - proposalThreshold(), - "GovernorAlpha::propose: proposer votes below proposal threshold" - ); - require( - targets.length == values.length && - targets.length == signatures.length && - targets.length == calldatas.length, - "GovernorAlpha::propose: proposal function information arity mismatch" - ); - require( - targets.length != 0, - "GovernorAlpha::propose: must provide actions" - ); - require( - targets.length <= proposalMaxOperations(), - "GovernorAlpha::propose: too many actions" - ); - - uint256 latestProposalId = latestProposalIds[msg.sender]; - if (latestProposalId != 0) { - ProposalState proposersLatestProposalState = state( - latestProposalId - ); - require( - proposersLatestProposalState != ProposalState.Active, - "GovernorAlpha::propose: one live proposal per proposer, found an already active proposal" - ); - require( - proposersLatestProposalState != ProposalState.Pending, - "GovernorAlpha::propose: one live proposal per proposer, found an already pending proposal" - ); - } - - uint256 startBlock = add256(block.number, votingDelay()); - uint256 endBlock = add256(startBlock, votingPeriod()); - - proposalCount++; - Proposal memory newProposal = Proposal({ - id: proposalCount, - proposer: msg.sender, - eta: 0, - targets: targets, - values: values, - signatures: signatures, - calldatas: calldatas, - startBlock: startBlock, - endBlock: endBlock, - forVotes: 0, - againstVotes: 0, - canceled: false, - executed: false - }); - - proposals[newProposal.id] = newProposal; - latestProposalIds[newProposal.proposer] = newProposal.id; - - emit ProposalCreated( - newProposal.id, - msg.sender, - targets, - values, - signatures, - calldatas, - startBlock, - endBlock, - description - ); - return newProposal.id; - } - - function queue(uint256 proposalId) public { - require( - state(proposalId) == ProposalState.Succeeded, - "GovernorAlpha::queue: proposal can only be queued if it is succeeded" - ); - Proposal storage proposal = proposals[proposalId]; - uint256 eta = add256(block.timestamp, timelock.delay()); - for (uint256 i = 0; i < proposal.targets.length; i++) { - _queueOrRevert( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - eta - ); - } - proposal.eta = eta; - emit ProposalQueued(proposalId, eta); - } - - function _queueOrRevert( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 eta - ) internal { - require( - !timelock.queuedTransactions( - keccak256(abi.encode(target, value, signature, data, eta)) - ), - "GovernorAlpha::_queueOrRevert: proposal action already queued at eta" - ); - timelock.queueTransaction(target, value, signature, data, eta); - } - - function execute(uint256 proposalId) public payable { - require( - state(proposalId) == ProposalState.Queued, - "GovernorAlpha::execute: proposal can only be executed if it is queued" - ); - Proposal storage proposal = proposals[proposalId]; - proposal.executed = true; - for (uint256 i = 0; i < proposal.targets.length; i++) { - timelock.executeTransaction.value(proposal.values[i])( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - proposal.eta - ); - } - emit ProposalExecuted(proposalId); - } - - function cancel(uint256 proposalId) public { - ProposalState state = state(proposalId); - require( - state != ProposalState.Executed, - "GovernorAlpha::cancel: cannot cancel executed proposal" - ); - - Proposal storage proposal = proposals[proposalId]; - require( - msg.sender == guardian || - MPond.getPriorVotes( - proposal.proposer, - sub256(block.number, 1) - ) < - proposalThreshold(), - "GovernorAlpha::cancel: proposer above threshold" - ); - - proposal.canceled = true; - for (uint256 i = 0; i < proposal.targets.length; i++) { - timelock.cancelTransaction( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - proposal.eta - ); - } - - emit ProposalCanceled(proposalId); - } - - function getActions(uint256 proposalId) - public - view - returns ( - address[] memory targets, - uint256[] memory values, - string[] memory signatures, - bytes[] memory calldatas - ) - { - Proposal storage p = proposals[proposalId]; - return (p.targets, p.values, p.signatures, p.calldatas); - } - - function getReceipt(uint256 proposalId, address voter) - public - view - returns (Receipt memory) - { - return proposals[proposalId].receipts[voter]; - } - - function state(uint256 proposalId) public view returns (ProposalState) { - require( - proposalCount >= proposalId && proposalId > 0, - "GovernorAlpha::state: invalid proposal id" - ); - Proposal storage proposal = proposals[proposalId]; - if (proposal.canceled) { - return ProposalState.Canceled; - } else if (block.number <= proposal.startBlock) { - return ProposalState.Pending; - } else if (block.number <= proposal.endBlock) { - return ProposalState.Active; - } else if ( - proposal.forVotes <= proposal.againstVotes || - proposal.forVotes < quorumVotes() - ) { - return ProposalState.Defeated; - } else if (proposal.eta == 0) { - return ProposalState.Succeeded; - } else if (proposal.executed) { - return ProposalState.Executed; - } else if ( - block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD()) - ) { - return ProposalState.Expired; - } else { - return ProposalState.Queued; - } - } - - function castVote(uint256 proposalId, bool support) public { - return _castVote(msg.sender, proposalId, support); - } - - function castVoteBySig( - uint256 proposalId, - bool support, - uint8 v, - bytes32 r, - bytes32 s - ) public { - bytes32 domainSeparator = keccak256( - abi.encode( - DOMAIN_TYPEHASH, - keccak256(bytes(name)), - getChainId(), - address(this) - ) - ); - bytes32 structHash = keccak256( - abi.encode(BALLOT_TYPEHASH, proposalId, support) - ); - bytes32 digest = keccak256( - abi.encodePacked("\x19\x01", domainSeparator, structHash) - ); - address signatory = ecrecover(digest, v, r, s); - require( - signatory != address(0), - "GovernorAlpha::castVoteBySig: invalid signature" - ); - return _castVote(signatory, proposalId, support); - } - - function _castVote( - address voter, - uint256 proposalId, - bool support - ) internal { - require( - state(proposalId) == ProposalState.Active, - "GovernorAlpha::_castVote: voting is closed" - ); - Proposal storage proposal = proposals[proposalId]; - Receipt storage receipt = proposal.receipts[voter]; - require( - receipt.hasVoted == false, - "GovernorAlpha::_castVote: voter already voted" - ); - uint96 votes = MPond.getPriorVotes(voter, proposal.startBlock); - - if (support) { - proposal.forVotes = add256(proposal.forVotes, votes); - } else { - proposal.againstVotes = add256(proposal.againstVotes, votes); - } - - receipt.hasVoted = true; - receipt.support = support; - receipt.votes = votes; - - emit VoteCast(voter, proposalId, support, votes); - } - - function __acceptAdmin() public { - require( - msg.sender == guardian, - "GovernorAlpha::__acceptAdmin: sender must be gov guardian" - ); - timelock.acceptAdmin(); - } - - function __abdicate() public { - require( - msg.sender == guardian, - "GovernorAlpha::__abdicate: sender must be gov guardian" - ); - guardian = address(0); - } - - function __queueSetTimelockPendingAdmin( - address newPendingAdmin, - uint256 eta - ) public { - require( - msg.sender == guardian, - "GovernorAlpha::__queueSetTimelockPendingAdmin: sender must be gov guardian" - ); - timelock.queueTransaction( - address(timelock), - 0, - "setPendingAdmin(address)", - abi.encode(newPendingAdmin), - eta - ); - } - - function __executeSetTimelockPendingAdmin( - address newPendingAdmin, - uint256 eta - ) public { - require( - msg.sender == guardian, - "GovernorAlpha::__executeSetTimelockPendingAdmin: sender must be gov guardian" - ); - timelock.executeTransaction( - address(timelock), - 0, - "setPendingAdmin(address)", - abi.encode(newPendingAdmin), - eta - ); - } - - function add256(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - require(c >= a, "addition overflow"); - return c; - } - - function sub256(uint256 a, uint256 b) internal pure returns (uint256) { - require(b <= a, "subtraction underflow"); - return a - b; - } - - function getChainId() internal pure returns (uint256) { - uint256 chainId; - assembly { - chainId := chainid() - } - return chainId; - } -} - - -interface TimelockInterface { - function delay() external view returns (uint256); - - function GRACE_PERIOD() external view returns (uint256); - - function acceptAdmin() external; - - function queuedTransactions(bytes32 hash) external view returns (bool); - - function queueTransaction( - address target, - uint256 value, - string calldata signature, - bytes calldata data, - uint256 eta - ) external returns (bytes32); - - function cancelTransaction( - address target, - uint256 value, - string calldata signature, - bytes calldata data, - uint256 eta - ) external; - - function executeTransaction( - address target, - uint256 value, - string calldata signature, - bytes calldata data, - uint256 eta - ) external payable returns (bytes memory); -} - - -interface MPondInterface { - function getPriorVotes(address account, uint256 blockNumber) - external - view - returns (uint96); -} diff --git a/libs/chains/src/eth/contracts/Compound/GovernorAlphaMock.sol b/libs/chains/src/eth/contracts/Compound/GovernorAlphaMock.sol deleted file mode 100644 index 9364062b9fe..00000000000 --- a/libs/chains/src/eth/contracts/Compound/GovernorAlphaMock.sol +++ /dev/null @@ -1,547 +0,0 @@ -pragma solidity >=0.4.21 <0.7.0; -pragma experimental ABIEncoderV2; - - -contract GovernorAlphaMock { - /// @notice The name of this contract - string public constant name = "Marlin Governor Alpha"; - - /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed - function quorumVotes() public pure returns (uint256) { - return 2e18; - } // 2 MPond - - /// @notice The number of votes required in order for a voter to become a proposer - function proposalThreshold() public pure returns (uint256) { - return 1e18; - } // 1 MPond - - /// @notice The maximum number of actions that can be included in a proposal - function proposalMaxOperations() public pure returns (uint256) { - return 10; - } // 10 actions - - /// @notice The delay before voting on a proposal may take place, once proposed - function votingDelay() public pure returns (uint256) { - return 1; - } // 1 block - - /// @notice The duration of voting on a proposal, in blocks - function votingPeriod() public pure returns (uint256) { - return 12; - } // ~3 days in blocks (assuming 15s blocks) - - /// @notice The address of the MPond Protocol Timelock - TimelockInterface public timelock; - - /// @notice The address of the MPond governance token - MPondInterface public comp; - - /// @notice The address of the Governor Guardian - address public guardian; - - /// @notice The total number of proposals - uint256 public proposalCount; - - struct Proposal { - /// @notice Unique id for looking up a proposal - uint256 id; - /// @notice Creator of the proposal - address proposer; - /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds - uint256 eta; - /// @notice the ordered list of target addresses for calls to be made - address[] targets; - /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made - uint256[] values; - /// @notice The ordered list of function signatures to be called - string[] signatures; - /// @notice The ordered list of calldata to be passed to each call - bytes[] calldatas; - /// @notice The block at which voting begins: holders must delegate their votes prior to this block - uint256 startBlock; - /// @notice The block at which voting ends: votes must be cast prior to this block - uint256 endBlock; - /// @notice Current number of votes in favor of this proposal - uint256 forVotes; - /// @notice Current number of votes in opposition to this proposal - uint256 againstVotes; - /// @notice Flag marking whether the proposal has been canceled - bool canceled; - /// @notice Flag marking whether the proposal has been executed - bool executed; - /// @notice Receipts of ballots for the entire set of voters - mapping(address => Receipt) receipts; - } - - /// @notice Ballot receipt record for a voter - struct Receipt { - /// @notice Whether or not a vote has been cast - bool hasVoted; - /// @notice Whether or not the voter supports the proposal - bool support; - /// @notice The number of votes the voter had, which were cast - uint96 votes; - } - - /// @notice Possible states that a proposal may be in - enum ProposalState { - Pending, - Active, - Canceled, - Defeated, - Succeeded, - Queued, - Expired, - Executed - } - - /// @notice The official record of all proposals ever proposed - mapping(uint256 => Proposal) public proposals; - - /// @notice The latest proposal for each proposer - mapping(address => uint256) public latestProposalIds; - - /// @notice The EIP-712 typehash for the contract's domain - bytes32 public constant DOMAIN_TYPEHASH = keccak256( - "EIP712Domain(string name,uint256 chainId,address verifyingContract)" - ); - - /// @notice The EIP-712 typehash for the ballot struct used by the contract - bytes32 public constant BALLOT_TYPEHASH = keccak256( - "Ballot(uint256 proposalId,bool support)" - ); - - /// @notice An event emitted when a new proposal is created - event ProposalCreated( - uint256 id, - address proposer, - address[] targets, - uint256[] values, - string[] signatures, - bytes[] calldatas, - uint256 startBlock, - uint256 endBlock, - string description - ); - - /// @notice An event emitted when a vote has been cast on a proposal - event VoteCast( - address voter, - uint256 proposalId, - bool support, - uint256 votes - ); - - /// @notice An event emitted when a proposal has been canceled - event ProposalCanceled(uint256 id); - - /// @notice An event emitted when a proposal has been queued in the Timelock - event ProposalQueued(uint256 id, uint256 eta); - - /// @notice An event emitted when a proposal has been executed in the Timelock - event ProposalExecuted(uint256 id); - - constructor( - address timelock_, - address comp_, - address guardian_ - ) public { - timelock = TimelockInterface(timelock_); - comp = MPondInterface(comp_); - guardian = guardian_; - } - - function propose( - address[] memory targets, - uint256[] memory values, - string[] memory signatures, - bytes[] memory calldatas, - string memory description - ) public returns (uint256) { - require( - comp.getPriorVotes(msg.sender, sub256(block.number, 1)) > - proposalThreshold(), - "GovernorAlphaMock::propose: proposer votes below proposal threshold" - ); - require( - targets.length == values.length && - targets.length == signatures.length && - targets.length == calldatas.length, - "GovernorAlphaMock::propose: proposal function information arity mismatch" - ); - require( - targets.length != 0, - "GovernorAlphaMock::propose: must provide actions" - ); - require( - targets.length <= proposalMaxOperations(), - "GovernorAlphaMock::propose: too many actions" - ); - - uint256 latestProposalId = latestProposalIds[msg.sender]; - if (latestProposalId != 0) { - ProposalState proposersLatestProposalState = state( - latestProposalId - ); - require( - proposersLatestProposalState != ProposalState.Active, - "GovernorAlphaMock::propose: one live proposal per proposer, found an already active proposal" - ); - require( - proposersLatestProposalState != ProposalState.Pending, - "GovernorAlphaMock::propose: one live proposal per proposer, found an already pending proposal" - ); - } - - uint256 startBlock = add256(block.number, votingDelay()); - uint256 endBlock = add256(startBlock, votingPeriod()); - - proposalCount++; - Proposal memory newProposal = Proposal({ - id: proposalCount, - proposer: msg.sender, - eta: 0, - targets: targets, - values: values, - signatures: signatures, - calldatas: calldatas, - startBlock: startBlock, - endBlock: endBlock, - forVotes: 0, - againstVotes: 0, - canceled: false, - executed: false - }); - - proposals[newProposal.id] = newProposal; - latestProposalIds[newProposal.proposer] = newProposal.id; - - emit ProposalCreated( - newProposal.id, - msg.sender, - targets, - values, - signatures, - calldatas, - startBlock, - endBlock, - description - ); - return newProposal.id; - } - - function queue(uint256 proposalId) public { - require( - state(proposalId) == ProposalState.Succeeded, - "GovernorAlphaMock::queue: proposal can only be queued if it is succeeded" - ); - Proposal storage proposal = proposals[proposalId]; - uint256 eta = add256(block.timestamp, timelock.delay()); - for (uint256 i = 0; i < proposal.targets.length; i++) { - _queueOrRevert( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - eta - ); - } - proposal.eta = eta; - emit ProposalQueued(proposalId, eta); - } - - function _queueOrRevert( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 eta - ) internal { - require( - !timelock.queuedTransactions( - keccak256(abi.encode(target, value, signature, data, eta)) - ), - "GovernorAlphaMock::_queueOrRevert: proposal action already queued at eta" - ); - timelock.queueTransaction(target, value, signature, data, eta); - } - - function execute(uint256 proposalId) public payable { - require( - state(proposalId) == ProposalState.Queued, - "GovernorAlphaMock::execute: proposal can only be executed if it is queued" - ); - Proposal storage proposal = proposals[proposalId]; - proposal.executed = true; - for (uint256 i = 0; i < proposal.targets.length; i++) { - timelock.executeTransaction.value(proposal.values[i])( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - proposal.eta - ); - } - emit ProposalExecuted(proposalId); - } - - function cancel(uint256 proposalId) public { - ProposalState state = state(proposalId); - require( - state != ProposalState.Executed, - "GovernorAlphaMock::cancel: cannot cancel executed proposal" - ); - - Proposal storage proposal = proposals[proposalId]; - require( - msg.sender == guardian || - comp.getPriorVotes( - proposal.proposer, - sub256(block.number, 1) - ) < - proposalThreshold(), - "GovernorAlphaMock::cancel: proposer above threshold" - ); - - proposal.canceled = true; - for (uint256 i = 0; i < proposal.targets.length; i++) { - timelock.cancelTransaction( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - proposal.eta - ); - } - - emit ProposalCanceled(proposalId); - } - - function getActions(uint256 proposalId) - public - view - returns ( - address[] memory targets, - uint256[] memory values, - string[] memory signatures, - bytes[] memory calldatas - ) - { - Proposal storage p = proposals[proposalId]; - return (p.targets, p.values, p.signatures, p.calldatas); - } - - function getReceipt(uint256 proposalId, address voter) - public - view - returns (Receipt memory) - { - return proposals[proposalId].receipts[voter]; - } - - function state(uint256 proposalId) public view returns (ProposalState) { - require( - proposalCount >= proposalId && proposalId > 0, - "GovernorAlphaMock::state: invalid proposal id" - ); - Proposal storage proposal = proposals[proposalId]; - if (proposal.canceled) { - return ProposalState.Canceled; - } else if (block.number <= proposal.startBlock) { - return ProposalState.Pending; - } else if (block.number <= proposal.endBlock) { - return ProposalState.Active; - } else if ( - proposal.forVotes <= proposal.againstVotes || - proposal.forVotes < quorumVotes() - ) { - return ProposalState.Defeated; - } else if (proposal.eta == 0) { - return ProposalState.Succeeded; - } else if (proposal.executed) { - return ProposalState.Executed; - } else if ( - block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD()) - ) { - return ProposalState.Expired; - } else { - return ProposalState.Queued; - } - } - - function castVote(uint256 proposalId, bool support) public { - return _castVote(msg.sender, proposalId, support); - } - - function castVoteBySig( - uint256 proposalId, - bool support, - uint8 v, - bytes32 r, - bytes32 s - ) public { - bytes32 domainSeparator = keccak256( - abi.encode( - DOMAIN_TYPEHASH, - keccak256(bytes(name)), - getChainId(), - address(this) - ) - ); - bytes32 structHash = keccak256( - abi.encode(BALLOT_TYPEHASH, proposalId, support) - ); - bytes32 digest = keccak256( - abi.encodePacked("\x19\x01", domainSeparator, structHash) - ); - address signatory = ecrecover(digest, v, r, s); - require( - signatory != address(0), - "GovernorAlphaMock::castVoteBySig: invalid signature" - ); - return _castVote(signatory, proposalId, support); - } - - function _castVote( - address voter, - uint256 proposalId, - bool support - ) internal { - require( - state(proposalId) == ProposalState.Active, - "GovernorAlphaMock::_castVote: voting is closed" - ); - Proposal storage proposal = proposals[proposalId]; - Receipt storage receipt = proposal.receipts[voter]; - require( - receipt.hasVoted == false, - "GovernorAlphaMock::_castVote: voter already voted" - ); - uint96 votes = comp.getPriorVotes(voter, proposal.startBlock); - - if (support) { - proposal.forVotes = add256(proposal.forVotes, votes); - } else { - proposal.againstVotes = add256(proposal.againstVotes, votes); - } - - receipt.hasVoted = true; - receipt.support = support; - receipt.votes = votes; - - emit VoteCast(voter, proposalId, support, votes); - } - - function __acceptAdmin() public { - require( - msg.sender == guardian, - "GovernorAlphaMock::__acceptAdmin: sender must be gov guardian" - ); - timelock.acceptAdmin(); - } - - function __abdicate() public { - require( - msg.sender == guardian, - "GovernorAlphaMock::__abdicate: sender must be gov guardian" - ); - guardian = address(0); - } - - function __queueSetTimelockPendingAdmin( - address newPendingAdmin, - uint256 eta - ) public { - require( - msg.sender == guardian, - "GovernorAlphaMock::__queueSetTimelockPendingAdmin: sender must be gov guardian" - ); - timelock.queueTransaction( - address(timelock), - 0, - "setPendingAdmin(address)", - abi.encode(newPendingAdmin), - eta - ); - } - - function __executeSetTimelockPendingAdmin( - address newPendingAdmin, - uint256 eta - ) public { - require( - msg.sender == guardian, - "GovernorAlphaMock::__executeSetTimelockPendingAdmin: sender must be gov guardian" - ); - timelock.executeTransaction( - address(timelock), - 0, - "setPendingAdmin(address)", - abi.encode(newPendingAdmin), - eta - ); - } - - function add256(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - require(c >= a, "addition overflow"); - return c; - } - - function sub256(uint256 a, uint256 b) internal pure returns (uint256) { - require(b <= a, "subtraction underflow"); - return a - b; - } - - function getChainId() internal pure returns (uint256) { - uint256 chainId; - assembly { - chainId := chainid() - } - return chainId; - } -} - - -interface TimelockInterface { - function delay() external view returns (uint256); - - function GRACE_PERIOD() external view returns (uint256); - - function acceptAdmin() external; - - function queuedTransactions(bytes32 hash) external view returns (bool); - - function queueTransaction( - address target, - uint256 value, - string calldata signature, - bytes calldata data, - uint256 eta - ) external returns (bytes32); - - function cancelTransaction( - address target, - uint256 value, - string calldata signature, - bytes calldata data, - uint256 eta - ) external; - - function executeTransaction( - address target, - uint256 value, - string calldata signature, - bytes calldata data, - uint256 eta - ) external payable returns (bytes memory); -} - - -interface MPondInterface { - function getPriorVotes(address account, uint256 blockNumber) - external - view - returns (uint96); -} diff --git a/libs/chains/src/eth/contracts/Compound/GovernorBravoDelegate.sol b/libs/chains/src/eth/contracts/Compound/GovernorBravoDelegate.sol deleted file mode 100644 index 161b2d9fb10..00000000000 --- a/libs/chains/src/eth/contracts/Compound/GovernorBravoDelegate.sol +++ /dev/null @@ -1,598 +0,0 @@ -pragma solidity ^0.5.16; -pragma experimental ABIEncoderV2; - -import './GovernorBravoInterfaces.sol'; - -contract GovernorBravoDelegate is - GovernorBravoDelegateStorageV1, - GovernorBravoEvents -{ - /// @notice The name of this contract - string public constant name = 'Compound Governor Bravo'; - - /// @notice The minimum setable proposal threshold - uint256 public constant MIN_PROPOSAL_THRESHOLD = 50000e18; // 50,000 Comp - - /// @notice The maximum setable proposal threshold - uint256 public constant MAX_PROPOSAL_THRESHOLD = 100000e18; //100,000 Comp - - /// @notice The minimum setable voting period - uint256 public constant MIN_VOTING_PERIOD = 5760; // About 24 hours - - /// @notice The max setable voting period - uint256 public constant MAX_VOTING_PERIOD = 80640; // About 2 weeks - - /// @notice The min setable voting delay - uint256 public constant MIN_VOTING_DELAY = 1; - - /// @notice The max setable voting delay - uint256 public constant MAX_VOTING_DELAY = 40320; // About 1 week - - /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed - uint256 public constant quorumVotes = 400000e18; // 400,000 = 4% of Comp - - /// @notice The maximum number of actions that can be included in a proposal - uint256 public constant proposalMaxOperations = 10; // 10 actions - - /// @notice The EIP-712 typehash for the contract's domain - bytes32 public constant DOMAIN_TYPEHASH = - keccak256( - 'EIP712Domain(string name,uint256 chainId,address verifyingContract)' - ); - - /// @notice The EIP-712 typehash for the ballot struct used by the contract - bytes32 public constant BALLOT_TYPEHASH = - keccak256('Ballot(uint256 proposalId,uint8 support)'); - - /** - * @notice Used to initialize the contract during delegator contructor - * @param timelock_ The address of the Timelock - * @param comp_ The address of the COMP token - * @param votingPeriod_ The initial voting period - * @param votingDelay_ The initial voting delay - * @param proposalThreshold_ The initial proposal threshold - */ - function initialize( - address timelock_, - address comp_, - uint256 votingPeriod_, - uint256 votingDelay_, - uint256 proposalThreshold_ - ) public { - require( - address(timelock) == address(0), - 'GovernorBravo::initialize: can only initialize once' - ); - require(msg.sender == admin, 'GovernorBravo::initialize: admin only'); - require( - timelock_ != address(0), - 'GovernorBravo::initialize: invalid timelock address' - ); - require( - comp_ != address(0), - 'GovernorBravo::initialize: invalid comp address' - ); - require( - votingPeriod_ >= MIN_VOTING_PERIOD && - votingPeriod_ <= MAX_VOTING_PERIOD, - 'GovernorBravo::initialize: invalid voting period' - ); - require( - votingDelay_ >= MIN_VOTING_DELAY && - votingDelay_ <= MAX_VOTING_DELAY, - 'GovernorBravo::initialize: invalid voting delay' - ); - require( - proposalThreshold_ >= MIN_PROPOSAL_THRESHOLD && - proposalThreshold_ <= MAX_PROPOSAL_THRESHOLD, - 'GovernorBravo::initialize: invalid proposal threshold' - ); - - timelock = TimelockInterface(timelock_); - comp = CompInterface(comp_); - votingPeriod = votingPeriod_; - votingDelay = votingDelay_; - proposalThreshold = proposalThreshold_; - } - - /** - * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold - * @param targets Target addresses for proposal calls - * @param values Eth values for proposal calls - * @param signatures Function signatures for proposal calls - * @param calldatas Calldatas for proposal calls - * @param description String description of the proposal - * @return Proposal id of new proposal - */ - function propose( - address[] memory targets, - uint256[] memory values, - string[] memory signatures, - bytes[] memory calldatas, - string memory description - ) public returns (uint256) { - // Reject proposals before initiating as Governor - require( - initialProposalId != 0, - 'GovernorBravo::propose: Governor Bravo not active' - ); - require( - comp.getPriorVotes(msg.sender, sub256(block.number, 1)) > - proposalThreshold, - 'GovernorBravo::propose: proposer votes below proposal threshold' - ); - require( - targets.length == values.length && - targets.length == signatures.length && - targets.length == calldatas.length, - 'GovernorBravo::propose: proposal function information arity mismatch' - ); - require( - targets.length != 0, - 'GovernorBravo::propose: must provide actions' - ); - require( - targets.length <= proposalMaxOperations, - 'GovernorBravo::propose: too many actions' - ); - - uint256 latestProposalId = latestProposalIds[msg.sender]; - if (latestProposalId != 0) { - ProposalState proposersLatestProposalState = state( - latestProposalId - ); - require( - proposersLatestProposalState != ProposalState.Active, - 'GovernorBravo::propose: one live proposal per proposer, found an already active proposal' - ); - require( - proposersLatestProposalState != ProposalState.Pending, - 'GovernorBravo::propose: one live proposal per proposer, found an already pending proposal' - ); - } - - uint256 startBlock = add256(block.number, votingDelay); - uint256 endBlock = add256(startBlock, votingPeriod); - - proposalCount++; - Proposal memory newProposal = Proposal({ - id: proposalCount, - proposer: msg.sender, - eta: 0, - targets: targets, - values: values, - signatures: signatures, - calldatas: calldatas, - startBlock: startBlock, - endBlock: endBlock, - forVotes: 0, - againstVotes: 0, - abstainVotes: 0, - canceled: false, - executed: false - }); - - proposals[newProposal.id] = newProposal; - latestProposalIds[newProposal.proposer] = newProposal.id; - - emit ProposalCreated( - newProposal.id, - msg.sender, - targets, - values, - signatures, - calldatas, - startBlock, - endBlock, - description - ); - return newProposal.id; - } - - /** - * @notice Queues a proposal of state succeeded - * @param proposalId The id of the proposal to queue - */ - function queue(uint256 proposalId) external { - require( - state(proposalId) == ProposalState.Succeeded, - 'GovernorBravo::queue: proposal can only be queued if it is succeeded' - ); - Proposal storage proposal = proposals[proposalId]; - uint256 eta = add256(block.timestamp, timelock.delay()); - for (uint256 i = 0; i < proposal.targets.length; i++) { - queueOrRevertInternal( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - eta - ); - } - proposal.eta = eta; - emit ProposalQueued(proposalId, eta); - } - - function queueOrRevertInternal( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 eta - ) internal { - require( - !timelock.queuedTransactions( - keccak256(abi.encode(target, value, signature, data, eta)) - ), - 'GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta' - ); - timelock.queueTransaction(target, value, signature, data, eta); - } - - /** - * @notice Executes a queued proposal if eta has passed - * @param proposalId The id of the proposal to execute - */ - function execute(uint256 proposalId) external payable { - require( - state(proposalId) == ProposalState.Queued, - 'GovernorBravo::execute: proposal can only be executed if it is queued' - ); - Proposal storage proposal = proposals[proposalId]; - proposal.executed = true; - for (uint256 i = 0; i < proposal.targets.length; i++) { - timelock.executeTransaction.value(proposal.values[i])( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - proposal.eta - ); - } - emit ProposalExecuted(proposalId); - } - - /** - * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold - * @param proposalId The id of the proposal to cancel - */ - function cancel(uint256 proposalId) external { - require( - state(proposalId) != ProposalState.Executed, - 'GovernorBravo::cancel: cannot cancel executed proposal' - ); - - Proposal storage proposal = proposals[proposalId]; - require( - msg.sender == proposal.proposer || - comp.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < - proposalThreshold, - 'GovernorBravo::cancel: proposer above threshold' - ); - - proposal.canceled = true; - for (uint256 i = 0; i < proposal.targets.length; i++) { - timelock.cancelTransaction( - proposal.targets[i], - proposal.values[i], - proposal.signatures[i], - proposal.calldatas[i], - proposal.eta - ); - } - - emit ProposalCanceled(proposalId); - } - - /** - * @notice Gets actions of a proposal - * @param proposalId the id of the proposal - * @return Targets, values, signatures, and calldatas of the proposal actions - */ - function getActions(uint256 proposalId) - external - view - returns ( - address[] memory targets, - uint256[] memory values, - string[] memory signatures, - bytes[] memory calldatas - ) - { - Proposal storage p = proposals[proposalId]; - return (p.targets, p.values, p.signatures, p.calldatas); - } - - /** - * @notice Gets the receipt for a voter on a given proposal - * @param proposalId the id of proposal - * @param voter The address of the voter - * @return The voting receipt - */ - function getReceipt(uint256 proposalId, address voter) - external - view - returns (Receipt memory) - { - return proposals[proposalId].receipts[voter]; - } - - /** - * @notice Gets the state of a proposal - * @param proposalId The id of the proposal - * @return Proposal state - */ - function state(uint256 proposalId) public view returns (ProposalState) { - require( - proposalCount >= proposalId && proposalId > initialProposalId, - 'GovernorBravo::state: invalid proposal id' - ); - Proposal storage proposal = proposals[proposalId]; - if (proposal.canceled) { - return ProposalState.Canceled; - } else if (block.number <= proposal.startBlock) { - return ProposalState.Pending; - } else if (block.number <= proposal.endBlock) { - return ProposalState.Active; - } else if ( - proposal.forVotes <= proposal.againstVotes || - proposal.forVotes < quorumVotes - ) { - return ProposalState.Defeated; - } else if (proposal.eta == 0) { - return ProposalState.Succeeded; - } else if (proposal.executed) { - return ProposalState.Executed; - } else if ( - block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD()) - ) { - return ProposalState.Expired; - } else { - return ProposalState.Queued; - } - } - - /** - * @notice Cast a vote for a proposal - * @param proposalId The id of the proposal to vote on - * @param support The support value for the vote. 0=against, 1=for, 2=abstain - */ - function castVote(uint256 proposalId, uint8 support) external { - emit VoteCast( - msg.sender, - proposalId, - support, - castVoteInternal(msg.sender, proposalId, support), - '' - ); - } - - /** - * @notice Cast a vote for a proposal with a reason - * @param proposalId The id of the proposal to vote on - * @param support The support value for the vote. 0=against, 1=for, 2=abstain - * @param reason The reason given for the vote by the voter - */ - function castVoteWithReason( - uint256 proposalId, - uint8 support, - string calldata reason - ) external { - emit VoteCast( - msg.sender, - proposalId, - support, - castVoteInternal(msg.sender, proposalId, support), - reason - ); - } - - /** - * @notice Cast a vote for a proposal by signature - * @dev External function that accepts EIP-712 signatures for voting on proposals. - */ - function castVoteBySig( - uint256 proposalId, - uint8 support, - uint8 v, - bytes32 r, - bytes32 s - ) external { - bytes32 domainSeparator = keccak256( - abi.encode( - DOMAIN_TYPEHASH, - keccak256(bytes(name)), - getChainIdInternal(), - address(this) - ) - ); - bytes32 structHash = keccak256( - abi.encode(BALLOT_TYPEHASH, proposalId, support) - ); - bytes32 digest = keccak256( - abi.encodePacked('\x19\x01', domainSeparator, structHash) - ); - address signatory = ecrecover(digest, v, r, s); - require( - signatory != address(0), - 'GovernorBravo::castVoteBySig: invalid signature' - ); - emit VoteCast( - signatory, - proposalId, - support, - castVoteInternal(signatory, proposalId, support), - '' - ); - } - - /** - * @notice Internal function that caries out voting logic - * @param voter The voter that is casting their vote - * @param proposalId The id of the proposal to vote on - * @param support The support value for the vote. 0=against, 1=for, 2=abstain - * @return The number of votes cast - */ - function castVoteInternal( - address voter, - uint256 proposalId, - uint8 support - ) internal returns (uint96) { - require( - state(proposalId) == ProposalState.Active, - 'GovernorBravo::castVoteInternal: voting is closed' - ); - require( - support <= 2, - 'GovernorBravo::castVoteInternal: invalid vote type' - ); - Proposal storage proposal = proposals[proposalId]; - Receipt storage receipt = proposal.receipts[voter]; - require( - receipt.hasVoted == false, - 'GovernorBravo::castVoteInternal: voter already voted' - ); - uint96 votes = comp.getPriorVotes(voter, proposal.startBlock); - - if (support == 0) { - proposal.againstVotes = add256(proposal.againstVotes, votes); - } else if (support == 1) { - proposal.forVotes = add256(proposal.forVotes, votes); - } else if (support == 2) { - proposal.abstainVotes = add256(proposal.abstainVotes, votes); - } - - receipt.hasVoted = true; - receipt.support = support; - receipt.votes = votes; - - return votes; - } - - /** - * @notice Admin function for setting the voting delay - * @param newVotingDelay new voting delay, in blocks - */ - function _setVotingDelay(uint256 newVotingDelay) external { - require( - msg.sender == admin, - 'GovernorBravo::_setVotingDelay: admin only' - ); - require( - newVotingDelay >= MIN_VOTING_DELAY && - newVotingDelay <= MAX_VOTING_DELAY, - 'GovernorBravo::_setVotingDelay: invalid voting delay' - ); - uint256 oldVotingDelay = votingDelay; - votingDelay = newVotingDelay; - - emit VotingDelaySet(oldVotingDelay, votingDelay); - } - - /** - * @notice Admin function for setting the voting period - * @param newVotingPeriod new voting period, in blocks - */ - function _setVotingPeriod(uint256 newVotingPeriod) external { - require( - msg.sender == admin, - 'GovernorBravo::_setVotingPeriod: admin only' - ); - require( - newVotingPeriod >= MIN_VOTING_PERIOD && - newVotingPeriod <= MAX_VOTING_PERIOD, - 'GovernorBravo::_setVotingPeriod: invalid voting period' - ); - uint256 oldVotingPeriod = votingPeriod; - votingPeriod = newVotingPeriod; - - emit VotingPeriodSet(oldVotingPeriod, votingPeriod); - } - - /** - * @notice Admin function for setting the proposal threshold - * @dev newProposalThreshold must be greater than the hardcoded min - * @param newProposalThreshold new proposal threshold - */ - function _setProposalThreshold(uint256 newProposalThreshold) external { - require( - msg.sender == admin, - 'GovernorBravo::_setProposalThreshold: admin only' - ); - require( - newProposalThreshold >= MIN_PROPOSAL_THRESHOLD && - newProposalThreshold <= MAX_PROPOSAL_THRESHOLD, - 'GovernorBravo::_setProposalThreshold: invalid proposal threshold' - ); - uint256 oldProposalThreshold = proposalThreshold; - proposalThreshold = newProposalThreshold; - - emit ProposalThresholdSet(oldProposalThreshold, proposalThreshold); - } - - /** - * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. - * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. - * @param newPendingAdmin New pending admin. - */ - function _setPendingAdmin(address newPendingAdmin) external { - // Check caller = admin - require( - msg.sender == admin, - 'GovernorBravo:_setPendingAdmin: admin only' - ); - - // Save current value, if any, for inclusion in log - address oldPendingAdmin = pendingAdmin; - - // Store pendingAdmin with value newPendingAdmin - pendingAdmin = newPendingAdmin; - - // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin) - emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin); - } - - /** - * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin - * @dev Admin function for pending admin to accept role and update admin - */ - function _acceptAdmin() external { - // Check caller is pendingAdmin and pendingAdmin ≠ address(0) - require( - msg.sender == pendingAdmin && msg.sender != address(0), - 'GovernorBravo:_acceptAdmin: pending admin only' - ); - - // Save current values for inclusion in log - address oldAdmin = admin; - address oldPendingAdmin = pendingAdmin; - - // Store admin with value pendingAdmin - admin = pendingAdmin; - - // Clear the pending value - pendingAdmin = address(0); - - emit NewAdmin(oldAdmin, admin); - emit NewPendingAdmin(oldPendingAdmin, pendingAdmin); - } - - function add256(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - require(c >= a, 'addition overflow'); - return c; - } - - function sub256(uint256 a, uint256 b) internal pure returns (uint256) { - require(b <= a, 'subtraction underflow'); - return a - b; - } - - function getChainIdInternal() internal pure returns (uint256) { - uint256 chainId; - assembly { - chainId := chainid() - } - return chainId; - } -} diff --git a/libs/chains/src/eth/contracts/Compound/GovernorBravoDelegateMock.sol b/libs/chains/src/eth/contracts/Compound/GovernorBravoDelegateMock.sol deleted file mode 100644 index 08b99bcf7ed..00000000000 --- a/libs/chains/src/eth/contracts/Compound/GovernorBravoDelegateMock.sol +++ /dev/null @@ -1,378 +0,0 @@ -pragma solidity ^0.5.16; -pragma experimental ABIEncoderV2; - -import "./GovernorBravoInterfaces.sol"; -import "hardhat/console.sol"; - -// TODO fill out modifications to this contract -contract GovernorBravoDelegateMock is GovernorBravoDelegateStorageV1, GovernorBravoEvents { - - /// @notice The name of this contract - string public constant name = "Compound Governor Bravo"; - - /// @notice The minimum setable proposal threshold - uint public constant MIN_PROPOSAL_THRESHOLD = 1; // 50,000 Comp - - /// @notice The maximum setable proposal threshold - uint public constant MAX_PROPOSAL_THRESHOLD = 100000e18; //100,000 Comp - - /// @notice The minimum setable voting period - uint public constant MIN_VOTING_PERIOD = 5760; // About 24 hours - - /// @notice The max setable voting period - uint public constant MAX_VOTING_PERIOD = 80640; // About 2 weeks - - /// @notice The min setable voting delay - uint public constant MIN_VOTING_DELAY = 1; - - /// @notice The max setable voting delay - uint public constant MAX_VOTING_DELAY = 40320; // About 1 week - - /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed - uint public constant quorumVotes = 1; // Changed from 400k to 1 - - /// @notice The maximum number of actions that can be included in a proposal - uint public constant proposalMaxOperations = 10; // 10 actions - - /// @notice The EIP-712 typehash for the contract's domain - bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); - - /// @notice The EIP-712 typehash for the ballot struct used by the contract - bytes32 public constant BALLOT_TYPEHASH = keccak256("Ballot(uint256 proposalId,uint8 support)"); - - /** - * @notice Used to initialize the contract during delegator contructor - * @param timelock_ The address of the Timelock - * @param comp_ The address of the COMP token - * @param votingPeriod_ The initial voting period - * @param votingDelay_ The initial voting delay - * @param proposalThreshold_ The initial proposal threshold - */ - function initialize(address timelock_, address comp_, uint votingPeriod_, uint votingDelay_, uint proposalThreshold_) public { - require(address(timelock) == address(0), "GovernorBravo::initialize: can only initialize once"); - require(msg.sender == admin, "GovernorBravo::initialize: admin only"); - require(timelock_ != address(0), "GovernorBravo::initialize: invalid timelock address"); - require(comp_ != address(0), "GovernorBravo::initialize: invalid comp address"); - require(votingPeriod_ >= MIN_VOTING_PERIOD && votingPeriod_ <= MAX_VOTING_PERIOD, "GovernorBravo::initialize: invalid voting period"); - require(votingDelay_ >= MIN_VOTING_DELAY && votingDelay_ <= MAX_VOTING_DELAY, "GovernorBravo::initialize: invalid voting delay"); - require(proposalThreshold_ >= MIN_PROPOSAL_THRESHOLD && proposalThreshold_ <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::initialize: invalid proposal threshold"); - - timelock = TimelockInterface(timelock_); - comp = CompInterface(comp_); - votingPeriod = votingPeriod_; - votingDelay = votingDelay_; - proposalThreshold = proposalThreshold_; - } - - /** - * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold - * @param targets Target addresses for proposal calls - * @param values Eth values for proposal calls - * @param signatures Function signatures for proposal calls - * @param calldatas Calldatas for proposal calls - * @param description String description of the proposal - * @return Proposal id of new proposal - */ - function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) { - // Reject proposals before initiating as Governor - require(address(comp) != address(0), "GovernorBravo::propose: Governor Bravo not initialized"); - require(initialProposalId != 0, "GovernorBravo::propose: Governor Bravo not active"); - require(comp.getPriorVotes(msg.sender, sub256(block.number, 1)) > proposalThreshold, "GovernorBravo::propose: proposer votes below proposal threshold"); - require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorBravo::propose: proposal function information arity mismatch"); - require(targets.length != 0, "GovernorBravo::propose: must provide actions"); - require(targets.length <= proposalMaxOperations, "GovernorBravo::propose: too many actions"); - - uint latestProposalId = latestProposalIds[msg.sender]; - if (latestProposalId != 0) { - ProposalState proposersLatestProposalState = state(latestProposalId); - require(proposersLatestProposalState != ProposalState.Active, "GovernorBravo::propose: one live proposal per proposer, found an already active proposal"); - require(proposersLatestProposalState != ProposalState.Pending, "GovernorBravo::propose: one live proposal per proposer, found an already pending proposal"); - } - - uint startBlock = add256(block.number, votingDelay); - uint endBlock = add256(startBlock, votingPeriod); - - proposalCount++; - Proposal memory newProposal = Proposal({ - id: proposalCount, - proposer: msg.sender, - eta: 0, - targets: targets, - values: values, - signatures: signatures, - calldatas: calldatas, - startBlock: startBlock, - endBlock: endBlock, - forVotes: 0, - againstVotes: 0, - abstainVotes: 0, - canceled: false, - executed: false - }); - - proposals[newProposal.id] = newProposal; - latestProposalIds[newProposal.proposer] = newProposal.id; - - emit ProposalCreated(newProposal.id, msg.sender, targets, values, signatures, calldatas, startBlock, endBlock, description); - return newProposal.id; - } - - /** - * @notice Queues a proposal of state succeeded - * @param proposalId The id of the proposal to queue - */ - function queue(uint proposalId) external { - require(state(proposalId) == ProposalState.Succeeded, "GovernorBravo::queue: proposal can only be queued if it is succeeded"); - Proposal storage proposal = proposals[proposalId]; - uint eta = add256(block.timestamp, timelock.delay()); - for (uint i = 0; i < proposal.targets.length; i++) { - queueOrRevertInternal(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta); - } - proposal.eta = eta; - emit ProposalQueued(proposalId, eta); - } - - function queueOrRevertInternal(address target, uint value, string memory signature, bytes memory data, uint eta) internal { - require(!timelock.queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), "GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta"); - timelock.queueTransaction(target, value, signature, data, eta); - } - - /** - * @notice Executes a queued proposal if eta has passed - * @param proposalId The id of the proposal to execute - */ - function execute(uint proposalId) external payable { - require(state(proposalId) == ProposalState.Queued, "GovernorBravo::execute: proposal can only be executed if it is queued"); - Proposal storage proposal = proposals[proposalId]; - proposal.executed = true; - for (uint i = 0; i < proposal.targets.length; i++) { - timelock.executeTransaction.value(proposal.values[i])(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta); - } - emit ProposalExecuted(proposalId); - } - - /** - * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold - * @param proposalId The id of the proposal to cancel - */ - function cancel(uint proposalId) external { - require(state(proposalId) != ProposalState.Executed, "GovernorBravo::cancel: cannot cancel executed proposal"); - - Proposal storage proposal = proposals[proposalId]; - require(msg.sender == proposal.proposer || comp.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold, "GovernorBravo::cancel: proposer above threshold"); - - proposal.canceled = true; - for (uint i = 0; i < proposal.targets.length; i++) { - timelock.cancelTransaction(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta); - } - - emit ProposalCanceled(proposalId); - } - - /** - * @notice Gets actions of a proposal - * @param proposalId the id of the proposal - * @return Targets, values, signatures, and calldatas of the proposal actions - */ - function getActions(uint proposalId) external view returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas) { - Proposal storage p = proposals[proposalId]; - return (p.targets, p.values, p.signatures, p.calldatas); - } - - /** - * @notice Gets the receipt for a voter on a given proposal - * @param proposalId the id of proposal - * @param voter The address of the voter - * @return The voting receipt - */ - function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) { - return proposals[proposalId].receipts[voter]; - } - - /** - * @notice Gets the state of a proposal - * @param proposalId The id of the proposal - * @return Proposal state - */ - function state(uint proposalId) public view returns (ProposalState) { - require(proposalCount >= proposalId && proposalId > initialProposalId, "GovernorBravo::state: invalid proposal id"); - Proposal storage proposal = proposals[proposalId]; - if (proposal.canceled) { - return ProposalState.Canceled; - } else if (block.number <= proposal.startBlock) { - return ProposalState.Pending; - } else if (block.number <= proposal.endBlock) { - return ProposalState.Active; - } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) { - return ProposalState.Defeated; - } else if (proposal.eta == 0) { - return ProposalState.Succeeded; - } else if (proposal.executed) { - return ProposalState.Executed; - } else if (block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD())) { - return ProposalState.Expired; - } else { - return ProposalState.Queued; - } - } - - /** - * @notice Cast a vote for a proposal - * @param proposalId The id of the proposal to vote on - * @param support The support value for the vote. 0=against, 1=for, 2=abstain - */ - function castVote(uint proposalId, uint8 support) external { - emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), ""); - } - - /** - * @notice Cast a vote for a proposal with a reason - * @param proposalId The id of the proposal to vote on - * @param support The support value for the vote. 0=against, 1=for, 2=abstain - * @param reason The reason given for the vote by the voter - */ - function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external { - emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason); - } - - /** - * @notice Cast a vote for a proposal by signature - * @dev External function that accepts EIP-712 signatures for voting on proposals. - */ - function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external { - bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))); - bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support)); - bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); - address signatory = ecrecover(digest, v, r, s); - require(signatory != address(0), "GovernorBravo::castVoteBySig: invalid signature"); - emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), ""); - } - - /** - * @notice Internal function that caries out voting logic - * @param voter The voter that is casting their vote - * @param proposalId The id of the proposal to vote on - * @param support The support value for the vote. 0=against, 1=for, 2=abstain - * @return The number of votes cast - */ - function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) { - require(state(proposalId) == ProposalState.Active, "GovernorBravo::castVoteInternal: voting is closed"); - require(support <= 2, "GovernorBravo::castVoteInternal: invalid vote type"); - Proposal storage proposal = proposals[proposalId]; - Receipt storage receipt = proposal.receipts[voter]; - require(receipt.hasVoted == false, "GovernorBravo::castVoteInternal: voter already voted"); - uint96 votes = comp.getPriorVotes(voter, proposal.startBlock); - - if (support == 0) { - proposal.againstVotes = add256(proposal.againstVotes, votes); - } else if (support == 1) { - proposal.forVotes = add256(proposal.forVotes, votes); - } else if (support == 2) { - proposal.abstainVotes = add256(proposal.abstainVotes, votes); - } - - receipt.hasVoted = true; - receipt.support = support; - receipt.votes = votes; - - return votes; - } - - /** - * @notice Admin function for setting the voting delay - * @param newVotingDelay new voting delay, in blocks - */ - function _setVotingDelay(uint newVotingDelay) external { - require(msg.sender == admin, "GovernorBravo::_setVotingDelay: admin only"); - require(newVotingDelay >= MIN_VOTING_DELAY && newVotingDelay <= MAX_VOTING_DELAY, "GovernorBravo::_setVotingDelay: invalid voting delay"); - uint oldVotingDelay = votingDelay; - votingDelay = newVotingDelay; - - emit VotingDelaySet(oldVotingDelay,votingDelay); - } - - /** - * @notice Admin function for setting the voting period - * @param newVotingPeriod new voting period, in blocks - */ - function _setVotingPeriod(uint newVotingPeriod) external { - require(msg.sender == admin, "GovernorBravo::_setVotingPeriod: admin only"); - require(newVotingPeriod >= MIN_VOTING_PERIOD && newVotingPeriod <= MAX_VOTING_PERIOD, "GovernorBravo::_setVotingPeriod: invalid voting period"); - uint oldVotingPeriod = votingPeriod; - votingPeriod = newVotingPeriod; - - emit VotingPeriodSet(oldVotingPeriod, votingPeriod); - } - - /** - * @notice Admin function for setting the proposal threshold - * @dev newProposalThreshold must be greater than the hardcoded min - * @param newProposalThreshold new proposal threshold - */ - function _setProposalThreshold(uint newProposalThreshold) external { - require(msg.sender == admin, "GovernorBravo::_setProposalThreshold: admin only"); - require(newProposalThreshold >= MIN_PROPOSAL_THRESHOLD && newProposalThreshold <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::_setProposalThreshold: invalid proposal threshold"); - uint oldProposalThreshold = proposalThreshold; - proposalThreshold = newProposalThreshold; - - emit ProposalThresholdSet(oldProposalThreshold, proposalThreshold); - } - - /** - * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. - * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. - * @param newPendingAdmin New pending admin. - */ - function _setPendingAdmin(address newPendingAdmin) external { - // Check caller = admin - require(msg.sender == admin, "GovernorBravo:_setPendingAdmin: admin only"); - - // Save current value, if any, for inclusion in log - address oldPendingAdmin = pendingAdmin; - - // Store pendingAdmin with value newPendingAdmin - pendingAdmin = newPendingAdmin; - - // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin) - emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin); - } - - /** - * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin - * @dev Admin function for pending admin to accept role and update admin - */ - function _acceptAdmin() external { - // Check caller is pendingAdmin and pendingAdmin ≠ address(0) - require(msg.sender == pendingAdmin && msg.sender != address(0), "GovernorBravo:_acceptAdmin: pending admin only"); - - // Save current values for inclusion in log - address oldAdmin = admin; - address oldPendingAdmin = pendingAdmin; - - // Store admin with value pendingAdmin - admin = pendingAdmin; - - // Clear the pending value - pendingAdmin = address(0); - - emit NewAdmin(oldAdmin, admin); - emit NewPendingAdmin(oldPendingAdmin, pendingAdmin); - } - - function add256(uint256 a, uint256 b) internal pure returns (uint) { - uint c = a + b; - require(c >= a, "addition overflow"); - return c; - } - - function sub256(uint256 a, uint256 b) internal pure returns (uint) { - require(b <= a, "subtraction underflow"); - return a - b; - } - - function getChainIdInternal() internal pure returns (uint) { - uint chainId; - assembly { chainId := chainid() } - return chainId; - } -} \ No newline at end of file diff --git a/libs/chains/src/eth/contracts/Compound/GovernorBravoDelegator.sol b/libs/chains/src/eth/contracts/Compound/GovernorBravoDelegator.sol deleted file mode 100644 index a3f12377667..00000000000 --- a/libs/chains/src/eth/contracts/Compound/GovernorBravoDelegator.sol +++ /dev/null @@ -1,79 +0,0 @@ -pragma solidity ^0.5.16; -pragma experimental ABIEncoderV2; - -import "./GovernorBravoInterfaces.sol"; - -contract GovernorBravoDelegator is GovernorBravoDelegatorStorage, GovernorBravoEvents { - constructor( - address timelock_, - address comp_, - address admin_, - address implementation_, - uint votingPeriod_, - uint votingDelay_, - uint proposalThreshold_) public { - - // Admin set to msg.sender for initialization - admin = msg.sender; - - delegateTo(implementation_, abi.encodeWithSignature("initialize(address,address,uint256,uint256,uint256)", - timelock_, - comp_, - votingPeriod_, - votingDelay_, - proposalThreshold_)); - - _setImplementation(implementation_); - - admin = admin_; - } - - - /** - * @notice Called by the admin to update the implementation of the delegator - * @param implementation_ The address of the new implementation for delegation - */ - function _setImplementation(address implementation_) public { - require(msg.sender == admin, "GovernorBravoDelegator::_setImplementation: admin only"); - require(implementation_ != address(0), "GovernorBravoDelegator::_setImplementation: invalid implementation address"); - - address oldImplementation = implementation; - implementation = implementation_; - - emit NewImplementation(oldImplementation, implementation); - } - - /** - * @notice Internal method to delegate execution to another contract - * @dev It returns to the external caller whatever the implementation returns or forwards reverts - * @param callee The contract to delegatecall - * @param data The raw data to delegatecall - */ - function delegateTo(address callee, bytes memory data) internal { - (bool success, bytes memory returnData) = callee.delegatecall(data); - assembly { - if eq(success, 0) { - revert(add(returnData, 0x20), returndatasize) - } - } - } - - /** - * @dev Delegates execution to an implementation contract. - * It returns to the external caller whatever the implementation returns - * or forwards reverts. - */ - function () external payable { - // delegate all other functions to current implementation - (bool success, ) = implementation.delegatecall(msg.data); - - assembly { - let free_mem_ptr := mload(0x40) - returndatacopy(free_mem_ptr, 0, returndatasize) - - switch success - case 0 { revert(free_mem_ptr, returndatasize) } - default { return(free_mem_ptr, returndatasize) } - } - } -} \ No newline at end of file diff --git a/libs/chains/src/eth/contracts/Compound/GovernorBravoImmutable.sol b/libs/chains/src/eth/contracts/Compound/GovernorBravoImmutable.sol deleted file mode 100644 index 0d3db7fead9..00000000000 --- a/libs/chains/src/eth/contracts/Compound/GovernorBravoImmutable.sol +++ /dev/null @@ -1,37 +0,0 @@ -pragma solidity ^0.5.16; -pragma experimental ABIEncoderV2; - -import "./GovernorBravoDelegateMock.sol"; - -contract GovernorBravoImmutable is GovernorBravoDelegateMock { - - constructor( - address timelock_, - address comp_, - address admin_, - uint votingPeriod_, - uint votingDelay_, - uint proposalThreshold_) public { - admin = msg.sender; - initialize(timelock_, comp_, votingPeriod_, votingDelay_, proposalThreshold_); - - admin = admin_; - } - - - function initialize(address timelock_, address comp_, uint votingPeriod_, uint votingDelay_, uint proposalThreshold_) public { - require(msg.sender == admin, "GovernorBravo::initialize: admin only"); - require(address(timelock) == address(0), "GovernorBravo::initialize: can only initialize once"); - - timelock = TimelockInterface(timelock_); - comp = CompInterface(comp_); - votingPeriod = votingPeriod_; - votingDelay = votingDelay_; - proposalThreshold = proposalThreshold_; - } - - function _initiate() public { - proposalCount = 1; - initialProposalId = 1; - } -} \ No newline at end of file diff --git a/libs/chains/src/eth/contracts/Compound/GovernorBravoInterfaces.sol b/libs/chains/src/eth/contracts/Compound/GovernorBravoInterfaces.sol deleted file mode 100644 index 153e5af11c8..00000000000 --- a/libs/chains/src/eth/contracts/Compound/GovernorBravoInterfaces.sol +++ /dev/null @@ -1,184 +0,0 @@ -pragma solidity ^0.5.16; -pragma experimental ABIEncoderV2; - - -contract GovernorBravoEvents { - /// @notice An event emitted when a new proposal is created - event ProposalCreated(uint id, address proposer, address[] targets, uint[] values, string[] signatures, bytes[] calldatas, uint startBlock, uint endBlock, string description); - - /// @notice An event emitted when a vote has been cast on a proposal - /// @param voter The address which casted a vote - /// @param proposalId The proposal id which was voted on - /// @param support Support value for the vote. 0=against, 1=for, 2=abstain - /// @param votes Number of votes which were cast by the voter - /// @param reason The reason given for the vote by the voter - event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason); - - /// @notice An event emitted when a proposal has been canceled - event ProposalCanceled(uint id); - - /// @notice An event emitted when a proposal has been queued in the Timelock - event ProposalQueued(uint id, uint eta); - - /// @notice An event emitted when a proposal has been executed in the Timelock - event ProposalExecuted(uint id); - - /// @notice An event emitted when the voting delay is set - event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay); - - /// @notice An event emitted when the voting period is set - event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod); - - /// @notice Emitted when implementation is changed - event NewImplementation(address oldImplementation, address newImplementation); - - /// @notice Emitted when proposal threshold is set - event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold); - - /// @notice Emitted when pendingAdmin is changed - event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin); - - /// @notice Emitted when pendingAdmin is accepted, which means admin is updated - event NewAdmin(address oldAdmin, address newAdmin); -} - -contract GovernorBravoDelegatorStorage { - /// @notice Administrator for this contract - address public admin; - - /// @notice Pending administrator for this contract - address public pendingAdmin; - - /// @notice Active brains of Governor - address public implementation; -} - - -/** - * @title Storage for Governor Bravo Delegate - * @notice For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new - * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention - * GovernorBravoDelegateStorageVX. - */ -contract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage { - - /// @notice The delay before voting on a proposal may take place, once proposed, in blocks - uint public votingDelay; - - /// @notice The duration of voting on a proposal, in blocks - uint public votingPeriod; - - /// @notice The number of votes required in order for a voter to become a proposer - uint public proposalThreshold; - - /// @notice Initial proposal id set at become - uint public initialProposalId; - - /// @notice The total number of proposals - uint public proposalCount; - - /// @notice The address of the Compound Protocol Timelock - TimelockInterface public timelock; - - /// @notice The address of the Compound governance token - CompInterface public comp; - - /// @notice The official record of all proposals ever proposed - mapping (uint => Proposal) public proposals; - - /// @notice The latest proposal for each proposer - mapping (address => uint) public latestProposalIds; - - - struct Proposal { - /// @notice Unique id for looking up a proposal - uint id; - - /// @notice Creator of the proposal - address proposer; - - /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds - uint eta; - - /// @notice the ordered list of target addresses for calls to be made - address[] targets; - - /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made - uint[] values; - - /// @notice The ordered list of function signatures to be called - string[] signatures; - - /// @notice The ordered list of calldata to be passed to each call - bytes[] calldatas; - - /// @notice The block at which voting begins: holders must delegate their votes prior to this block - uint startBlock; - - /// @notice The block at which voting ends: votes must be cast prior to this block - uint endBlock; - - /// @notice Current number of votes in favor of this proposal - uint forVotes; - - /// @notice Current number of votes in opposition to this proposal - uint againstVotes; - - /// @notice Current number of votes for abstaining for this proposal - uint abstainVotes; - - /// @notice Flag marking whether the proposal has been canceled - bool canceled; - - /// @notice Flag marking whether the proposal has been executed - bool executed; - - /// @notice Receipts of ballots for the entire set of voters - mapping (address => Receipt) receipts; - } - - /// @notice Ballot receipt record for a voter - struct Receipt { - /// @notice Whether or not a vote has been cast - bool hasVoted; - - /// @notice Whether or not the voter supports the proposal or abstains - uint8 support; - - /// @notice The number of votes the voter had, which were cast - uint96 votes; - } - - /// @notice Possible states that a proposal may be in - enum ProposalState { - Pending, - Active, - Canceled, - Defeated, - Succeeded, - Queued, - Expired, - Executed - } -} - -interface TimelockInterface { - function delay() external view returns (uint); - function GRACE_PERIOD() external view returns (uint); - function acceptAdmin() external; - function queuedTransactions(bytes32 hash) external view returns (bool); - function queueTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external returns (bytes32); - function cancelTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external; - function executeTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external payable returns (bytes memory); -} - -interface CompInterface { - function getPriorVotes(address account, uint blockNumber) external view returns (uint96); -} - -/* -interface GovernorAlpha { - /// @notice The total number of proposals - function proposalCount() external returns (uint); -} -*/ \ No newline at end of file diff --git a/libs/chains/src/eth/contracts/Compound/GovernorMock.sol b/libs/chains/src/eth/contracts/Compound/GovernorMock.sol deleted file mode 100644 index 895ce730936..00000000000 --- a/libs/chains/src/eth/contracts/Compound/GovernorMock.sol +++ /dev/null @@ -1,128 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-governance/governance/extensions/GovernorTimelockControl.sol"; -import "@openzeppelin/contracts-governance/governance/extensions/GovernorCountingSimple.sol"; -import "@openzeppelin/contracts-governance/governance/extensions/GovernorVotesQuorumFraction.sol"; -import "@openzeppelin/contracts-governance/governance/extensions/GovernorProposalThreshold.sol"; - -contract GovernorMock is GovernorTimelockControl, GovernorProposalThreshold, GovernorVotesQuorumFraction, GovernorCountingSimple { - uint256 immutable _votingDelay; - uint256 immutable _votingPeriod; - uint256 immutable _proposalThreshold; - - constructor( - string memory name_, - ERC20Votes token_, - uint256 votingDelay_, - uint256 votingPeriod_, - TimelockController timelock_, - uint256 quorumNumerator_, - uint256 proposalThreshold_ - ) - Governor(name_) - GovernorTimelockControl(timelock_) - GovernorVotes(token_) - GovernorVotesQuorumFraction(quorumNumerator_) - { - _votingDelay = votingDelay_; - _votingPeriod = votingPeriod_; - _proposalThreshold = proposalThreshold_; - } - - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override(Governor, GovernorTimelockControl) - returns (bool) - { - return super.supportsInterface(interfaceId); - } - - function votingDelay() public view override returns (uint256) { - return _votingDelay; - } - - function votingPeriod() public view override returns (uint256) { - return _votingPeriod; - } - - function quorum(uint256 blockNumber) - public - view - override(IGovernor, GovernorVotesQuorumFraction) - returns (uint256) - { - return super.quorum(blockNumber); - } - - function cancel( - address[] memory targets, - uint256[] memory values, - bytes[] memory calldatas, - bytes32 descriptionHash - ) public returns (uint256 proposalId) { - return _cancel(targets, values, calldatas, descriptionHash); - } - - /** - * Overriden functions - */ - function proposalThreshold() public view virtual override returns (uint256) { - return _proposalThreshold; - } - - function propose( - address[] memory targets, - uint256[] memory values, - bytes[] memory calldatas, - string memory description - ) public virtual override(IGovernor, Governor, GovernorProposalThreshold) returns (uint256) { - return super.propose(targets, values, calldatas, description); - } - - function state(uint256 proposalId) - public - view - virtual - override(Governor, GovernorTimelockControl) - returns (ProposalState) - { - return super.state(proposalId); - } - - function _execute( - uint256 proposalId, - address[] memory targets, - uint256[] memory values, - bytes[] memory calldatas, - bytes32 descriptionHash - ) internal virtual override(Governor, GovernorTimelockControl) { - super._execute(proposalId, targets, values, calldatas, descriptionHash); - } - - function _cancel( - address[] memory targets, - uint256[] memory values, - bytes[] memory calldatas, - bytes32 descriptionHash - ) internal virtual override(Governor, GovernorTimelockControl) returns (uint256 proposalId) { - return super._cancel(targets, values, calldatas, descriptionHash); - } - - function getVotes(address account, uint256 blockNumber) - public - view - virtual - override(IGovernor, GovernorVotes) - returns (uint256) - { - return super.getVotes(account, blockNumber); - } - - function _executor() internal view virtual override(Governor, GovernorTimelockControl) returns (address) { - return super._executor(); - } -} \ No newline at end of file diff --git a/libs/chains/src/eth/contracts/Compound/MPond.sol b/libs/chains/src/eth/contracts/Compound/MPond.sol deleted file mode 100644 index 5d9db10860f..00000000000 --- a/libs/chains/src/eth/contracts/Compound/MPond.sol +++ /dev/null @@ -1,578 +0,0 @@ -pragma solidity >=0.4.21 <0.7.0; -pragma experimental ABIEncoderV2; - - -contract MPond { - /// @notice EIP-20 token name for this token - string public constant name = "Marlin Governance Token"; - - /// @notice EIP-20 token symbol for this token - string public constant symbol = "MPOND"; - - /// @notice EIP-20 token decimals for this token - uint8 public constant decimals = 18; - - /// @notice Total number of tokens in circulation - uint256 public constant totalSupply = 10000e18; // 10k MPond - uint256 public constant bridgeSupply = 7000e18; // 3k MPond - /// @notice Allowance amounts on behalf of others - mapping(address => mapping(address => uint96)) internal allowances; - - /// @notice Official record of token balances for each account - mapping(address => uint96) internal balances; - - /// @notice A record of each accounts delegate - mapping(address => mapping(address => uint96)) public delegates; - - /// @notice A checkpoint for marking number of votes from a given block - struct Checkpoint { - uint32 fromBlock; - uint96 votes; - } - - /// @notice A record of votes checkpoints for each account, by index - mapping(address => mapping(uint32 => Checkpoint)) public checkpoints; - - /// @notice The number of checkpoints for each account - mapping(address => uint32) public numCheckpoints; - - /// @notice The EIP-712 typehash for the contract's domain - bytes32 public constant DOMAIN_TYPEHASH = keccak256( - "EIP712Domain(string name,uint256 chainId,address verifyingContract)" - ); - - /// @notice The EIP-712 typehash for the delegation struct used by the contract - bytes32 public constant DELEGATION_TYPEHASH = keccak256( - "Delegation(address delegatee,uint256 nonce,uint256 expiry,uint96 amount)" - ); - - /// @notice The EIP-712 typehash for the delegation struct used by the contract - bytes32 public constant UNDELEGATION_TYPEHASH = keccak256( - "Unelegation(address delegatee,uint256 nonce,uint256 expiry,uint96 amount)" - ); - /// @notice A record of states for signing / validating signatures - mapping(address => uint256) public nonces; - - /// customized params - address public admin; - mapping(address => bool) public isWhiteListed; - bool public enableAllTranfers = true; - - /// @notice An event thats emitted when an account changes its delegate - event DelegateChanged( - address indexed delegator, - address indexed fromDelegate, - address indexed toDelegate - ); - - /// @notice An event thats emitted when a delegate account's vote balance changes - event DelegateVotesChanged( - address indexed delegate, - uint256 previousBalance, - uint256 newBalance - ); - - /// @notice The standard EIP-20 transfer event - event Transfer(address indexed from, address indexed to, uint256 amount); - - /// @notice The standard EIP-20 approval event - event Approval( - address indexed owner, - address indexed spender, - uint256 amount - ); - - /** - * @notice Construct a new Comp token - * @param account The initial account to grant all the tokens - */ - constructor(address account, address bridge) public { - require( - account != bridge, - "Bridge and accoutn should not be the same address" - ); - balances[bridge] = uint96(bridgeSupply); - delegates[bridge][address(0)] = uint96(bridgeSupply); - isWhiteListed[bridge] = true; - emit Transfer(address(0), bridge, bridgeSupply); - - uint96 remainingSupply = sub96( - uint96(totalSupply), - uint96(bridgeSupply), - "Comp: Subtraction overflow in the constructor" - ); - balances[account] = remainingSupply; - delegates[account][address(0)] = remainingSupply; - isWhiteListed[account] = true; - emit Transfer(address(0), account, uint256(remainingSupply)); - } - - function addWhiteListAddress(address _address) external returns (bool) { - require(msg.sender == admin, "Only admin can whitelist"); - isWhiteListed[_address] = true; - return true; - } - - function enableAllTransfers() external returns (bool) { - require(msg.sender == admin, "Only enable can enable all transfers"); - enableAllTranfers = true; - return true; - } - - function isWhiteListedTransfer(address _address1, address _address2) - public - view - returns (bool) - { - return - (isWhiteListed[_address1] || isWhiteListed[_address2]) || - enableAllTranfers; - } - - /** - * @notice Get the number of tokens `spender` is approved to spend on behalf of `account` - * @param account The address of the account holding the funds - * @param spender The address of the account spending the funds - * @return The number of tokens approved - */ - function allowance(address account, address spender) - external - view - returns (uint256) - { - return allowances[account][spender]; - } - - /** - * @notice Approve `spender` to transfer up to `amount` from `src` - * @dev This will overwrite the approval amount for `spender` - * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) - * @param spender The address of the account which may transfer tokens - * @param rawAmount The number of tokens that are approved (2^256-1 means infinite) - * @return Whether or not the approval succeeded - */ - function approve(address spender, uint256 rawAmount) - external - returns (bool) - { - uint96 amount; - if (rawAmount == uint256(-1)) { - amount = uint96(-1); - } else { - amount = safe96(rawAmount, "Comp::approve: amount exceeds 96 bits"); - } - - allowances[msg.sender][spender] = amount; - - emit Approval(msg.sender, spender, amount); - return true; - } - - /** - * @notice Get the number of tokens held by the `account` - * @param account The address of the account to get the balance of - * @return The number of tokens held - */ - function balanceOf(address account) external view returns (uint256) { - return balances[account]; - } - - /** - * @notice Transfer `amount` tokens from `msg.sender` to `dst` - * @param dst The address of the destination account - * @param rawAmount The number of tokens to transfer - * @return Whether or not the transfer succeeded - */ - function transfer(address dst, uint256 rawAmount) external returns (bool) { - require( - isWhiteListedTransfer(msg.sender, dst), - "Atleast of the address (msg.sender or dst) should be whitelisted" - ); - uint96 amount = safe96( - rawAmount, - "Comp::transfer: amount exceeds 96 bits" - ); - _transferTokens(msg.sender, dst, amount); - return true; - } - - /** - * @notice Transfer `amount` tokens from `src` to `dst` - * @param src The address of the source account - * @param dst The address of the destination account - * @param rawAmount The number of tokens to transfer - * @return Whether or not the transfer succeeded - */ - function transferFrom( - address src, - address dst, - uint256 rawAmount - ) external returns (bool) { - require( - isWhiteListedTransfer(msg.sender, dst), - "Atleast of the address (src or dst) should be whitelisted" - ); - address spender = msg.sender; - uint96 spenderAllowance = allowances[src][spender]; - uint96 amount = safe96( - rawAmount, - "Comp::approve: amount exceeds 96 bits" - ); - - if (spender != src && spenderAllowance != uint96(-1)) { - uint96 newAllowance = sub96( - spenderAllowance, - amount, - "Comp::transferFrom: transfer amount exceeds spender allowance" - ); - allowances[src][spender] = newAllowance; - - emit Approval(src, spender, newAllowance); - } - - _transferTokens(src, dst, amount); - return true; - } - - /** - * @notice Delegate votes from `msg.sender` to `delegatee` - * @param delegatee The address to delegate votes to - */ - function delegate(address delegatee, uint96 amount) public { - return _delegate(msg.sender, delegatee, amount); - } - - function undelegate(address delegatee, uint96 amount) public { - return _undelegate(msg.sender, delegatee, amount); - } - - /** - * @notice Delegates votes from signatory to `delegatee` - * @param delegatee The address to delegate votes to - * @param nonce The contract state required to match the signature - * @param expiry The time at which to expire the signature - * @param v The recovery byte of the signature - * @param r Half of the ECDSA signature pair - * @param s Half of the ECDSA signature pair - */ - function delegateBySig( - address delegatee, - uint256 nonce, - uint256 expiry, - uint8 v, - bytes32 r, - bytes32 s, - uint96 amount - ) public { - bytes32 domainSeparator = keccak256( - abi.encode( - DOMAIN_TYPEHASH, - keccak256(bytes(name)), - getChainId(), - address(this) - ) - ); - bytes32 structHash = keccak256( - abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry, amount) - ); - bytes32 digest = keccak256( - abi.encodePacked("\x19\x01", domainSeparator, structHash) - ); - address signatory = ecrecover(digest, v, r, s); - require( - signatory != address(0), - "Comp::delegateBySig: invalid signature" - ); - require( - nonce == nonces[signatory]++, - "Comp::delegateBySig: invalid nonce" - ); - require(now <= expiry, "Comp::delegateBySig: signature expired"); - return _delegate(signatory, delegatee, amount); - } - - function undelegateBySig( - address delegatee, - uint256 nonce, - uint256 expiry, - uint8 v, - bytes32 r, - bytes32 s, - uint96 amount - ) public { - bytes32 domainSeparator = keccak256( - abi.encode( - DOMAIN_TYPEHASH, - keccak256(bytes(name)), - getChainId(), - address(this) - ) - ); - bytes32 structHash = keccak256( - abi.encode(UNDELEGATION_TYPEHASH, delegatee, nonce, expiry, amount) - ); - bytes32 digest = keccak256( - abi.encodePacked("\x19\x01", domainSeparator, structHash) - ); - address signatory = ecrecover(digest, v, r, s); - require( - signatory != address(0), - "Comp::undelegateBySig: invalid signature" - ); - require( - nonce == nonces[signatory]++, - "Comp::undelegateBySig: invalid nonce" - ); - require(now <= expiry, "Comp::undelegateBySig: signature expired"); - return _undelegate(signatory, delegatee, amount); - } - - /** - * @notice Gets the current votes balance for `account` - * @param account The address to get votes balance - * @return The number of current votes for `account` - */ - function getCurrentVotes(address account) external view returns (uint96) { - uint32 nCheckpoints = numCheckpoints[account]; - return - nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; - } - - /** - * @notice Determine the prior number of votes for an account as of a block number - * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. - * @param account The address of the account to check - * @param blockNumber The block number to get the vote balance at - * @return The number of votes the account had as of the given block - */ - function getPriorVotes(address account, uint256 blockNumber) - public - view - returns (uint96) - { - require( - blockNumber < block.number, - "Comp::getPriorVotes: not yet determined" - ); - - uint32 nCheckpoints = numCheckpoints[account]; - if (nCheckpoints == 0) { - return 0; - } - - // First check most recent balance - if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { - return checkpoints[account][nCheckpoints - 1].votes; - } - - // Next check implicit zero balance - if (checkpoints[account][0].fromBlock > blockNumber) { - return 0; - } - - uint32 lower = 0; - uint32 upper = nCheckpoints - 1; - while (upper > lower) { - uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow - Checkpoint memory cp = checkpoints[account][center]; - if (cp.fromBlock == blockNumber) { - return cp.votes; - } else if (cp.fromBlock < blockNumber) { - lower = center; - } else { - upper = center - 1; - } - } - return checkpoints[account][lower].votes; - } - - function _delegate( - address delegator, - address delegatee, - uint96 amount - ) internal { - delegates[delegator][address(0)] = sub96( - delegates[delegator][address(0)], - amount, - "Comp: delegates underflow" - ); - delegates[delegator][delegatee] = add96( - delegates[delegator][delegatee], - amount, - "Comp: delegates overflow" - ); - - emit DelegateChanged(delegator, address(0), delegatee); - - _moveDelegates(address(0), delegatee, amount); - } - - function _undelegate( - address delegator, - address delegatee, - uint96 amount - ) internal { - delegates[delegator][delegatee] = sub96( - delegates[delegator][delegatee], - amount, - "Comp: undelegates underflow" - ); - delegates[delegator][address(0)] = add96( - delegates[delegator][address(0)], - amount, - "Comp: delegates underflow" - ); - emit DelegateChanged(delegator, delegatee, address(0)); - _moveDelegates(delegatee, address(0), amount); - } - - function _transferTokens( - address src, - address dst, - uint96 amount - ) internal { - require( - src != address(0), - "Comp::_transferTokens: cannot transfer from the zero address" - ); - require( - delegates[src][address(0)] >= amount, - "Comp: _transferTokens: undelegated amount should be greater than transfer amount" - ); - require( - dst != address(0), - "Comp::_transferTokens: cannot transfer to the zero address" - ); - - balances[src] = sub96( - balances[src], - amount, - "Comp::_transferTokens: transfer amount exceeds balance" - ); - delegates[src][address(0)] = sub96( - delegates[src][address(0)], - amount, - "Comp: _tranferTokens: undelegate subtraction error" - ); - - balances[dst] = add96( - balances[dst], - amount, - "Comp::_transferTokens: transfer amount overflows" - ); - delegates[dst][address(0)] = add96( - delegates[dst][address(0)], - amount, - "Comp: _transferTokens: undelegate addition error" - ); - emit Transfer(src, dst, amount); - - // _moveDelegates(delegates[src], delegates[dst], amount); - } - - function _moveDelegates( - address srcRep, - address dstRep, - uint96 amount - ) internal { - if (srcRep != dstRep && amount > 0) { - if (srcRep != address(0)) { - uint32 srcRepNum = numCheckpoints[srcRep]; - uint96 srcRepOld = srcRepNum > 0 - ? checkpoints[srcRep][srcRepNum - 1].votes - : 0; - uint96 srcRepNew = sub96( - srcRepOld, - amount, - "Comp::_moveVotes: vote amount underflows" - ); - _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); - } - - if (dstRep != address(0)) { - uint32 dstRepNum = numCheckpoints[dstRep]; - uint96 dstRepOld = dstRepNum > 0 - ? checkpoints[dstRep][dstRepNum - 1].votes - : 0; - uint96 dstRepNew = add96( - dstRepOld, - amount, - "Comp::_moveVotes: vote amount overflows" - ); - _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); - } - } - } - - function _writeCheckpoint( - address delegatee, - uint32 nCheckpoints, - uint96 oldVotes, - uint96 newVotes - ) internal { - uint32 blockNumber = safe32( - block.number, - "Comp::_writeCheckpoint: block number exceeds 32 bits" - ); - - if ( - nCheckpoints > 0 && - checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber - ) { - checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; - } else { - checkpoints[delegatee][nCheckpoints] = Checkpoint( - blockNumber, - newVotes - ); - numCheckpoints[delegatee] = nCheckpoints + 1; - } - - emit DelegateVotesChanged(delegatee, oldVotes, newVotes); - } - - function safe32(uint256 n, string memory errorMessage) - internal - pure - returns (uint32) - { - require(n < 2**32, errorMessage); - return uint32(n); - } - - function safe96(uint256 n, string memory errorMessage) - internal - pure - returns (uint96) - { - require(n < 2**96, errorMessage); - return uint96(n); - } - - function add96( - uint96 a, - uint96 b, - string memory errorMessage - ) internal pure returns (uint96) { - uint96 c = a + b; - require(c >= a, errorMessage); - return c; - } - - function sub96( - uint96 a, - uint96 b, - string memory errorMessage - ) internal pure returns (uint96) { - require(b <= a, errorMessage); - return a - b; - } - - function getChainId() internal pure returns (uint256) { - uint256 chainId; - assembly { - chainId := chainid() - } - return chainId; - } -} diff --git a/libs/chains/src/eth/contracts/Compound/Timelock.sol b/libs/chains/src/eth/contracts/Compound/Timelock.sol deleted file mode 100644 index 792258a45b2..00000000000 --- a/libs/chains/src/eth/contracts/Compound/Timelock.sol +++ /dev/null @@ -1,206 +0,0 @@ -pragma solidity >=0.4.21 <0.7.0; - -import "@openzeppelin/contracts/math/SafeMath.sol"; - - -contract Timelock { - using SafeMath for uint256; - - event NewAdmin(address indexed newAdmin); - event NewPendingAdmin(address indexed newPendingAdmin); - event NewDelay(uint256 indexed newDelay); - event CancelTransaction( - bytes32 indexed txHash, - address indexed target, - uint256 value, - string signature, - bytes data, - uint256 eta - ); - event ExecuteTransaction( - bytes32 indexed txHash, - address indexed target, - uint256 value, - string signature, - bytes data, - uint256 eta - ); - event QueueTransaction( - bytes32 indexed txHash, - address indexed target, - uint256 value, - string signature, - bytes data, - uint256 eta - ); - - uint256 public constant GRACE_PERIOD = 14 days; - uint256 public constant MINIMUM_DELAY = 2 days; - uint256 public constant MAXIMUM_DELAY = 30 days; - - address public admin; - address public pendingAdmin; - uint256 public delay; - - mapping(bytes32 => bool) public queuedTransactions; - - constructor(address admin_, uint256 delay_) public { - require( - delay_ >= MINIMUM_DELAY, - "Timelock::constructor: Delay must exceed minimum delay." - ); - require( - delay_ <= MAXIMUM_DELAY, - "Timelock::setDelay: Delay must not exceed maximum delay." - ); - - admin = admin_; - delay = delay_; - } - - function() external payable {} - - function setDelay(uint256 delay_) public { - require( - msg.sender == address(this), - "Timelock::setDelay: Call must come from Timelock." - ); - require( - delay_ >= MINIMUM_DELAY, - "Timelock::setDelay: Delay must exceed minimum delay." - ); - require( - delay_ <= MAXIMUM_DELAY, - "Timelock::setDelay: Delay must not exceed maximum delay." - ); - delay = delay_; - - emit NewDelay(delay); - } - - function acceptAdmin() public { - require( - msg.sender == pendingAdmin, - "Timelock::acceptAdmin: Call must come from pendingAdmin." - ); - admin = msg.sender; - pendingAdmin = address(0); - - emit NewAdmin(admin); - } - - function setPendingAdmin(address pendingAdmin_) public { - require( - msg.sender == address(this), - "Timelock::setPendingAdmin: Call must come from Timelock." - ); - pendingAdmin = pendingAdmin_; - - emit NewPendingAdmin(pendingAdmin); - } - - function queueTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 eta - ) public returns (bytes32) { - require( - msg.sender == admin, - "Timelock::queueTransaction: Call must come from admin." - ); - require( - eta >= getBlockTimestamp().add(delay), - "Timelock::queueTransaction: Estimated execution block must satisfy delay." - ); - - bytes32 txHash = keccak256( - abi.encode(target, value, signature, data, eta) - ); - queuedTransactions[txHash] = true; - - emit QueueTransaction(txHash, target, value, signature, data, eta); - return txHash; - } - - function cancelTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 eta - ) public { - require( - msg.sender == admin, - "Timelock::cancelTransaction: Call must come from admin." - ); - - bytes32 txHash = keccak256( - abi.encode(target, value, signature, data, eta) - ); - queuedTransactions[txHash] = false; - - emit CancelTransaction(txHash, target, value, signature, data, eta); - } - - function executeTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 eta - ) public payable returns (bytes memory) { - require( - msg.sender == admin, - "Timelock::executeTransaction: Call must come from admin." - ); - - bytes32 txHash = keccak256( - abi.encode(target, value, signature, data, eta) - ); - require( - queuedTransactions[txHash], - "Timelock::executeTransaction: Transaction hasn't been queued." - ); - require( - getBlockTimestamp() >= eta, - "Timelock::executeTransaction: Transaction hasn't surpassed time lock." - ); - require( - getBlockTimestamp() <= eta.add(GRACE_PERIOD), - "Timelock::executeTransaction: Transaction is stale." - ); - - queuedTransactions[txHash] = false; - - bytes memory callData; - - if (bytes(signature).length == 0) { - callData = data; - } else { - callData = abi.encodePacked( - bytes4(keccak256(bytes(signature))), - data - ); - } - - // solium-disable-next-line security/no-call-value - (bool success, bytes memory returnData) = target.call.value(value)( - callData - ); - require( - success, - "Timelock::executeTransaction: Transaction execution reverted." - ); - - emit ExecuteTransaction(txHash, target, value, signature, data, eta); - - return returnData; - } - - function getBlockTimestamp() internal view returns (uint256) { - // solium-disable-next-line security/no-block-members - return block.timestamp; - } -} diff --git a/libs/chains/src/eth/contracts/Compound/TimelockMock.sol b/libs/chains/src/eth/contracts/Compound/TimelockMock.sol deleted file mode 100644 index 103d030c102..00000000000 --- a/libs/chains/src/eth/contracts/Compound/TimelockMock.sol +++ /dev/null @@ -1,211 +0,0 @@ -pragma solidity >=0.4.21 <0.7.0; - -import "@openzeppelin/contracts/math/SafeMath.sol"; - - -contract TimelockMock { - using SafeMath for uint256; - - event NewAdmin(address indexed newAdmin); - event NewPendingAdmin(address indexed newPendingAdmin); - event NewDelay(uint256 indexed newDelay); - event CancelTransaction( - bytes32 indexed txHash, - address indexed target, - uint256 value, - string signature, - bytes data, - uint256 eta - ); - event ExecuteTransaction( - bytes32 indexed txHash, - address indexed target, - uint256 value, - string signature, - bytes data, - uint256 eta - ); - event QueueTransaction( - bytes32 indexed txHash, - address indexed target, - uint256 value, - string signature, - bytes data, - uint256 eta - ); - - uint256 public constant GRACE_PERIOD = 14 minutes; - uint256 public constant MINIMUM_DELAY = 2 minutes; - uint256 public constant MAXIMUM_DELAY = 30 minutes; - - address public admin; - address public pendingAdmin; - uint256 public delay; - - mapping(bytes32 => bool) public queuedTransactions; - - constructor(address admin_, uint256 delay_) public { - require( - delay_ >= MINIMUM_DELAY, - "TimelockMock::constructor: Delay must exceed minimum delay." - ); - require( - delay_ <= MAXIMUM_DELAY, - "TimelockMock::setDelay: Delay must not exceed maximum delay." - ); - - admin = admin_; - delay = delay_; - } - - function() external payable {} - - function setDelay(uint256 delay_) public { - require( - msg.sender == address(this), - "TimelockMock::setDelay: Call must come from TimelockMock." - ); - require( - delay_ >= MINIMUM_DELAY, - "TimelockMock::setDelay: Delay must exceed minimum delay." - ); - require( - delay_ <= MAXIMUM_DELAY, - "TimelockMock::setDelay: Delay must not exceed maximum delay." - ); - delay = delay_; - - emit NewDelay(delay); - } - - function acceptAdmin() public { - require( - msg.sender == pendingAdmin, - "TimelockMock::acceptAdmin: Call must come from pendingAdmin." - ); - admin = msg.sender; - pendingAdmin = address(0); - - emit NewAdmin(admin); - } - - function setPendingAdmin(address pendingAdmin_) public { - require( - msg.sender == address(this), - "TimelockMock::setPendingAdmin: Call must come from TimelockMock." - ); - pendingAdmin = pendingAdmin_; - - emit NewPendingAdmin(pendingAdmin); - } - - function queueTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 eta - ) public returns (bytes32) { - // Remove this check for integration test purposes. We just want the events. - // require( - // msg.sender == admin, - // "TimelockMock::queueTransaction: Call must come from admin." - // ); - require( - eta >= getBlockTimestamp().add(delay), - "TimelockMock::queueTransaction: Estimated execution block must satisfy delay." - ); - - bytes32 txHash = keccak256( - abi.encode(target, value, signature, data, eta) - ); - queuedTransactions[txHash] = true; - - emit QueueTransaction(txHash, target, value, signature, data, eta); - return txHash; - } - - function cancelTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 eta - ) public { - // Remove requirement for testing purposes. - // require( - // msg.sender == admin, - // "TimelockMock::cancelTransaction: Call must come from admin." - // ); - - bytes32 txHash = keccak256( - abi.encode(target, value, signature, data, eta) - ); - queuedTransactions[txHash] = false; - - emit CancelTransaction(txHash, target, value, signature, data, eta); - } - - function executeTransaction( - address target, - uint256 value, - string memory signature, - bytes memory data, - uint256 eta - ) public payable returns (bytes memory) { - - // Remove this check for integration test purposes. We just want the events. - // require( - // msg.sender == admin, - // "TimelockMock::executeTransaction: Call must come from admin." - // ); - - bytes32 txHash = keccak256( - abi.encode(target, value, signature, data, eta) - ); - require( - queuedTransactions[txHash], - "TimelockMock::executeTransaction: Transaction hasn't been queued." - ); - // Modify contract again for speeding up testing. - // require( - // getBlockTimestamp() >= eta, - // "TimelockMock::executeTransaction: Transaction hasn't surpassed time lock." - // ); - require( - getBlockTimestamp() <= eta.add(GRACE_PERIOD), - "TimelockMock::executeTransaction: Transaction is stale." - ); - - queuedTransactions[txHash] = false; - - bytes memory callData; - - if (bytes(signature).length == 0) { - callData = data; - } else { - callData = abi.encodePacked( - bytes4(keccak256(bytes(signature))), - data - ); - } - - // solium-disable-next-line security/no-call-value - (bool success, bytes memory returnData) = target.call.value(value)( - callData - ); - require( - success, - "TimelockMock::executeTransaction: Transaction execution reverted." - ); - - emit ExecuteTransaction(txHash, target, value, signature, data, eta); - - return returnData; - } - - function getBlockTimestamp() internal view returns (uint256) { - // solium-disable-next-line security/no-block-members - return block.timestamp; - } -} diff --git a/libs/chains/src/eth/contracts/ERC1155Mintable.sol b/libs/chains/src/eth/contracts/ERC1155Mintable.sol deleted file mode 100644 index 387ac4bc2bf..00000000000 --- a/libs/chains/src/eth/contracts/ERC1155Mintable.sol +++ /dev/null @@ -1,14 +0,0 @@ -pragma solidity 0.8.7; - -import "@openzeppelin/contracts-governance/token/ERC1155/ERC1155.sol"; - -contract ERC1155Mintable is ERC1155 { - constructor () public ERC1155 ("cwTest uri") { } - - function mint(address to, - uint256 id, - uint256 amount, - bytes memory data) public { - _mint(to, id, amount, data); - } -} \ No newline at end of file diff --git a/libs/chains/src/eth/contracts/ERC721Mintable.sol b/libs/chains/src/eth/contracts/ERC721Mintable.sol deleted file mode 100644 index 0dc7409cf5b..00000000000 --- a/libs/chains/src/eth/contracts/ERC721Mintable.sol +++ /dev/null @@ -1,11 +0,0 @@ -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts-governance/token/ERC721/ERC721.sol"; - -contract ERC721Mintable is ERC721 { - constructor () public ERC721 ("cwTest", "CWT") { } - - function mint(uint256 tokenId) public { - _safeMint(msg.sender, tokenId); - } -} diff --git a/libs/chains/src/eth/contracts/Migrations.sol b/libs/chains/src/eth/contracts/Migrations.sol deleted file mode 100644 index 478d5f35efe..00000000000 --- a/libs/chains/src/eth/contracts/Migrations.sol +++ /dev/null @@ -1,23 +0,0 @@ -pragma solidity >=0.4.21 <0.7.0; - -contract Migrations { - address public owner; - uint public last_completed_migration; - - constructor() public { - owner = msg.sender; - } - - modifier restricted() { - if (msg.sender == owner) _; - } - - function setCompleted(uint completed) public restricted { - last_completed_migration = completed; - } - - function upgrade(address new_address) public restricted { - Migrations upgraded = Migrations(new_address); - upgraded.setCompleted(last_completed_migration); - } -} \ No newline at end of file diff --git a/libs/chains/src/eth/migrations/1_initial_migration.js b/libs/chains/src/eth/migrations/1_initial_migration.js deleted file mode 100644 index 82c676e13bb..00000000000 --- a/libs/chains/src/eth/migrations/1_initial_migration.js +++ /dev/null @@ -1,6 +0,0 @@ -const Migrations = artifacts.require('Migrations'); - -// eslint-disable-next-line func-names -module.exports = function (deployer) { - deployer.deploy(Migrations); -}; diff --git a/libs/chains/src/eth/migrations/2_deploy_contracts.js b/libs/chains/src/eth/migrations/2_deploy_contracts.js deleted file mode 100644 index 731068fc58f..00000000000 --- a/libs/chains/src/eth/migrations/2_deploy_contracts.js +++ /dev/null @@ -1,8 +0,0 @@ -const GuildBankV2 = artifacts.require('GuildBank2'); -const HelperV2 = artifacts.require('Helper'); - -// eslint-disable-next-line func-names -module.exports = function (deployer) { - deployer.deploy(GuildBankV2); - // deployer.deploy(Helper); -}; diff --git a/libs/chains/src/eth/migrations/3_moloch_v1.js b/libs/chains/src/eth/migrations/3_moloch_v1.js deleted file mode 100644 index 2605bab5159..00000000000 --- a/libs/chains/src/eth/migrations/3_moloch_v1.js +++ /dev/null @@ -1,12 +0,0 @@ -const GuildBankV1 = artifacts.require('GuildBank1'); -const Token = artifacts.require('Token'); - -// eslint-disable-next-line func-names -module.exports = async function (deployer, network, accounts) { - await deployer.deploy(Token, 10000); - const token = await Token.deployed(); - - const summoner = accounts[0]; - await deployer.deploy(GuildBankV1, summoner); - // deployer.deploy(Helper); -}; diff --git a/libs/chains/src/eth/scripts/build-contracts.sh b/libs/chains/src/eth/scripts/build-contracts.sh deleted file mode 100755 index a00ffacbb22..00000000000 --- a/libs/chains/src/eth/scripts/build-contracts.sh +++ /dev/null @@ -1,2 +0,0 @@ -truffle compile && -../node_modules/typechain/dist/cli/cli.js --target=ethers-v4 --outDir './types' './build/contracts/*.json' \ No newline at end of file diff --git a/libs/chains/src/eth/scripts/deployAave.ts b/libs/chains/src/eth/scripts/deployAave.ts deleted file mode 100644 index 4f34f72d887..00000000000 --- a/libs/chains/src/eth/scripts/deployAave.ts +++ /dev/null @@ -1,81 +0,0 @@ -import '@nomiclabs/hardhat-ethers'; -import hre from 'hardhat'; - -import type { AaveTokenV2Mock as AaveTokenV2 } from '../types'; -import { - AaveGovernanceV2__factory as AaveGovernanceV2Factory, - AaveTokenV2Mock__factory as AaveTokenV2Factory, - Executor__factory as ExecutorFactory, - GovernanceStrategy__factory as GovernanceStrategyFactory, -} from '../types'; - -async function increaseTime(blocks: number): Promise { - const timeToAdvance = blocks * 15; - console.log(`Mining ${blocks} blocks and adding ${timeToAdvance} seconds!`); - await hre.ethers.provider.send('evm_increaseTime', [timeToAdvance]); - for (let i = 0; i < blocks; i++) { - await hre.ethers.provider.send('evm_mine', []); - } -} - -async function initToken( - token: AaveTokenV2, - member: string, - amount: string, -): Promise { - await token.mint(member, amount); - await token.delegate(member); -} - -async function main() { - const [signer] = await hre.ethers.getSigners(); - const member = signer.address; - const TOTAL_SUPPLY = '1000000'; - - // deploy and delegate tokens - const tokenFactory = new AaveTokenV2Factory(signer); - const token1 = await tokenFactory.deploy(); - const token2 = await tokenFactory.deploy(); - - // deploy strategy - const strategyFactory = new GovernanceStrategyFactory(signer); - const strategy = await strategyFactory.deploy(token1.address, token2.address); - - // deploy AaveGovernance without executor, so we can pass as admin to executor constructor - const govFactory = new AaveGovernanceV2Factory(signer); - const governance = await govFactory.deploy( - strategy.address, - 4, // 4 block voting delay - member, - [], - ); - - // deploy Executor - const executorFactory = new ExecutorFactory(signer); - const executor = await executorFactory.deploy( - governance.address, - 60, // 1min delay - 60, // 1min grace period - 15, // 15s minimum delay - 120, // 2min maximum delay - 10, // 10% of supply required to submit - 12, // 12 blocks voting period - 10, // 10% differential required to pass - 20, // 20% quorum - ); - - // authorize executor on governance contract - await governance.authorizeExecutors([executor.address]); - - // initialize tokens and test delegate events - await initToken(token1, member, TOTAL_SUPPLY); - await initToken(token2, member, TOTAL_SUPPLY); - await increaseTime(1); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/libs/chains/src/eth/scripts/deployAlpha.ts b/libs/chains/src/eth/scripts/deployAlpha.ts deleted file mode 100644 index 0b3100d2d68..00000000000 --- a/libs/chains/src/eth/scripts/deployAlpha.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { providers } from 'ethers'; - -import { - GovernorAlphaMock__factory, - MPond__factory, - TimelockMock__factory, -} from '../types'; - -async function main() { - const Web3 = (await import('web3')).default; - // TODO: configure URL based on chain - const web3Provider = new Web3.providers.WebsocketProvider( - 'http://localhost:8545', - ); - const provider = new providers.Web3Provider(web3Provider as any); - // 12s minute polling interval (default is 4s) - provider.pollingInterval = 12000; - const addresses: string[] = await provider.listAccounts(); - const [member, bridge] = addresses; - const signer = provider.getSigner(member); - - // Deploy timelock - const timelockFactory = new TimelockMock__factory(signer); - const timelock = await timelockFactory.deploy(member, 2 * 60); - - // Deploy comp - const mpondFactory = new MPond__factory(signer); - const mpond = await mpondFactory.deploy(member, bridge); - - // Deploy Delegate - const delegateFactory = new GovernorAlphaMock__factory(signer); - const alpha = await delegateFactory.deploy( - timelock.address, - mpond.address, - member, - ); - console.log(alpha.address); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/libs/chains/src/eth/scripts/deployBravo.ts b/libs/chains/src/eth/scripts/deployBravo.ts deleted file mode 100644 index abe6f016b7d..00000000000 --- a/libs/chains/src/eth/scripts/deployBravo.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { providers } from 'ethers'; - -import { - GovernorBravoImmutable__factory, - MPond__factory, - TimelockMock__factory, -} from '../types'; - -async function main() { - // TODO: configure URL based on chain - const Web3 = (await import('web3')).default; - const web3Provider = new Web3.providers.WebsocketProvider( - 'http://localhost:8545', - ); - const provider = new providers.Web3Provider(web3Provider as any); - // 12s minute polling interval (default is 4s) - provider.pollingInterval = 12000; - const addresses: string[] = await provider.listAccounts(); - const [member, bridge] = addresses; - const signer = provider.getSigner(member); - - // Deploy timelock - const timelockFactory = new TimelockMock__factory(signer); - const timelock = await timelockFactory.deploy(member, 2 * 60); - - // Deploy comp - const compFactory = new MPond__factory(signer); - const comp = await compFactory.deploy(member, bridge); - - // Deploy Delegate - const delegateFactory = new GovernorBravoImmutable__factory(signer); - const bravo = await delegateFactory.deploy( - timelock.address, - comp.address, - member, - 4, // 4 blocks voting period - 1, // 1 block voting delay - 1, // 1 vote proposal threshold - ); - await bravo._initiate(); - console.log(bravo.address); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/libs/chains/src/eth/scripts/deployErc20.ts b/libs/chains/src/eth/scripts/deployErc20.ts deleted file mode 100644 index 910448bb5ea..00000000000 --- a/libs/chains/src/eth/scripts/deployErc20.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { providers } from 'ethers'; - -import { Token__factory as TokenFactory } from '../types'; - -async function main() { - const Web3 = (await import('web3')).default; - // TODO: configure URL based on chain - const web3Provider = new Web3.providers.WebsocketProvider( - 'http://localhost:8545', - ); - - const provider = new providers.Web3Provider(web3Provider as any); - // 12s minute polling interval (default is 4s) - provider.pollingInterval = 12000; - const addresses: string[] = await provider.listAccounts(); - const [member] = addresses; - const signer = provider.getSigner(member); - - // deploy voting token and mint 100 tokens - const factory = new TokenFactory(signer); - const token = await factory.deploy('1000'); - console.log(token.address); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/libs/chains/src/eth/scripts/deployErc721.ts b/libs/chains/src/eth/scripts/deployErc721.ts deleted file mode 100644 index c15e4ce3525..00000000000 --- a/libs/chains/src/eth/scripts/deployErc721.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { providers } from 'ethers'; - -import { ERC721Mintable__factory as TokenFactory } from '../types'; - -async function main() { - const Web3 = (await import('web3')).default; - // TODO: configure URL based on chain - const web3Provider = new Web3.providers.WebsocketProvider( - 'http://localhost:8545', - ); - - const provider = new providers.Web3Provider(web3Provider as any); - // 12s minute polling interval (default is 4s) - provider.pollingInterval = 12000; - const addresses: string[] = await provider.listAccounts(); - const [member] = addresses; - const signer = provider.getSigner(member); - - // deploy voting token and mint 100 tokens - const factory = new TokenFactory(signer); - const token = await factory.deploy(); - await token.mint('123'); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/libs/chains/src/eth/scripts/deployOz.ts b/libs/chains/src/eth/scripts/deployOz.ts deleted file mode 100644 index 1ccc6997ca2..00000000000 --- a/libs/chains/src/eth/scripts/deployOz.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { BigNumberish } from '@ethersproject/bignumber'; -import type { Signer } from 'ethers'; -import { providers } from 'ethers'; - -import type { ERC20VotesMock, TimelockController } from '../types'; -import { - ERC20VotesMock__factory as ERC20VotesMockFactory, - GovernorMock__factory as GovernorMockFactory, - TimelockController__factory as TimelockControllerFactory, -} from '../types'; - -async function deployErc20VotesMock( - signer: Signer | providers.JsonRpcSigner, - account: string, - amount: number, -): Promise { - const factory = new ERC20VotesMockFactory(signer); - const t = await factory.deploy('Test Token', 'TEST'); - await t.mint(account, amount); - return t; -} - -async function deployTimelock( - signer: Signer | providers.JsonRpcSigner, - minDelay: BigNumberish, - proposers: string[], - executors: string[], -): Promise { - const factory = new TimelockControllerFactory(signer); - return factory.deploy(minDelay, proposers, executors); -} - -async function main() { - // TODO: configure URL based on chain - const Web3 = (await import('web3')).default; - const web3Provider = new Web3.providers.WebsocketProvider( - 'http://localhost:8545', - ); - const provider = new providers.Web3Provider(web3Provider as any); - // 12s minute polling interval (default is 4s) - provider.pollingInterval = 12000; - const addresses: string[] = await provider.listAccounts(); - const [member] = addresses; - const signer = provider.getSigner(member); - - // deploy voting token and mint 100 tokens - const token = await deployErc20VotesMock(signer, member, 100); - - // deploy timelock - const timelock = await deployTimelock(signer, 2 * 60, [member], [member]); // 2 min minutes delay - - // deploy governor - const factory = new GovernorMockFactory(signer); - const governor = await factory.deploy( - 'Test Governor', - token.address, - 2, // 2 blocks delay until vote starts - 16, // vote goes for 16 blocks - timelock.address, - 5, // 5% of token supply must vote to pass = 5 tokens, - 0, // 0 votes required for a voter to become a proposer - ); - - // ensure governor can make calls on timelock by granting roles - const PROPOSER_ROLE = await timelock.PROPOSER_ROLE(); - const EXECUTOR_ROLE = await timelock.EXECUTOR_ROLE(); - await timelock.grantRole(PROPOSER_ROLE, governor.address); - await timelock.grantRole(EXECUTOR_ROLE, governor.address); - console.log(governor.address); -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/libs/chains/src/eth/scripts/mineBlocks.ts b/libs/chains/src/eth/scripts/mineBlocks.ts deleted file mode 100644 index aa2b4f74b96..00000000000 --- a/libs/chains/src/eth/scripts/mineBlocks.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { providers } from 'ethers'; - -async function increaseTime( - provider: providers.Web3Provider, - blocks: number, -): Promise { - const timeToAdvance = blocks * 15; - console.log(`Mining ${blocks} blocks and adding ${timeToAdvance} seconds!`); - await provider.send('evm_increaseTime', [timeToAdvance]); - for (let i = 0; i < blocks; i++) { - await provider.send('evm_mine', []); - } -} - -async function main(argv: string[]) { - const Web3 = (await import('web3')).default; - const web3Provider = new Web3.providers.WebsocketProvider( - 'ws://localhost:8545', - ); - const provider = new providers.Web3Provider(web3Provider as any); - const nBlocks = argv[0] ? +argv[0] : 1; - await increaseTime(provider, nBlocks); - const block = await provider.getBlock('latest'); - console.log( - `Current block number ${block.number} with timestamp ${block.timestamp}.`, - ); -} - -main(process.argv.slice(2)) - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/libs/chains/src/eth/types/AaveGovernanceV2.d.ts b/libs/chains/src/eth/types/AaveGovernanceV2.d.ts deleted file mode 100644 index ba595694359..00000000000 --- a/libs/chains/src/eth/types/AaveGovernanceV2.d.ts +++ /dev/null @@ -1,1764 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface AaveGovernanceV2Interface extends ethers.utils.Interface { - functions: { - "DOMAIN_TYPEHASH()": FunctionFragment; - "NAME()": FunctionFragment; - "VOTE_EMITTED_TYPEHASH()": FunctionFragment; - "__abdicate()": FunctionFragment; - "authorizeExecutors(address[])": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)": FunctionFragment; - "execute(uint256)": FunctionFragment; - "getGovernanceStrategy()": FunctionFragment; - "getGuardian()": FunctionFragment; - "getProposalById(uint256)": FunctionFragment; - "getProposalState(uint256)": FunctionFragment; - "getProposalsCount()": FunctionFragment; - "getVoteOnProposal(uint256,address)": FunctionFragment; - "getVotingDelay()": FunctionFragment; - "isExecutorAuthorized(address)": FunctionFragment; - "owner()": FunctionFragment; - "queue(uint256)": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "setGovernanceStrategy(address)": FunctionFragment; - "setVotingDelay(uint256)": FunctionFragment; - "submitVote(uint256,bool)": FunctionFragment; - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "unauthorizeExecutors(address[])": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DOMAIN_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "NAME", values?: undefined): string; - encodeFunctionData( - functionFragment: "VOTE_EMITTED_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__abdicate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "authorizeExecutors", - values: [string[]] - ): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "create", - values: [ - string, - string[], - BigNumberish[], - string[], - BytesLike[], - boolean[], - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getGovernanceStrategy", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getGuardian", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getProposalById", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getProposalState", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getProposalsCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getVoteOnProposal", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getVotingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "isExecutorAuthorized", - values: [string] - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData(functionFragment: "queue", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setGovernanceStrategy", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setVotingDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "submitVote", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "submitVoteBySignature", - values: [BigNumberish, boolean, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "unauthorizeExecutors", - values: [string[]] - ): string; - - decodeFunctionResult( - functionFragment: "DOMAIN_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "NAME", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "VOTE_EMITTED_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "__abdicate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "authorizeExecutors", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "create", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getGovernanceStrategy", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getGuardian", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getProposalById", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getProposalState", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getProposalsCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getVoteOnProposal", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getVotingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isExecutorAuthorized", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setGovernanceStrategy", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setVotingDelay", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "submitVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "submitVoteBySignature", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "unauthorizeExecutors", - data: BytesLike - ): Result; - - events: { - "ExecutorAuthorized(address)": EventFragment; - "ExecutorUnauthorized(address)": EventFragment; - "GovernanceStrategyChanged(address,address)": EventFragment; - "OwnershipTransferred(address,address)": EventFragment; - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address,address[],uint256[],string[],bytes[],bool[],uint256,uint256,address,bytes32)": EventFragment; - "ProposalExecuted(uint256,address)": EventFragment; - "ProposalQueued(uint256,uint256,address)": EventFragment; - "VoteEmitted(uint256,address,bool,uint256)": EventFragment; - "VotingDelayChanged(uint256,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ExecutorAuthorized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutorUnauthorized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "GovernanceStrategyChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteEmitted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingDelayChanged"): EventFragment; -} - -export class AaveGovernanceV2 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: AaveGovernanceV2Interface; - - functions: { - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - NAME(overrides?: CallOverrides): Promise<[string]>; - - "NAME()"(overrides?: CallOverrides): Promise<[string]>; - - VOTE_EMITTED_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "VOTE_EMITTED_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getGovernanceStrategy(overrides?: CallOverrides): Promise<[string]>; - - "getGovernanceStrategy()"(overrides?: CallOverrides): Promise<[string]>; - - getGuardian(overrides?: CallOverrides): Promise<[string]>; - - "getGuardian()"(overrides?: CallOverrides): Promise<[string]>; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - ] - >; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - ] - >; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - getProposalsCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getProposalsCount()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [[boolean, BigNumber] & { support: boolean; votingPower: BigNumber }] - >; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [[boolean, BigNumber] & { support: boolean; votingPower: BigNumber }] - >; - - getVotingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getVotingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - "owner()"(overrides?: CallOverrides): Promise<[string]>; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - NAME(overrides?: CallOverrides): Promise; - - "NAME()"(overrides?: CallOverrides): Promise; - - VOTE_EMITTED_TYPEHASH(overrides?: CallOverrides): Promise; - - "VOTE_EMITTED_TYPEHASH()"(overrides?: CallOverrides): Promise; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getGovernanceStrategy(overrides?: CallOverrides): Promise; - - "getGovernanceStrategy()"(overrides?: CallOverrides): Promise; - - getGuardian(overrides?: CallOverrides): Promise; - - "getGuardian()"(overrides?: CallOverrides): Promise; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - >; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - >; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalsCount(overrides?: CallOverrides): Promise; - - "getProposalsCount()"(overrides?: CallOverrides): Promise; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, BigNumber] & { support: boolean; votingPower: BigNumber } - >; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, BigNumber] & { support: boolean; votingPower: BigNumber } - >; - - getVotingDelay(overrides?: CallOverrides): Promise; - - "getVotingDelay()"(overrides?: CallOverrides): Promise; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - NAME(overrides?: CallOverrides): Promise; - - "NAME()"(overrides?: CallOverrides): Promise; - - VOTE_EMITTED_TYPEHASH(overrides?: CallOverrides): Promise; - - "VOTE_EMITTED_TYPEHASH()"(overrides?: CallOverrides): Promise; - - __abdicate(overrides?: CallOverrides): Promise; - - "__abdicate()"(overrides?: CallOverrides): Promise; - - authorizeExecutors( - executors: string[], - overrides?: CallOverrides - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: CallOverrides - ): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - execute(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getGovernanceStrategy(overrides?: CallOverrides): Promise; - - "getGovernanceStrategy()"(overrides?: CallOverrides): Promise; - - getGuardian(overrides?: CallOverrides): Promise; - - "getGuardian()"(overrides?: CallOverrides): Promise; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - >; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - >; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalsCount(overrides?: CallOverrides): Promise; - - "getProposalsCount()"(overrides?: CallOverrides): Promise; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, BigNumber] & { support: boolean; votingPower: BigNumber } - >; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, BigNumber] & { support: boolean; votingPower: BigNumber } - >; - - getVotingDelay(overrides?: CallOverrides): Promise; - - "getVotingDelay()"(overrides?: CallOverrides): Promise; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - queue(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - "renounceOwnership()"(overrides?: CallOverrides): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: CallOverrides - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: CallOverrides - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: CallOverrides - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: CallOverrides - ): Promise; - }; - - filters: { - ExecutorAuthorized( - executor: null - ): TypedEventFilter<[string], { executor: string }>; - - ExecutorUnauthorized( - executor: null - ): TypedEventFilter<[string], { executor: string }>; - - GovernanceStrategyChanged( - newStrategy: string | null, - initiatorChange: string | null - ): TypedEventFilter< - [string, string], - { newStrategy: string; initiatorChange: string } - >; - - OwnershipTransferred( - previousOwner: string | null, - newOwner: string | null - ): TypedEventFilter< - [string, string], - { previousOwner: string; newOwner: string } - >; - - ProposalCanceled( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalCreated( - id: null, - creator: string | null, - executor: string | null, - targets: null, - values: null, - signatures: null, - calldatas: null, - withDelegatecalls: null, - startBlock: null, - endBlock: null, - strategy: null, - ipfsHash: null - ): TypedEventFilter< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - string, - string - ], - { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - strategy: string; - ipfsHash: string; - } - >; - - ProposalExecuted( - id: null, - initiatorExecution: string | null - ): TypedEventFilter< - [BigNumber, string], - { id: BigNumber; initiatorExecution: string } - >; - - ProposalQueued( - id: null, - executionTime: null, - initiatorQueueing: string | null - ): TypedEventFilter< - [BigNumber, BigNumber, string], - { id: BigNumber; executionTime: BigNumber; initiatorQueueing: string } - >; - - VoteEmitted( - id: null, - voter: string | null, - support: null, - votingPower: null - ): TypedEventFilter< - [BigNumber, string, boolean, BigNumber], - { id: BigNumber; voter: string; support: boolean; votingPower: BigNumber } - >; - - VotingDelayChanged( - newVotingDelay: null, - initiatorChange: string | null - ): TypedEventFilter< - [BigNumber, string], - { newVotingDelay: BigNumber; initiatorChange: string } - >; - }; - - estimateGas: { - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - NAME(overrides?: CallOverrides): Promise; - - "NAME()"(overrides?: CallOverrides): Promise; - - VOTE_EMITTED_TYPEHASH(overrides?: CallOverrides): Promise; - - "VOTE_EMITTED_TYPEHASH()"(overrides?: CallOverrides): Promise; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getGovernanceStrategy(overrides?: CallOverrides): Promise; - - "getGovernanceStrategy()"(overrides?: CallOverrides): Promise; - - getGuardian(overrides?: CallOverrides): Promise; - - "getGuardian()"(overrides?: CallOverrides): Promise; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalsCount(overrides?: CallOverrides): Promise; - - "getProposalsCount()"(overrides?: CallOverrides): Promise; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotingDelay(overrides?: CallOverrides): Promise; - - "getVotingDelay()"(overrides?: CallOverrides): Promise; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - NAME(overrides?: CallOverrides): Promise; - - "NAME()"(overrides?: CallOverrides): Promise; - - VOTE_EMITTED_TYPEHASH( - overrides?: CallOverrides - ): Promise; - - "VOTE_EMITTED_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getGovernanceStrategy( - overrides?: CallOverrides - ): Promise; - - "getGovernanceStrategy()"( - overrides?: CallOverrides - ): Promise; - - getGuardian(overrides?: CallOverrides): Promise; - - "getGuardian()"(overrides?: CallOverrides): Promise; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalsCount(overrides?: CallOverrides): Promise; - - "getProposalsCount()"( - overrides?: CallOverrides - ): Promise; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotingDelay(overrides?: CallOverrides): Promise; - - "getVotingDelay()"( - overrides?: CallOverrides - ): Promise; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/AaveToken.d.ts b/libs/chains/src/eth/types/AaveToken.d.ts deleted file mode 100644 index 46df4952d34..00000000000 --- a/libs/chains/src/eth/types/AaveToken.d.ts +++ /dev/null @@ -1,1194 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface AaveTokenInterface extends ethers.utils.Interface { - functions: { - "DOMAIN_SEPARATOR()": FunctionFragment; - "EIP712_REVISION()": FunctionFragment; - "PERMIT_TYPEHASH()": FunctionFragment; - "REVISION()": FunctionFragment; - "_aaveGovernance()": FunctionFragment; - "_countsSnapshots(address)": FunctionFragment; - "_nonces(address)": FunctionFragment; - "_snapshots(address,uint256)": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "initialize(address,address,address)": FunctionFragment; - "name()": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DOMAIN_SEPARATOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "EIP712_REVISION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "PERMIT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "REVISION", values?: undefined): string; - encodeFunctionData( - functionFragment: "_aaveGovernance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_countsSnapshots", - values: [string] - ): string; - encodeFunctionData(functionFragment: "_nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "_snapshots", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "initialize", - values: [string, string, string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DOMAIN_SEPARATOR", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "EIP712_REVISION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "PERMIT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "REVISION", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_aaveGovernance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_countsSnapshots", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "_nonces", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "_snapshots", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "SnapshotDone(address,uint128,uint128)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "SnapshotDone"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class AaveToken extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: AaveTokenInterface; - - functions: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise<[string]>; - - EIP712_REVISION(overrides?: CallOverrides): Promise<[string]>; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise<[string]>; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - REVISION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "REVISION()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - _aaveGovernance(overrides?: CallOverrides): Promise<[string]>; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise<[string]>; - - _countsSnapshots( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - _nonces(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _countsSnapshots(arg0: string, overrides?: CallOverrides): Promise; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _countsSnapshots( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - initialize( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: CallOverrides - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - SnapshotDone( - owner: null, - oldValue: null, - newValue: null - ): TypedEventFilter< - [string, BigNumber, BigNumber], - { owner: string; oldValue: BigNumber; newValue: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _countsSnapshots( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"( - overrides?: CallOverrides - ): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"( - overrides?: CallOverrides - ): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"( - overrides?: CallOverrides - ): Promise; - - _countsSnapshots( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _nonces( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/AaveTokenV1Mock.d.ts b/libs/chains/src/eth/types/AaveTokenV1Mock.d.ts deleted file mode 100644 index 5d60e225ccf..00000000000 --- a/libs/chains/src/eth/types/AaveTokenV1Mock.d.ts +++ /dev/null @@ -1,1184 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface AaveTokenV1MockInterface extends ethers.utils.Interface { - functions: { - "DOMAIN_SEPARATOR()": FunctionFragment; - "EIP712_REVISION()": FunctionFragment; - "PERMIT_TYPEHASH()": FunctionFragment; - "REVISION()": FunctionFragment; - "_aaveGovernance()": FunctionFragment; - "_countsSnapshots(address)": FunctionFragment; - "_nonces(address)": FunctionFragment; - "_snapshots(address,uint256)": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "initialize(address,address,address)": FunctionFragment; - "name()": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DOMAIN_SEPARATOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "EIP712_REVISION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "PERMIT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "REVISION", values?: undefined): string; - encodeFunctionData( - functionFragment: "_aaveGovernance", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_countsSnapshots", - values: [string] - ): string; - encodeFunctionData(functionFragment: "_nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "_snapshots", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "initialize", - values: [string, string, string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DOMAIN_SEPARATOR", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "EIP712_REVISION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "PERMIT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "REVISION", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_aaveGovernance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_countsSnapshots", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "_nonces", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "_snapshots", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "SnapshotDone(address,uint128,uint128)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "SnapshotDone"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class AaveTokenV1Mock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: AaveTokenV1MockInterface; - - functions: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise<[string]>; - - EIP712_REVISION(overrides?: CallOverrides): Promise<[string]>; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise<[string]>; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - REVISION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "REVISION()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - _aaveGovernance(overrides?: CallOverrides): Promise<[string]>; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise<[string]>; - - _countsSnapshots( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - _nonces(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address)"( - minter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _countsSnapshots(arg0: string, overrides?: CallOverrides): Promise; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address)"( - minter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _countsSnapshots( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: CallOverrides - ): Promise; - - "initialize(address)"( - minter: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - SnapshotDone( - owner: null, - oldValue: null, - newValue: null - ): TypedEventFilter< - [string, BigNumber, BigNumber], - { owner: string; oldValue: BigNumber; newValue: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _countsSnapshots( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address)"( - minter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"( - overrides?: CallOverrides - ): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"( - overrides?: CallOverrides - ): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"( - overrides?: CallOverrides - ): Promise; - - _countsSnapshots( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_countsSnapshots(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _nonces( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _snapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_snapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,address)"( - migrator: string, - distributor: string, - aaveGovernance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address)"( - minter: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/AaveTokenV2.d.ts b/libs/chains/src/eth/types/AaveTokenV2.d.ts deleted file mode 100644 index 9b4177a57e6..00000000000 --- a/libs/chains/src/eth/types/AaveTokenV2.d.ts +++ /dev/null @@ -1,1881 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface AaveTokenV2Interface extends ethers.utils.Interface { - functions: { - "DELEGATE_BY_TYPE_TYPEHASH()": FunctionFragment; - "DELEGATE_TYPEHASH()": FunctionFragment; - "DOMAIN_SEPARATOR()": FunctionFragment; - "EIP712_REVISION()": FunctionFragment; - "PERMIT_TYPEHASH()": FunctionFragment; - "REVISION()": FunctionFragment; - "_aaveGovernance()": FunctionFragment; - "_nonces(address)": FunctionFragment; - "_votingSnapshots(address,uint256)": FunctionFragment; - "_votingSnapshotsCounts(address)": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "delegate(address)": FunctionFragment; - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "delegateByType(address,uint8)": FunctionFragment; - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "getDelegateeByType(address,uint8)": FunctionFragment; - "getPowerAtBlock(address,uint256,uint8)": FunctionFragment; - "getPowerCurrent(address,uint8)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "initialize()": FunctionFragment; - "name()": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "totalSupplyAt(uint256)": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DELEGATE_BY_TYPE_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DELEGATE_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DOMAIN_SEPARATOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "EIP712_REVISION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "PERMIT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "REVISION", values?: undefined): string; - encodeFunctionData( - functionFragment: "_aaveGovernance", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "_nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "_votingSnapshots", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_votingSnapshotsCounts", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delegate", values: [string]): string; - encodeFunctionData( - functionFragment: "delegateBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "delegateByType", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "delegateByTypeBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "getDelegateeByType", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPowerAtBlock", - values: [string, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPowerCurrent", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "initialize", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupplyAt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DELEGATE_BY_TYPE_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DELEGATE_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DOMAIN_SEPARATOR", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "EIP712_REVISION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "PERMIT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "REVISION", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_aaveGovernance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "_nonces", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_votingSnapshots", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_votingSnapshotsCounts", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "delegateBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "delegateByType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "delegateByTypeBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getDelegateeByType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPowerAtBlock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPowerCurrent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupplyAt", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "DelegateChanged(address,address,uint8)": EventFragment; - "DelegatedPowerChanged(address,uint256,uint8)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegatedPowerChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class AaveTokenV2 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: AaveTokenV2Interface; - - functions: { - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DELEGATE_BY_TYPE_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise<[string]>; - - EIP712_REVISION(overrides?: CallOverrides): Promise<[string]>; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise<[string]>; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - REVISION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "REVISION()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - _aaveGovernance(overrides?: CallOverrides): Promise<[string]>; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise<[string]>; - - _nonces(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegate(delegatee: string, overrides?: CallOverrides): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: CallOverrides - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - initialize(overrides?: CallOverrides): Promise; - - "initialize()"(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - DelegateChanged( - delegator: string | null, - delegatee: string | null, - delegationType: null - ): TypedEventFilter< - [string, string, number], - { delegator: string; delegatee: string; delegationType: number } - >; - - DelegatedPowerChanged( - user: string | null, - amount: null, - delegationType: null - ): TypedEventFilter< - [string, BigNumber, number], - { user: string; amount: BigNumber; delegationType: number } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DELEGATE_BY_TYPE_TYPEHASH( - overrides?: CallOverrides - ): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"( - overrides?: CallOverrides - ): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"( - overrides?: CallOverrides - ): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"( - overrides?: CallOverrides - ): Promise; - - _nonces( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/AaveTokenV2Mock.d.ts b/libs/chains/src/eth/types/AaveTokenV2Mock.d.ts deleted file mode 100644 index b02e6c895dc..00000000000 --- a/libs/chains/src/eth/types/AaveTokenV2Mock.d.ts +++ /dev/null @@ -1,1947 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface AaveTokenV2MockInterface extends ethers.utils.Interface { - functions: { - "DELEGATE_BY_TYPE_TYPEHASH()": FunctionFragment; - "DELEGATE_TYPEHASH()": FunctionFragment; - "DOMAIN_SEPARATOR()": FunctionFragment; - "EIP712_REVISION()": FunctionFragment; - "PERMIT_TYPEHASH()": FunctionFragment; - "REVISION()": FunctionFragment; - "_aaveGovernance()": FunctionFragment; - "_nonces(address)": FunctionFragment; - "_votingSnapshots(address,uint256)": FunctionFragment; - "_votingSnapshotsCounts(address)": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "delegate(address)": FunctionFragment; - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "delegateByType(address,uint8)": FunctionFragment; - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "getDelegateeByType(address,uint8)": FunctionFragment; - "getPowerAtBlock(address,uint256,uint8)": FunctionFragment; - "getPowerCurrent(address,uint8)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "initialize()": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "totalSupplyAt(uint256)": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DELEGATE_BY_TYPE_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DELEGATE_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DOMAIN_SEPARATOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "EIP712_REVISION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "PERMIT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "REVISION", values?: undefined): string; - encodeFunctionData( - functionFragment: "_aaveGovernance", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "_nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "_votingSnapshots", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_votingSnapshotsCounts", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delegate", values: [string]): string; - encodeFunctionData( - functionFragment: "delegateBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "delegateByType", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "delegateByTypeBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "getDelegateeByType", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPowerAtBlock", - values: [string, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPowerCurrent", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "initialize", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupplyAt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DELEGATE_BY_TYPE_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DELEGATE_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DOMAIN_SEPARATOR", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "EIP712_REVISION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "PERMIT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "REVISION", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_aaveGovernance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "_nonces", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_votingSnapshots", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_votingSnapshotsCounts", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "delegateBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "delegateByType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "delegateByTypeBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getDelegateeByType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPowerAtBlock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPowerCurrent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupplyAt", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "DelegateChanged(address,address,uint8)": EventFragment; - "DelegatedPowerChanged(address,uint256,uint8)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegatedPowerChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class AaveTokenV2Mock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: AaveTokenV2MockInterface; - - functions: { - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DELEGATE_BY_TYPE_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise<[string]>; - - EIP712_REVISION(overrides?: CallOverrides): Promise<[string]>; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise<[string]>; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - REVISION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "REVISION()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - _aaveGovernance(overrides?: CallOverrides): Promise<[string]>; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise<[string]>; - - _nonces(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - minter: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256)"( - minter: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - minter: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256)"( - minter: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber] & { blockNumber: BigNumber; value: BigNumber } - >; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegate(delegatee: string, overrides?: CallOverrides): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: CallOverrides - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - initialize(overrides?: CallOverrides): Promise; - - "initialize()"(overrides?: CallOverrides): Promise; - - mint( - minter: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "mint(address,uint256)"( - minter: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - DelegateChanged( - delegator: string | null, - delegatee: string | null, - delegationType: null - ): TypedEventFilter< - [string, string, number], - { delegator: string; delegatee: string; delegationType: number } - >; - - DelegatedPowerChanged( - user: string | null, - amount: null, - delegationType: null - ): TypedEventFilter< - [string, BigNumber, number], - { user: string; amount: BigNumber; delegationType: number } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"(overrides?: CallOverrides): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"(overrides?: CallOverrides): Promise; - - _nonces(arg0: string, overrides?: CallOverrides): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - minter: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256)"( - minter: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DELEGATE_BY_TYPE_TYPEHASH( - overrides?: CallOverrides - ): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"( - overrides?: CallOverrides - ): Promise; - - EIP712_REVISION(overrides?: CallOverrides): Promise; - - "EIP712_REVISION()"( - overrides?: CallOverrides - ): Promise; - - PERMIT_TYPEHASH(overrides?: CallOverrides): Promise; - - "PERMIT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - REVISION(overrides?: CallOverrides): Promise; - - "REVISION()"(overrides?: CallOverrides): Promise; - - _aaveGovernance(overrides?: CallOverrides): Promise; - - "_aaveGovernance()"( - overrides?: CallOverrides - ): Promise; - - _nonces( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - _votingSnapshots( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshots(address,uint256)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _votingSnapshotsCounts( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "_votingSnapshotsCounts(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByTypeBySig( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByTypeBySig(address,uint8,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - delegationType: BigNumberish, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - initialize( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - minter: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256)"( - minter: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/AccessControl.d.ts b/libs/chains/src/eth/types/AccessControl.d.ts deleted file mode 100644 index 11ec47627e0..00000000000 --- a/libs/chains/src/eth/types/AccessControl.d.ts +++ /dev/null @@ -1,526 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface AccessControlInterface extends ethers.utils.Interface { - functions: { - "DEFAULT_ADMIN_ROLE()": FunctionFragment; - "getRoleAdmin(bytes32)": FunctionFragment; - "grantRole(bytes32,address)": FunctionFragment; - "hasRole(bytes32,address)": FunctionFragment; - "renounceRole(bytes32,address)": FunctionFragment; - "revokeRole(bytes32,address)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DEFAULT_ADMIN_ROLE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoleAdmin", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "grantRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "hasRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "renounceRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "revokeRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "DEFAULT_ADMIN_ROLE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoleAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceRole", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - - events: { - "RoleAdminChanged(bytes32,bytes32,bytes32)": EventFragment; - "RoleGranted(bytes32,address,address)": EventFragment; - "RoleRevoked(bytes32,address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "RoleAdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RoleGranted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RoleRevoked"): EventFragment; -} - -export class AccessControl extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: AccessControlInterface; - - functions: { - DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<[string]>; - - "DEFAULT_ADMIN_ROLE()"(overrides?: CallOverrides): Promise<[string]>; - - getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise<[string]>; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise<[string]>; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; - - "DEFAULT_ADMIN_ROLE()"(overrides?: CallOverrides): Promise; - - getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; - - "DEFAULT_ADMIN_ROLE()"(overrides?: CallOverrides): Promise; - - getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - RoleAdminChanged( - role: BytesLike | null, - previousAdminRole: BytesLike | null, - newAdminRole: BytesLike | null - ): TypedEventFilter< - [string, string, string], - { role: string; previousAdminRole: string; newAdminRole: string } - >; - - RoleGranted( - role: BytesLike | null, - account: string | null, - sender: string | null - ): TypedEventFilter< - [string, string, string], - { role: string; account: string; sender: string } - >; - - RoleRevoked( - role: BytesLike | null, - account: string | null, - sender: string | null - ): TypedEventFilter< - [string, string, string], - { role: string; account: string; sender: string } - >; - }; - - estimateGas: { - DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; - - "DEFAULT_ADMIN_ROLE()"(overrides?: CallOverrides): Promise; - - getRoleAdmin( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - DEFAULT_ADMIN_ROLE( - overrides?: CallOverrides - ): Promise; - - "DEFAULT_ADMIN_ROLE()"( - overrides?: CallOverrides - ): Promise; - - getRoleAdmin( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/BaseAdminUpgradeabilityProxy.d.ts b/libs/chains/src/eth/types/BaseAdminUpgradeabilityProxy.d.ts deleted file mode 100644 index 11df404bca0..00000000000 --- a/libs/chains/src/eth/types/BaseAdminUpgradeabilityProxy.d.ts +++ /dev/null @@ -1,360 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface BaseAdminUpgradeabilityProxyInterface extends ethers.utils.Interface { - functions: { - "admin()": FunctionFragment; - "changeAdmin(address)": FunctionFragment; - "implementation()": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - }; - - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData(functionFragment: "changeAdmin", values: [string]): string; - encodeFunctionData( - functionFragment: "implementation", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "upgradeTo", values: [string]): string; - encodeFunctionData( - functionFragment: "upgradeToAndCall", - values: [string, BytesLike] - ): string; - - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "changeAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "implementation", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeToAndCall", - data: BytesLike - ): Result; - - events: { - "AdminChanged(address,address)": EventFragment; - "Upgraded(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; -} - -export class BaseAdminUpgradeabilityProxy extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: BaseAdminUpgradeabilityProxyInterface; - - functions: { - admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "admin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - changeAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - implementation( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "implementation()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; - - admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "admin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - changeAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - implementation( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "implementation()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - callStatic: { - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - changeAdmin(newAdmin: string, overrides?: CallOverrides): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: CallOverrides - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - upgradeTo( - newImplementation: string, - overrides?: CallOverrides - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: CallOverrides - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - AdminChanged( - previousAdmin: null, - newAdmin: null - ): TypedEventFilter< - [string, string], - { previousAdmin: string; newAdmin: string } - >; - - Upgraded( - implementation: string | null - ): TypedEventFilter<[string], { implementation: string }>; - }; - - estimateGas: { - admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "admin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - changeAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - implementation( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "implementation()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "admin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - changeAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - implementation( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "implementation()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/BaseUpgradeabilityProxy.d.ts b/libs/chains/src/eth/types/BaseUpgradeabilityProxy.d.ts deleted file mode 100644 index 39decb79aa2..00000000000 --- a/libs/chains/src/eth/types/BaseUpgradeabilityProxy.d.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer} from "ethers"; -import { - Contract, -} from "ethers"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { EventFragment} from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface BaseUpgradeabilityProxyInterface extends ethers.utils.Interface { - functions: {}; - - events: { - "Upgraded(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; -} - -export class BaseUpgradeabilityProxy extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: BaseUpgradeabilityProxyInterface; - - functions: {}; - - callStatic: {}; - - filters: { - Upgraded( - implementation: string | null - ): TypedEventFilter<[string], { implementation: string }>; - }; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/libs/chains/src/eth/types/CompInterface.d.ts b/libs/chains/src/eth/types/CompInterface.d.ts deleted file mode 100644 index e1448547b50..00000000000 --- a/libs/chains/src/eth/types/CompInterface.d.ts +++ /dev/null @@ -1,150 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface CompInterfaceInterface extends ethers.utils.Interface { - functions: { - "getPriorVotes(address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "getPriorVotes", - values: [string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "getPriorVotes", - data: BytesLike - ): Result; - - events: {}; -} - -export class CompInterface extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: CompInterfaceInterface; - - functions: { - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/Context.d.ts b/libs/chains/src/eth/types/Context.d.ts deleted file mode 100644 index 84f53e8e419..00000000000 --- a/libs/chains/src/eth/types/Context.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer} from "ethers"; -import { - Contract, -} from "ethers"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ContextInterface extends ethers.utils.Interface { - functions: {}; - - events: {}; -} - -export class Context extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ContextInterface; - - functions: {}; - - callStatic: {}; - - filters: {}; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/libs/chains/src/eth/types/ERC1155.d.ts b/libs/chains/src/eth/types/ERC1155.d.ts deleted file mode 100644 index e15669b2f51..00000000000 --- a/libs/chains/src/eth/types/ERC1155.d.ts +++ /dev/null @@ -1,712 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { - ethers, - EventFilter, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - Contract, - ContractTransaction, - Overrides, - CallOverrides, -} from "ethers"; -import { BytesLike } from "@ethersproject/bytes"; -import { Listener, Provider } from "@ethersproject/providers"; -import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC1155Interface extends ethers.utils.Interface { - functions: { - "balanceOf(address,uint256)": FunctionFragment; - "balanceOfBatch(address[],uint256[])": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; - "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "uri(uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "balanceOf", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balanceOfBatch", - values: [string[], BigNumberish[]] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "safeBatchTransferFrom", - values: [string, string, BigNumberish[], BigNumberish[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom", - values: [string, string, BigNumberish, BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "uri", values: [BigNumberish]): string; - - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balanceOfBatch", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeBatchTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uri", data: BytesLike): Result; - - events: { - "ApprovalForAll(address,address,bool)": EventFragment; - "TransferBatch(address,address,address,uint256[],uint256[])": EventFragment; - "TransferSingle(address,address,address,uint256,uint256)": EventFragment; - "URI(string,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferBatch"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferSingle"): EventFragment; - getEvent(nameOrSignatureOrTopic: "URI"): EventFragment; -} - -export class ERC1155 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC1155Interface; - - functions: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - uri(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - ApprovalForAll( - account: string | null, - operator: string | null, - approved: null - ): TypedEventFilter< - [string, string, boolean], - { account: string; operator: string; approved: boolean } - >; - - TransferBatch( - operator: string | null, - from: string | null, - to: string | null, - ids: null, - values: null - ): TypedEventFilter< - [string, string, string, BigNumber[], BigNumber[]], - { - operator: string; - from: string; - to: string; - ids: BigNumber[]; - values: BigNumber[]; - } - >; - - TransferSingle( - operator: string | null, - from: string | null, - to: string | null, - id: null, - value: null - ): TypedEventFilter< - [string, string, string, BigNumber, BigNumber], - { - operator: string; - from: string; - to: string; - id: BigNumber; - value: BigNumber; - } - >; - - URI( - value: null, - id: BigNumberish | null - ): TypedEventFilter<[string, BigNumber], { value: string; id: BigNumber }>; - }; - - estimateGas: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC1155Mintable.d.ts b/libs/chains/src/eth/types/ERC1155Mintable.d.ts deleted file mode 100644 index 0fe48b48778..00000000000 --- a/libs/chains/src/eth/types/ERC1155Mintable.d.ts +++ /dev/null @@ -1,798 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { - ethers, - EventFilter, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - Contract, - ContractTransaction, - Overrides, - CallOverrides, -} from "ethers"; -import { BytesLike } from "@ethersproject/bytes"; -import { Listener, Provider } from "@ethersproject/providers"; -import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC1155MintableInterface extends ethers.utils.Interface { - functions: { - "balanceOf(address,uint256)": FunctionFragment; - "balanceOfBatch(address[],uint256[])": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "mint(address,uint256,uint256,bytes)": FunctionFragment; - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; - "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "uri(uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "balanceOf", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balanceOfBatch", - values: [string[], BigNumberish[]] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish, BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "safeBatchTransferFrom", - values: [string, string, BigNumberish[], BigNumberish[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom", - values: [string, string, BigNumberish, BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "uri", values: [BigNumberish]): string; - - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balanceOfBatch", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "safeBatchTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uri", data: BytesLike): Result; - - events: { - "ApprovalForAll(address,address,bool)": EventFragment; - "TransferBatch(address,address,address,uint256[],uint256[])": EventFragment; - "TransferSingle(address,address,address,uint256,uint256)": EventFragment; - "URI(string,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferBatch"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferSingle"): EventFragment; - getEvent(nameOrSignatureOrTopic: "URI"): EventFragment; -} - -export class ERC1155Mintable extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC1155MintableInterface; - - functions: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - mint( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256,uint256,bytes)"( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - uri(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256,uint256,bytes)"( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "mint(address,uint256,uint256,bytes)"( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - ApprovalForAll( - account: string | null, - operator: string | null, - approved: null - ): TypedEventFilter< - [string, string, boolean], - { account: string; operator: string; approved: boolean } - >; - - TransferBatch( - operator: string | null, - from: string | null, - to: string | null, - ids: null, - values: null - ): TypedEventFilter< - [string, string, string, BigNumber[], BigNumber[]], - { - operator: string; - from: string; - to: string; - ids: BigNumber[]; - values: BigNumber[]; - } - >; - - TransferSingle( - operator: string | null, - from: string | null, - to: string | null, - id: null, - value: null - ): TypedEventFilter< - [string, string, string, BigNumber, BigNumber], - { - operator: string; - from: string; - to: string; - id: BigNumber; - value: BigNumber; - } - >; - - URI( - value: null, - id: BigNumberish | null - ): TypedEventFilter<[string, BigNumber], { value: string; id: BigNumber }>; - }; - - estimateGas: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256,uint256,bytes)"( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - mint( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256,uint256,bytes)"( - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "uri(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC165.d.ts b/libs/chains/src/eth/types/ERC165.d.ts deleted file mode 100644 index b8487aff46c..00000000000 --- a/libs/chains/src/eth/types/ERC165.d.ts +++ /dev/null @@ -1,139 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC165Interface extends ethers.utils.Interface { - functions: { - "supportsInterface(bytes4)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - - events: {}; -} - -export class ERC165 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC165Interface; - - functions: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC20.d.ts b/libs/chains/src/eth/types/ERC20.d.ts deleted file mode 100644 index 667a12bbdc2..00000000000 --- a/libs/chains/src/eth/types/ERC20.d.ts +++ /dev/null @@ -1,592 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC20Interface extends ethers.utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class ERC20 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC20Interface; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC20Permit.d.ts b/libs/chains/src/eth/types/ERC20Permit.d.ts deleted file mode 100644 index 6dbd377c37d..00000000000 --- a/libs/chains/src/eth/types/ERC20Permit.d.ts +++ /dev/null @@ -1,857 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC20PermitInterface extends ethers.utils.Interface { - functions: { - "DOMAIN_SEPARATOR()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "nonces(address)": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DOMAIN_SEPARATOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DOMAIN_SEPARATOR", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class ERC20Permit extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC20PermitInterface; - - functions: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise<[string]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - nonces(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"( - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces( - owner: string, - overrides?: CallOverrides - ): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC20Votes.d.ts b/libs/chains/src/eth/types/ERC20Votes.d.ts deleted file mode 100644 index 6248c565ebc..00000000000 --- a/libs/chains/src/eth/types/ERC20Votes.d.ts +++ /dev/null @@ -1,1377 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC20VotesInterface extends ethers.utils.Interface { - functions: { - "DOMAIN_SEPARATOR()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "checkpoints(address,uint32)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "delegate(address)": FunctionFragment; - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "delegates(address)": FunctionFragment; - "getPastTotalSupply(uint256)": FunctionFragment; - "getPastVotes(address,uint256)": FunctionFragment; - "getVotes(address)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "nonces(address)": FunctionFragment; - "numCheckpoints(address)": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DOMAIN_SEPARATOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "checkpoints", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delegate", values: [string]): string; - encodeFunctionData( - functionFragment: "delegateBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "delegates", values: [string]): string; - encodeFunctionData( - functionFragment: "getPastTotalSupply", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPastVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "getVotes", values: [string]): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "numCheckpoints", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DOMAIN_SEPARATOR", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "checkpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "delegateBySig", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegates", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPastTotalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPastVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "numCheckpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "DelegateChanged(address,address,address)": EventFragment; - "DelegateVotesChanged(address,uint256,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateVotesChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class ERC20Votes extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC20VotesInterface; - - functions: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise<[string]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[[number, BigNumber] & { fromBlock: number; votes: BigNumber }]>; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[[number, BigNumber] & { fromBlock: number; votes: BigNumber }]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise<[string]>; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[string]>; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getVotes(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - nonces(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - numCheckpoints( - account: string, - overrides?: CallOverrides - ): Promise<[number]>; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[number]>; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes(account: string, overrides?: CallOverrides): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints(account: string, overrides?: CallOverrides): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegate(delegatee: string, overrides?: CallOverrides): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: CallOverrides - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes(account: string, overrides?: CallOverrides): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints(account: string, overrides?: CallOverrides): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - DelegateChanged( - delegator: string | null, - fromDelegate: string | null, - toDelegate: string | null - ): TypedEventFilter< - [string, string, string], - { delegator: string; fromDelegate: string; toDelegate: string } - >; - - DelegateVotesChanged( - delegate: string | null, - previousBalance: null, - newBalance: null - ): TypedEventFilter< - [string, BigNumber, BigNumber], - { delegate: string; previousBalance: BigNumber; newBalance: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes(account: string, overrides?: CallOverrides): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints( - account: string, - overrides?: CallOverrides - ): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"( - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates( - account: string, - overrides?: CallOverrides - ): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces( - owner: string, - overrides?: CallOverrides - ): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints( - account: string, - overrides?: CallOverrides - ): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC20VotesComp.d.ts b/libs/chains/src/eth/types/ERC20VotesComp.d.ts deleted file mode 100644 index ac2b8a1c1f8..00000000000 --- a/libs/chains/src/eth/types/ERC20VotesComp.d.ts +++ /dev/null @@ -1,1505 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC20VotesCompInterface extends ethers.utils.Interface { - functions: { - "DOMAIN_SEPARATOR()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "checkpoints(address,uint32)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "delegate(address)": FunctionFragment; - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "delegates(address)": FunctionFragment; - "getCurrentVotes(address)": FunctionFragment; - "getPastTotalSupply(uint256)": FunctionFragment; - "getPastVotes(address,uint256)": FunctionFragment; - "getPriorVotes(address,uint256)": FunctionFragment; - "getVotes(address)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "nonces(address)": FunctionFragment; - "numCheckpoints(address)": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DOMAIN_SEPARATOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "checkpoints", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delegate", values: [string]): string; - encodeFunctionData( - functionFragment: "delegateBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "delegates", values: [string]): string; - encodeFunctionData( - functionFragment: "getCurrentVotes", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "getPastTotalSupply", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPastVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPriorVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "getVotes", values: [string]): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "numCheckpoints", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DOMAIN_SEPARATOR", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "checkpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "delegateBySig", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegates", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getCurrentVotes", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPastTotalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPastVotes", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPriorVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "numCheckpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "DelegateChanged(address,address,address)": EventFragment; - "DelegateVotesChanged(address,uint256,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateVotesChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class ERC20VotesComp extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC20VotesCompInterface; - - functions: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise<[string]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[[number, BigNumber] & { fromBlock: number; votes: BigNumber }]>; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[[number, BigNumber] & { fromBlock: number; votes: BigNumber }]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise<[string]>; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[string]>; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getVotes(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - nonces(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - numCheckpoints( - account: string, - overrides?: CallOverrides - ): Promise<[number]>; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[number]>; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes(account: string, overrides?: CallOverrides): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints(account: string, overrides?: CallOverrides): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegate(delegatee: string, overrides?: CallOverrides): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: CallOverrides - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes(account: string, overrides?: CallOverrides): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints(account: string, overrides?: CallOverrides): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - DelegateChanged( - delegator: string | null, - fromDelegate: string | null, - toDelegate: string | null - ): TypedEventFilter< - [string, string, string], - { delegator: string; fromDelegate: string; toDelegate: string } - >; - - DelegateVotesChanged( - delegate: string | null, - previousBalance: null, - newBalance: null - ): TypedEventFilter< - [string, BigNumber, BigNumber], - { delegate: string; previousBalance: BigNumber; newBalance: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes(account: string, overrides?: CallOverrides): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints( - account: string, - overrides?: CallOverrides - ): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"( - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates( - account: string, - overrides?: CallOverrides - ): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces( - owner: string, - overrides?: CallOverrides - ): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints( - account: string, - overrides?: CallOverrides - ): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC20VotesMock.d.ts b/libs/chains/src/eth/types/ERC20VotesMock.d.ts deleted file mode 100644 index e7912970b8f..00000000000 --- a/libs/chains/src/eth/types/ERC20VotesMock.d.ts +++ /dev/null @@ -1,1535 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC20VotesMockInterface extends ethers.utils.Interface { - functions: { - "DOMAIN_SEPARATOR()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "burn(address,uint256)": FunctionFragment; - "checkpoints(address,uint32)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "delegate(address)": FunctionFragment; - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "delegates(address)": FunctionFragment; - "getChainId()": FunctionFragment; - "getPastTotalSupply(uint256)": FunctionFragment; - "getPastVotes(address,uint256)": FunctionFragment; - "getVotes(address)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "mint(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "nonces(address)": FunctionFragment; - "numCheckpoints(address)": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DOMAIN_SEPARATOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "burn", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "checkpoints", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delegate", values: [string]): string; - encodeFunctionData( - functionFragment: "delegateBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "delegates", values: [string]): string; - encodeFunctionData( - functionFragment: "getChainId", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getPastTotalSupply", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPastVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "getVotes", values: [string]): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "mint", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "numCheckpoints", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DOMAIN_SEPARATOR", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "checkpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "delegateBySig", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegates", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getChainId", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPastTotalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPastVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "numCheckpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "DelegateChanged(address,address,address)": EventFragment; - "DelegateVotesChanged(address,uint256,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateVotesChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class ERC20VotesMock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC20VotesMockInterface; - - functions: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise<[string]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - burn( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[[number, BigNumber] & { fromBlock: number; votes: BigNumber }]>; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[[number, BigNumber] & { fromBlock: number; votes: BigNumber }]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise<[string]>; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[string]>; - - getChainId(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getChainId()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getVotes(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - nonces(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - numCheckpoints( - account: string, - overrides?: CallOverrides - ): Promise<[number]>; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[number]>; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - burn( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getChainId(overrides?: CallOverrides): Promise; - - "getChainId()"(overrides?: CallOverrides): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes(account: string, overrides?: CallOverrides): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints(account: string, overrides?: CallOverrides): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - burn( - account: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "burn(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegate(delegatee: string, overrides?: CallOverrides): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: CallOverrides - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getChainId(overrides?: CallOverrides): Promise; - - "getChainId()"(overrides?: CallOverrides): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes(account: string, overrides?: CallOverrides): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - mint( - account: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "mint(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints(account: string, overrides?: CallOverrides): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - DelegateChanged( - delegator: string | null, - fromDelegate: string | null, - toDelegate: string | null - ): TypedEventFilter< - [string, string, string], - { delegator: string; fromDelegate: string; toDelegate: string } - >; - - DelegateVotesChanged( - delegate: string | null, - previousBalance: null, - newBalance: null - ): TypedEventFilter< - [string, BigNumber, BigNumber], - { delegate: string; previousBalance: BigNumber; newBalance: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - burn( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates(account: string, overrides?: CallOverrides): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getChainId(overrides?: CallOverrides): Promise; - - "getChainId()"(overrides?: CallOverrides): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes(account: string, overrides?: CallOverrides): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints( - account: string, - overrides?: CallOverrides - ): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"( - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - burn( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - checkpoints( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "checkpoints(address,uint32)"( - account: string, - pos: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates( - account: string, - overrides?: CallOverrides - ): Promise; - - "delegates(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getChainId(overrides?: CallOverrides): Promise; - - "getChainId()"(overrides?: CallOverrides): Promise; - - getPastTotalSupply( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastTotalSupply(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPastVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPastVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - mint( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(address,uint256)"( - account: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces( - owner: string, - overrides?: CallOverrides - ): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints( - account: string, - overrides?: CallOverrides - ): Promise; - - "numCheckpoints(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC721.d.ts b/libs/chains/src/eth/types/ERC721.d.ts deleted file mode 100644 index 873b70034d0..00000000000 --- a/libs/chains/src/eth/types/ERC721.d.ts +++ /dev/null @@ -1,694 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC721Interface extends ethers.utils.Interface { - functions: { - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "getApproved(uint256)": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "ownerOf(uint256)": FunctionFragment; - "safeTransferFrom(address,address,uint256)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "getApproved", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "ownerOf", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getApproved", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "ApprovalForAll(address,address,bool)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class ERC721 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC721Interface; - - functions: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - to: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - to: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - to: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - to: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - to: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - "setApprovalForAll(address,bool)"( - to: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - approved: string | null, - tokenId: BigNumberish | null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; approved: string; tokenId: BigNumber } - >; - - ApprovalForAll( - owner: string | null, - operator: string | null, - approved: null - ): TypedEventFilter< - [string, string, boolean], - { owner: string; operator: string; approved: boolean } - >; - - Transfer( - from: string | null, - to: string | null, - tokenId: BigNumberish | null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; tokenId: BigNumber } - >; - }; - - estimateGas: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - to: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - to: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - to: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - to: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC721Mintable.d.ts b/libs/chains/src/eth/types/ERC721Mintable.d.ts deleted file mode 100644 index 4c70e635eba..00000000000 --- a/libs/chains/src/eth/types/ERC721Mintable.d.ts +++ /dev/null @@ -1,840 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC721MintableInterface extends ethers.utils.Interface { - functions: { - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "getApproved(uint256)": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "mint(uint256)": FunctionFragment; - "name()": FunctionFragment; - "ownerOf(uint256)": FunctionFragment; - "safeTransferFrom(address,address,uint256)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "symbol()": FunctionFragment; - "tokenURI(uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "getApproved", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "mint", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "ownerOf", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "tokenURI", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getApproved", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "tokenURI", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "ApprovalForAll(address,address,bool)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class ERC721Mintable extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC721MintableInterface; - - functions: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - mint( - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(uint256)"( - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - mint( - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(uint256)"( - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - tokenURI(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - mint(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "mint(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - tokenURI(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - approved: string | null, - tokenId: BigNumberish | null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; approved: string; tokenId: BigNumber } - >; - - ApprovalForAll( - owner: string | null, - operator: string | null, - approved: null - ): TypedEventFilter< - [string, string, boolean], - { owner: string; operator: string; approved: boolean } - >; - - Transfer( - from: string | null, - to: string | null, - tokenId: BigNumberish | null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; tokenId: BigNumber } - >; - }; - - estimateGas: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - mint( - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(uint256)"( - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - mint( - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "mint(uint256)"( - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - _data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ERC777.d.ts b/libs/chains/src/eth/types/ERC777.d.ts deleted file mode 100644 index fcd0a7d74d3..00000000000 --- a/libs/chains/src/eth/types/ERC777.d.ts +++ /dev/null @@ -1,1185 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ERC777Interface extends ethers.utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "authorizeOperator(address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "burn(uint256,bytes)": FunctionFragment; - "decimals()": FunctionFragment; - "defaultOperators()": FunctionFragment; - "granularity()": FunctionFragment; - "isOperatorFor(address,address)": FunctionFragment; - "name()": FunctionFragment; - "operatorBurn(address,uint256,bytes,bytes)": FunctionFragment; - "operatorSend(address,address,uint256,bytes,bytes)": FunctionFragment; - "revokeOperator(address)": FunctionFragment; - "send(address,uint256,bytes)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "authorizeOperator", - values: [string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "burn", - values: [BigNumberish, BytesLike] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "defaultOperators", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "granularity", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "isOperatorFor", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "operatorBurn", - values: [string, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "operatorSend", - values: [string, string, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "revokeOperator", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "send", - values: [string, BigNumberish, BytesLike] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "authorizeOperator", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "defaultOperators", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "granularity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isOperatorFor", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "operatorBurn", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "operatorSend", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "revokeOperator", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "send", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "AuthorizedOperator(address,address)": EventFragment; - "Burned(address,address,uint256,bytes,bytes)": EventFragment; - "Minted(address,address,uint256,bytes,bytes)": EventFragment; - "RevokedOperator(address,address)": EventFragment; - "Sent(address,address,address,uint256,bytes,bytes)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "AuthorizedOperator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Burned"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Minted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RevokedOperator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Sent"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class ERC777 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ERC777Interface; - - functions: { - allowance( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - tokenHolder: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balanceOf(address)"( - tokenHolder: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - defaultOperators(overrides?: CallOverrides): Promise<[string[]]>; - - "defaultOperators()"(overrides?: CallOverrides): Promise<[string[]]>; - - granularity(overrides?: CallOverrides): Promise<[BigNumber]>; - - "granularity()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(tokenHolder: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - defaultOperators(overrides?: CallOverrides): Promise; - - "defaultOperators()"(overrides?: CallOverrides): Promise; - - granularity(overrides?: CallOverrides): Promise; - - "granularity()"(overrides?: CallOverrides): Promise; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - authorizeOperator( - operator: string, - overrides?: CallOverrides - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: CallOverrides - ): Promise; - - balanceOf( - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - defaultOperators(overrides?: CallOverrides): Promise; - - "defaultOperators()"(overrides?: CallOverrides): Promise; - - granularity(overrides?: CallOverrides): Promise; - - "granularity()"(overrides?: CallOverrides): Promise; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - revokeOperator(operator: string, overrides?: CallOverrides): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: CallOverrides - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - AuthorizedOperator( - operator: string | null, - tokenHolder: string | null - ): TypedEventFilter< - [string, string], - { operator: string; tokenHolder: string } - >; - - Burned( - operator: string | null, - from: string | null, - amount: null, - data: null, - operatorData: null - ): TypedEventFilter< - [string, string, BigNumber, string, string], - { - operator: string; - from: string; - amount: BigNumber; - data: string; - operatorData: string; - } - >; - - Minted( - operator: string | null, - to: string | null, - amount: null, - data: null, - operatorData: null - ): TypedEventFilter< - [string, string, BigNumber, string, string], - { - operator: string; - to: string; - amount: BigNumber; - data: string; - operatorData: string; - } - >; - - RevokedOperator( - operator: string | null, - tokenHolder: string | null - ): TypedEventFilter< - [string, string], - { operator: string; tokenHolder: string } - >; - - Sent( - operator: string | null, - from: string | null, - to: string | null, - amount: null, - data: null, - operatorData: null - ): TypedEventFilter< - [string, string, string, BigNumber, string, string], - { - operator: string; - from: string; - to: string; - amount: BigNumber; - data: string; - operatorData: string; - } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - allowance( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - defaultOperators(overrides?: CallOverrides): Promise; - - "defaultOperators()"(overrides?: CallOverrides): Promise; - - granularity(overrides?: CallOverrides): Promise; - - "granularity()"(overrides?: CallOverrides): Promise; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - holder: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - defaultOperators(overrides?: CallOverrides): Promise; - - "defaultOperators()"( - overrides?: CallOverrides - ): Promise; - - granularity(overrides?: CallOverrides): Promise; - - "granularity()"(overrides?: CallOverrides): Promise; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - holder: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/Executor.d.ts b/libs/chains/src/eth/types/Executor.d.ts deleted file mode 100644 index 92ffc51361d..00000000000 --- a/libs/chains/src/eth/types/Executor.d.ts +++ /dev/null @@ -1,1684 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ExecutorInterface extends ethers.utils.Interface { - functions: { - "GRACE_PERIOD()": FunctionFragment; - "MAXIMUM_DELAY()": FunctionFragment; - "MINIMUM_DELAY()": FunctionFragment; - "MINIMUM_QUORUM()": FunctionFragment; - "ONE_HUNDRED_WITH_PRECISION()": FunctionFragment; - "PROPOSITION_THRESHOLD()": FunctionFragment; - "VOTE_DIFFERENTIAL()": FunctionFragment; - "VOTING_DURATION()": FunctionFragment; - "acceptAdmin()": FunctionFragment; - "cancelTransaction(address,uint256,string,bytes,uint256,bool)": FunctionFragment; - "executeTransaction(address,uint256,string,bytes,uint256,bool)": FunctionFragment; - "getAdmin()": FunctionFragment; - "getDelay()": FunctionFragment; - "getMinimumPropositionPowerNeeded(address,uint256)": FunctionFragment; - "getMinimumVotingPowerNeeded(uint256)": FunctionFragment; - "getPendingAdmin()": FunctionFragment; - "isActionQueued(bytes32)": FunctionFragment; - "isProposalOverGracePeriod(address,uint256)": FunctionFragment; - "isProposalPassed(address,uint256)": FunctionFragment; - "isPropositionPowerEnough(address,address,uint256)": FunctionFragment; - "isQuorumValid(address,uint256)": FunctionFragment; - "isVoteDifferentialValid(address,uint256)": FunctionFragment; - "queueTransaction(address,uint256,string,bytes,uint256,bool)": FunctionFragment; - "setDelay(uint256)": FunctionFragment; - "setPendingAdmin(address)": FunctionFragment; - "validateCreatorOfProposal(address,address,uint256)": FunctionFragment; - "validateProposalCancellation(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "GRACE_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAXIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MINIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MINIMUM_QUORUM", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ONE_HUNDRED_WITH_PRECISION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "PROPOSITION_THRESHOLD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "VOTE_DIFFERENTIAL", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "VOTING_DURATION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "acceptAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cancelTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "executeTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish, boolean] - ): string; - encodeFunctionData(functionFragment: "getAdmin", values?: undefined): string; - encodeFunctionData(functionFragment: "getDelay", values?: undefined): string; - encodeFunctionData( - functionFragment: "getMinimumPropositionPowerNeeded", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getMinimumVotingPowerNeeded", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "isActionQueued", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "isProposalOverGracePeriod", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isProposalPassed", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isPropositionPowerEnough", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isQuorumValid", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isVoteDifferentialValid", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queueTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "setDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setPendingAdmin", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "validateCreatorOfProposal", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "validateProposalCancellation", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "GRACE_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAXIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MINIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MINIMUM_QUORUM", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ONE_HUNDRED_WITH_PRECISION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "PROPOSITION_THRESHOLD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "VOTE_DIFFERENTIAL", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "VOTING_DURATION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "cancelTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getAdmin", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDelay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getMinimumPropositionPowerNeeded", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getMinimumVotingPowerNeeded", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isActionQueued", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isProposalOverGracePeriod", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isProposalPassed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isPropositionPowerEnough", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isQuorumValid", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isVoteDifferentialValid", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queueTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setDelay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateCreatorOfProposal", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateProposalCancellation", - data: BytesLike - ): Result; - - events: { - "CancelledAction(bytes32,address,uint256,string,bytes,uint256,bool)": EventFragment; - "ExecutedAction(bytes32,address,uint256,string,bytes,uint256,bool,bytes)": EventFragment; - "NewAdmin(address)": EventFragment; - "NewDelay(uint256)": EventFragment; - "NewPendingAdmin(address)": EventFragment; - "QueuedAction(bytes32,address,uint256,string,bytes,uint256,bool)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "CancelledAction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutedAction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewDelay"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "QueuedAction"): EventFragment; -} - -export class Executor extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ExecutorInterface; - - functions: { - GRACE_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MINIMUM_QUORUM(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise<[BigNumber]>; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - VOTING_DURATION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise<[string]>; - - "getAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - getDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDelay( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"(overrides?: CallOverrides): Promise; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDelay( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise; - - acceptAdmin(overrides?: CallOverrides): Promise; - - "acceptAdmin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - setDelay(delay: BigNumberish, overrides?: CallOverrides): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - CancelledAction( - actionHash: null, - target: string | null, - value: null, - signature: null, - data: null, - executionTime: null, - withDelegatecall: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber, boolean], - { - actionHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - executionTime: BigNumber; - withDelegatecall: boolean; - } - >; - - ExecutedAction( - actionHash: null, - target: string | null, - value: null, - signature: null, - data: null, - executionTime: null, - withDelegatecall: null, - resultData: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber, boolean, string], - { - actionHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - executionTime: BigNumber; - withDelegatecall: boolean; - resultData: string; - } - >; - - NewAdmin(newAdmin: null): TypedEventFilter<[string], { newAdmin: string }>; - - NewDelay(delay: null): TypedEventFilter<[BigNumber], { delay: BigNumber }>; - - NewPendingAdmin( - newPendingAdmin: null - ): TypedEventFilter<[string], { newPendingAdmin: string }>; - - QueuedAction( - actionHash: null, - target: string | null, - value: null, - signature: null, - data: null, - executionTime: null, - withDelegatecall: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber, boolean], - { - actionHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - executionTime: BigNumber; - withDelegatecall: boolean; - } - >; - }; - - estimateGas: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDelay( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"( - overrides?: CallOverrides - ): Promise; - - ONE_HUNDRED_WITH_PRECISION( - overrides?: CallOverrides - ): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - PROPOSITION_THRESHOLD( - overrides?: CallOverrides - ): Promise; - - "PROPOSITION_THRESHOLD()"( - overrides?: CallOverrides - ): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"( - overrides?: CallOverrides - ): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"( - overrides?: CallOverrides - ): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"( - overrides?: CallOverrides - ): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDelay( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ExecutorWithTimelock.d.ts b/libs/chains/src/eth/types/ExecutorWithTimelock.d.ts deleted file mode 100644 index a6adc8cd81d..00000000000 --- a/libs/chains/src/eth/types/ExecutorWithTimelock.d.ts +++ /dev/null @@ -1,947 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ExecutorWithTimelockInterface extends ethers.utils.Interface { - functions: { - "GRACE_PERIOD()": FunctionFragment; - "MAXIMUM_DELAY()": FunctionFragment; - "MINIMUM_DELAY()": FunctionFragment; - "acceptAdmin()": FunctionFragment; - "cancelTransaction(address,uint256,string,bytes,uint256,bool)": FunctionFragment; - "executeTransaction(address,uint256,string,bytes,uint256,bool)": FunctionFragment; - "getAdmin()": FunctionFragment; - "getDelay()": FunctionFragment; - "getPendingAdmin()": FunctionFragment; - "isActionQueued(bytes32)": FunctionFragment; - "isProposalOverGracePeriod(address,uint256)": FunctionFragment; - "queueTransaction(address,uint256,string,bytes,uint256,bool)": FunctionFragment; - "setDelay(uint256)": FunctionFragment; - "setPendingAdmin(address)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "GRACE_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAXIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MINIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "acceptAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cancelTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "executeTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish, boolean] - ): string; - encodeFunctionData(functionFragment: "getAdmin", values?: undefined): string; - encodeFunctionData(functionFragment: "getDelay", values?: undefined): string; - encodeFunctionData( - functionFragment: "getPendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "isActionQueued", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "isProposalOverGracePeriod", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queueTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "setDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setPendingAdmin", - values: [string] - ): string; - - decodeFunctionResult( - functionFragment: "GRACE_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAXIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MINIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "cancelTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getAdmin", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDelay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isActionQueued", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isProposalOverGracePeriod", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queueTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setDelay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setPendingAdmin", - data: BytesLike - ): Result; - - events: { - "CancelledAction(bytes32,address,uint256,string,bytes,uint256,bool)": EventFragment; - "ExecutedAction(bytes32,address,uint256,string,bytes,uint256,bool,bytes)": EventFragment; - "NewAdmin(address)": EventFragment; - "NewDelay(uint256)": EventFragment; - "NewPendingAdmin(address)": EventFragment; - "QueuedAction(bytes32,address,uint256,string,bytes,uint256,bool)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "CancelledAction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutedAction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewDelay"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "QueuedAction"): EventFragment; -} - -export class ExecutorWithTimelock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ExecutorWithTimelockInterface; - - functions: { - GRACE_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise<[string]>; - - "getAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - getDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - getPendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDelay( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDelay( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin(overrides?: CallOverrides): Promise; - - "acceptAdmin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - setDelay(delay: BigNumberish, overrides?: CallOverrides): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - CancelledAction( - actionHash: null, - target: string | null, - value: null, - signature: null, - data: null, - executionTime: null, - withDelegatecall: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber, boolean], - { - actionHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - executionTime: BigNumber; - withDelegatecall: boolean; - } - >; - - ExecutedAction( - actionHash: null, - target: string | null, - value: null, - signature: null, - data: null, - executionTime: null, - withDelegatecall: null, - resultData: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber, boolean, string], - { - actionHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - executionTime: BigNumber; - withDelegatecall: boolean; - resultData: string; - } - >; - - NewAdmin(newAdmin: null): TypedEventFilter<[string], { newAdmin: string }>; - - NewDelay(delay: null): TypedEventFilter<[BigNumber], { delay: BigNumber }>; - - NewPendingAdmin( - newPendingAdmin: null - ): TypedEventFilter<[string], { newPendingAdmin: string }>; - - QueuedAction( - actionHash: null, - target: string | null, - value: null, - signature: null, - data: null, - executionTime: null, - withDelegatecall: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber, boolean], - { - actionHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - executionTime: BigNumber; - withDelegatecall: boolean; - } - >; - }; - - estimateGas: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDelay( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"( - overrides?: CallOverrides - ): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setDelay( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/FeiDAO.d.ts b/libs/chains/src/eth/types/FeiDAO.d.ts deleted file mode 100644 index 9836860fc6a..00000000000 --- a/libs/chains/src/eth/types/FeiDAO.d.ts +++ /dev/null @@ -1,2473 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface FeiDAOInterface extends ethers.utils.Interface { - functions: { - "BACKUP_GOVERNOR()": FunctionFragment; - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "ROLLBACK_DEADLINE()": FunctionFragment; - "__acceptAdmin()": FunctionFragment; - "__executeRollback()": FunctionFragment; - "__rollback(uint256)": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getActions(uint256)": FunctionFragment; - "getReceipt(uint256,address)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalEta(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposals(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "queue(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "quorumVotes()": FunctionFragment; - "setProposalThreshold(uint256)": FunctionFragment; - "setQuorum(uint256)": FunctionFragment; - "setVotingDelay(uint256)": FunctionFragment; - "setVotingPeriod(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "timelock()": FunctionFragment; - "token()": FunctionFragment; - "updateTimelock(address)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BACKUP_GOVERNOR", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ROLLBACK_DEADLINE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__acceptAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__executeRollback", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__rollback", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getActions", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getReceipt", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalEta", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposals", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "queue", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "quorumVotes", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setProposalThreshold", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setQuorum", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setVotingDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setVotingPeriod", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "updateTimelock", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BACKUP_GOVERNOR", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ROLLBACK_DEADLINE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "__acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "__executeRollback", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "__rollback", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getActions", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getReceipt", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalEta", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumVotes", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setProposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setQuorum", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setVotingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setVotingPeriod", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateTimelock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "ProposalThresholdUpdated(uint256,uint256)": EventFragment; - "QuorumUpdated(uint256,uint256)": EventFragment; - "Rollback()": EventFragment; - "RollbackQueued(uint256)": EventFragment; - "TimelockChange(address,address)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - "VotingDelayUpdated(uint256,uint256)": EventFragment; - "VotingPeriodUpdated(uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalThresholdUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "QuorumUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Rollback"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RollbackQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TimelockChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingDelayUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingPeriodUpdated"): EventFragment; -} - -export class FeiDAO extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: FeiDAOInterface; - - functions: { - BACKUP_GOVERNOR(overrides?: CallOverrides): Promise<[string]>; - - "BACKUP_GOVERNOR()"(overrides?: CallOverrides): Promise<[string]>; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - ROLLBACK_DEADLINE(overrides?: CallOverrides): Promise<[BigNumber]>; - - "ROLLBACK_DEADLINE()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeRollback( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeRollback()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __rollback( - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__rollback(uint256)"( - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum(arg0: BigNumberish, overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorum(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - quorumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumVotes()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setQuorum( - newQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setQuorum(uint256)"( - newQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - "token()"(overrides?: CallOverrides): Promise<[string]>; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BACKUP_GOVERNOR(overrides?: CallOverrides): Promise; - - "BACKUP_GOVERNOR()"(overrides?: CallOverrides): Promise; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - ROLLBACK_DEADLINE(overrides?: CallOverrides): Promise; - - "ROLLBACK_DEADLINE()"(overrides?: CallOverrides): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeRollback( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeRollback()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __rollback( - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__rollback(uint256)"( - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "quorum(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setQuorum( - newQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setQuorum(uint256)"( - newQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BACKUP_GOVERNOR(overrides?: CallOverrides): Promise; - - "BACKUP_GOVERNOR()"(overrides?: CallOverrides): Promise; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - ROLLBACK_DEADLINE(overrides?: CallOverrides): Promise; - - "ROLLBACK_DEADLINE()"(overrides?: CallOverrides): Promise; - - __acceptAdmin(overrides?: CallOverrides): Promise; - - "__acceptAdmin()"(overrides?: CallOverrides): Promise; - - __executeRollback(overrides?: CallOverrides): Promise; - - "__executeRollback()"(overrides?: CallOverrides): Promise; - - __rollback(eta: BigNumberish, overrides?: CallOverrides): Promise; - - "__rollback(uint256)"( - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorum(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "quorum(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setQuorum( - newQuorum: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setQuorum(uint256)"( - newQuorum: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: CallOverrides - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalQueued( - proposalId: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { proposalId: BigNumber; eta: BigNumber } - >; - - ProposalThresholdUpdated( - oldProposalThreshold: null, - newProposalThreshold: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldProposalThreshold: BigNumber; newProposalThreshold: BigNumber } - >; - - QuorumUpdated( - oldQuorum: null, - newQuorum: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldQuorum: BigNumber; newQuorum: BigNumber } - >; - - Rollback(): TypedEventFilter<[], {}>; - - RollbackQueued( - eta: null - ): TypedEventFilter<[BigNumber], { eta: BigNumber }>; - - TimelockChange( - oldTimelock: null, - newTimelock: null - ): TypedEventFilter< - [string, string], - { oldTimelock: string; newTimelock: string } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - - VotingDelayUpdated( - oldVotingDelay: null, - newVotingDelay: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingDelay: BigNumber; newVotingDelay: BigNumber } - >; - - VotingPeriodUpdated( - oldVotingPeriod: null, - newVotingPeriod: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingPeriod: BigNumber; newVotingPeriod: BigNumber } - >; - }; - - estimateGas: { - BACKUP_GOVERNOR(overrides?: CallOverrides): Promise; - - "BACKUP_GOVERNOR()"(overrides?: CallOverrides): Promise; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - ROLLBACK_DEADLINE(overrides?: CallOverrides): Promise; - - "ROLLBACK_DEADLINE()"(overrides?: CallOverrides): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeRollback( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeRollback()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __rollback( - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__rollback(uint256)"( - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "quorum(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setQuorum( - newQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setQuorum(uint256)"( - newQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BACKUP_GOVERNOR(overrides?: CallOverrides): Promise; - - "BACKUP_GOVERNOR()"( - overrides?: CallOverrides - ): Promise; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - ROLLBACK_DEADLINE(overrides?: CallOverrides): Promise; - - "ROLLBACK_DEADLINE()"( - overrides?: CallOverrides - ): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeRollback( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeRollback()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __rollback( - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__rollback(uint256)"( - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setQuorum( - newQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setQuorum(uint256)"( - newQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/FlashAttacks.d.ts b/libs/chains/src/eth/types/FlashAttacks.d.ts deleted file mode 100644 index fc3e27ff3d2..00000000000 --- a/libs/chains/src/eth/types/FlashAttacks.d.ts +++ /dev/null @@ -1,413 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface FlashAttacksInterface extends ethers.utils.Interface { - functions: { - "flashProposal(uint256,address,address[],uint256[],string[],bytes[],bool[],bytes32)": FunctionFragment; - "flashVote(uint256,uint256,bool)": FunctionFragment; - "flashVotePermit(uint256,uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "flashProposal", - values: [ - BigNumberish, - string, - string[], - BigNumberish[], - string[], - BytesLike[], - boolean[], - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "flashVote", - values: [BigNumberish, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "flashVotePermit", - values: [ - BigNumberish, - BigNumberish, - boolean, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - - decodeFunctionResult( - functionFragment: "flashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "flashVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "flashVotePermit", - data: BytesLike - ): Result; - - events: {}; -} - -export class FlashAttacks extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: FlashAttacksInterface; - - functions: { - flashProposal( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashProposal(uint256,address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - flashVote( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashVote(uint256,uint256,bool)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - flashVotePermit( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashVotePermit(uint256,uint256,bool,uint8,bytes32,bytes32)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - flashProposal( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashProposal(uint256,address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - flashVote( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashVote(uint256,uint256,bool)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - flashVotePermit( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashVotePermit(uint256,uint256,bool,uint8,bytes32,bytes32)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - flashProposal( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "flashProposal(uint256,address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - flashVote( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - "flashVote(uint256,uint256,bool)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - flashVotePermit( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "flashVotePermit(uint256,uint256,bool,uint8,bytes32,bytes32)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - flashProposal( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashProposal(uint256,address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - flashVote( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashVote(uint256,uint256,bool)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - flashVotePermit( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashVotePermit(uint256,uint256,bool,uint8,bytes32,bytes32)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - flashProposal( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashProposal(uint256,address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - proposalPower: BigNumberish, - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - flashVote( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashVote(uint256,uint256,bool)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - flashVotePermit( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "flashVotePermit(uint256,uint256,bool,uint8,bytes32,bytes32)"( - votePower: BigNumberish, - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernancePowerDelegationERC20.d.ts b/libs/chains/src/eth/types/GovernancePowerDelegationERC20.d.ts deleted file mode 100644 index f4bdafeaf07..00000000000 --- a/libs/chains/src/eth/types/GovernancePowerDelegationERC20.d.ts +++ /dev/null @@ -1,1145 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernancePowerDelegationERC20Interface - extends ethers.utils.Interface { - functions: { - "DELEGATE_BY_TYPE_TYPEHASH()": FunctionFragment; - "DELEGATE_TYPEHASH()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "delegate(address)": FunctionFragment; - "delegateByType(address,uint8)": FunctionFragment; - "getDelegateeByType(address,uint8)": FunctionFragment; - "getPowerAtBlock(address,uint256,uint8)": FunctionFragment; - "getPowerCurrent(address,uint8)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "name()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "totalSupplyAt(uint256)": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DELEGATE_BY_TYPE_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DELEGATE_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delegate", values: [string]): string; - encodeFunctionData( - functionFragment: "delegateByType", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getDelegateeByType", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPowerAtBlock", - values: [string, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getPowerCurrent", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalSupplyAt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DELEGATE_BY_TYPE_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DELEGATE_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "delegateByType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getDelegateeByType", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPowerAtBlock", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPowerCurrent", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupplyAt", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "DelegateChanged(address,address,uint8)": EventFragment; - "DelegatedPowerChanged(address,uint256,uint8)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegatedPowerChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class GovernancePowerDelegationERC20 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernancePowerDelegationERC20Interface; - - functions: { - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DELEGATE_BY_TYPE_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegate(delegatee: string, overrides?: CallOverrides): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: CallOverrides - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - DelegateChanged( - delegator: string | null, - delegatee: string | null, - delegationType: null - ): TypedEventFilter< - [string, string, number], - { delegator: string; delegatee: string; delegationType: number } - >; - - DelegatedPowerChanged( - user: string | null, - amount: null, - delegationType: null - ): TypedEventFilter< - [string, BigNumber, number], - { user: string; amount: BigNumber; delegationType: number } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - DELEGATE_BY_TYPE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"(overrides?: CallOverrides): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DELEGATE_BY_TYPE_TYPEHASH( - overrides?: CallOverrides - ): Promise; - - "DELEGATE_BY_TYPE_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DELEGATE_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATE_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegate( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address)"( - delegatee: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateByType( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateByType(address,uint8)"( - delegatee: string, - delegationType: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getDelegateeByType( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getDelegateeByType(address,uint8)"( - delegator: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getPowerCurrent( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerCurrent(address,uint8)"( - user: string, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - totalSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "totalSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernanceStrategy.d.ts b/libs/chains/src/eth/types/GovernanceStrategy.d.ts deleted file mode 100644 index 5d7174e8467..00000000000 --- a/libs/chains/src/eth/types/GovernanceStrategy.d.ts +++ /dev/null @@ -1,383 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernanceStrategyInterface extends ethers.utils.Interface { - functions: { - "AAVE()": FunctionFragment; - "STK_AAVE()": FunctionFragment; - "getPropositionPowerAt(address,uint256)": FunctionFragment; - "getTotalPropositionSupplyAt(uint256)": FunctionFragment; - "getTotalVotingSupplyAt(uint256)": FunctionFragment; - "getVotingPowerAt(address,uint256)": FunctionFragment; - }; - - encodeFunctionData(functionFragment: "AAVE", values?: undefined): string; - encodeFunctionData(functionFragment: "STK_AAVE", values?: undefined): string; - encodeFunctionData( - functionFragment: "getPropositionPowerAt", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getTotalPropositionSupplyAt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getTotalVotingSupplyAt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getVotingPowerAt", - values: [string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "AAVE", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "STK_AAVE", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPropositionPowerAt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalPropositionSupplyAt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalVotingSupplyAt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getVotingPowerAt", - data: BytesLike - ): Result; - - events: {}; -} - -export class GovernanceStrategy extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernanceStrategyInterface; - - functions: { - AAVE(overrides?: CallOverrides): Promise<[string]>; - - "AAVE()"(overrides?: CallOverrides): Promise<[string]>; - - STK_AAVE(overrides?: CallOverrides): Promise<[string]>; - - "STK_AAVE()"(overrides?: CallOverrides): Promise<[string]>; - - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - AAVE(overrides?: CallOverrides): Promise; - - "AAVE()"(overrides?: CallOverrides): Promise; - - STK_AAVE(overrides?: CallOverrides): Promise; - - "STK_AAVE()"(overrides?: CallOverrides): Promise; - - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - AAVE(overrides?: CallOverrides): Promise; - - "AAVE()"(overrides?: CallOverrides): Promise; - - STK_AAVE(overrides?: CallOverrides): Promise; - - "STK_AAVE()"(overrides?: CallOverrides): Promise; - - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - AAVE(overrides?: CallOverrides): Promise; - - "AAVE()"(overrides?: CallOverrides): Promise; - - STK_AAVE(overrides?: CallOverrides): Promise; - - "STK_AAVE()"(overrides?: CallOverrides): Promise; - - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - AAVE(overrides?: CallOverrides): Promise; - - "AAVE()"(overrides?: CallOverrides): Promise; - - STK_AAVE(overrides?: CallOverrides): Promise; - - "STK_AAVE()"(overrides?: CallOverrides): Promise; - - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernanceV2Helper.d.ts b/libs/chains/src/eth/types/GovernanceV2Helper.d.ts deleted file mode 100644 index cd1797932de..00000000000 --- a/libs/chains/src/eth/types/GovernanceV2Helper.d.ts +++ /dev/null @@ -1,1206 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { - ethers, - EventFilter, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - Contract, - ContractTransaction, - CallOverrides, -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernanceV2HelperInterface extends ethers.utils.Interface { - functions: { - "ONE_HUNDRED_WITH_PRECISION()": FunctionFragment; - "getProposal(uint256,address)": FunctionFragment; - "getProposals(uint256,uint256,address)": FunctionFragment; - "getTokensPower(address,address[])": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "ONE_HUNDRED_WITH_PRECISION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getProposal", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getProposals", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getTokensPower", - values: [string, string[]] - ): string; - - decodeFunctionResult( - functionFragment: "ONE_HUNDRED_WITH_PRECISION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getProposal", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getProposals", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTokensPower", - data: BytesLike - ): Result; - - events: {}; -} - -export class GovernanceV2Helper extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernanceV2HelperInterface; - - functions: { - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - ] & { - proposalStats: [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - }; - } - >; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - ] & { - proposalStats: [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - }; - } - >; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - ] & { - proposalsStats: ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[]; - } - >; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - ] & { - proposalsStats: ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[]; - } - >; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - [ - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - ] & { - power: ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[]; - } - >; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - [ - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - ] & { - power: ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[]; - } - >; - }; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"(overrides?: CallOverrides): Promise; - - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - >; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - >; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - >; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - >; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - >; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - >; - - callStatic: { - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - >; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - >; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - >; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - >; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - >; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - >; - }; - - filters: {}; - - estimateGas: { - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - ONE_HUNDRED_WITH_PRECISION( - overrides?: CallOverrides - ): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/Governor.d.ts b/libs/chains/src/eth/types/Governor.d.ts deleted file mode 100644 index a42b5b7bacb..00000000000 --- a/libs/chains/src/eth/types/Governor.d.ts +++ /dev/null @@ -1,1235 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class Governor extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorAlpha.d.ts b/libs/chains/src/eth/types/GovernorAlpha.d.ts deleted file mode 100644 index a2e78c720c0..00000000000 --- a/libs/chains/src/eth/types/GovernorAlpha.d.ts +++ /dev/null @@ -1,1636 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorAlphaInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "DOMAIN_TYPEHASH()": FunctionFragment; - "MPond()": FunctionFragment; - "__abdicate()": FunctionFragment; - "__acceptAdmin()": FunctionFragment; - "__executeSetTimelockPendingAdmin(address,uint256)": FunctionFragment; - "__queueSetTimelockPendingAdmin(address,uint256)": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "castVote(uint256,bool)": FunctionFragment; - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "execute(uint256)": FunctionFragment; - "getActions(uint256)": FunctionFragment; - "getReceipt(uint256,address)": FunctionFragment; - "guardian()": FunctionFragment; - "latestProposalIds(address)": FunctionFragment; - "name()": FunctionFragment; - "proposalCount()": FunctionFragment; - "proposalMaxOperations()": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposals(uint256)": FunctionFragment; - "propose(address[],uint256[],string[],bytes[],string)": FunctionFragment; - "queue(uint256)": FunctionFragment; - "quorumVotes()": FunctionFragment; - "state(uint256)": FunctionFragment; - "timelock()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DOMAIN_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "MPond", values?: undefined): string; - encodeFunctionData( - functionFragment: "__abdicate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__acceptAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__executeSetTimelockPendingAdmin", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "__queueSetTimelockPendingAdmin", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, boolean, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getActions", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getReceipt", - values: [BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "guardian", values?: undefined): string; - encodeFunctionData( - functionFragment: "latestProposalIds", - values: [string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalMaxOperations", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposals", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], string[], BytesLike[], string] - ): string; - encodeFunctionData(functionFragment: "queue", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "quorumVotes", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DOMAIN_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "MPond", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "__abdicate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "__acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "__executeSetTimelockPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "__queueSetTimelockPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getActions", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getReceipt", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "guardian", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "latestProposalIds", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalMaxOperations", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,bool,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorAlpha extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorAlphaInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - MPond(overrides?: CallOverrides): Promise<[string]>; - - "MPond()"(overrides?: CallOverrides): Promise<[string]>; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - ] - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - ] - >; - - guardian(overrides?: CallOverrides): Promise<[string]>; - - "guardian()"(overrides?: CallOverrides): Promise<[string]>; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalCount()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalMaxOperations(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumVotes()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MPond(overrides?: CallOverrides): Promise; - - "MPond()"(overrides?: CallOverrides): Promise; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - >; - - guardian(overrides?: CallOverrides): Promise; - - "guardian()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MPond(overrides?: CallOverrides): Promise; - - "MPond()"(overrides?: CallOverrides): Promise; - - __abdicate(overrides?: CallOverrides): Promise; - - "__abdicate()"(overrides?: CallOverrides): Promise; - - __acceptAdmin(overrides?: CallOverrides): Promise; - - "__acceptAdmin()"(overrides?: CallOverrides): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - execute(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - >; - - guardian(overrides?: CallOverrides): Promise; - - "guardian()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalCreated( - id: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - id: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalQueued( - id: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { id: BigNumber; eta: BigNumber } - >; - - VoteCast( - voter: null, - proposalId: null, - support: null, - votes: null - ): TypedEventFilter< - [string, BigNumber, boolean, BigNumber], - { - voter: string; - proposalId: BigNumber; - support: boolean; - votes: BigNumber; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MPond(overrides?: CallOverrides): Promise; - - "MPond()"(overrides?: CallOverrides): Promise; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - guardian(overrides?: CallOverrides): Promise; - - "guardian()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - MPond(overrides?: CallOverrides): Promise; - - "MPond()"(overrides?: CallOverrides): Promise; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - guardian(overrides?: CallOverrides): Promise; - - "guardian()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations( - overrides?: CallOverrides - ): Promise; - - "proposalMaxOperations()"( - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorAlphaMock.d.ts b/libs/chains/src/eth/types/GovernorAlphaMock.d.ts deleted file mode 100644 index 87f401a2bb8..00000000000 --- a/libs/chains/src/eth/types/GovernorAlphaMock.d.ts +++ /dev/null @@ -1,1636 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorAlphaMockInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "DOMAIN_TYPEHASH()": FunctionFragment; - "__abdicate()": FunctionFragment; - "__acceptAdmin()": FunctionFragment; - "__executeSetTimelockPendingAdmin(address,uint256)": FunctionFragment; - "__queueSetTimelockPendingAdmin(address,uint256)": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "castVote(uint256,bool)": FunctionFragment; - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "comp()": FunctionFragment; - "execute(uint256)": FunctionFragment; - "getActions(uint256)": FunctionFragment; - "getReceipt(uint256,address)": FunctionFragment; - "guardian()": FunctionFragment; - "latestProposalIds(address)": FunctionFragment; - "name()": FunctionFragment; - "proposalCount()": FunctionFragment; - "proposalMaxOperations()": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposals(uint256)": FunctionFragment; - "propose(address[],uint256[],string[],bytes[],string)": FunctionFragment; - "queue(uint256)": FunctionFragment; - "quorumVotes()": FunctionFragment; - "state(uint256)": FunctionFragment; - "timelock()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DOMAIN_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__abdicate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__acceptAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__executeSetTimelockPendingAdmin", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "__queueSetTimelockPendingAdmin", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, boolean, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData(functionFragment: "comp", values?: undefined): string; - encodeFunctionData( - functionFragment: "execute", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getActions", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getReceipt", - values: [BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "guardian", values?: undefined): string; - encodeFunctionData( - functionFragment: "latestProposalIds", - values: [string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalMaxOperations", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposals", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], string[], BytesLike[], string] - ): string; - encodeFunctionData(functionFragment: "queue", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "quorumVotes", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DOMAIN_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "__abdicate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "__acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "__executeSetTimelockPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "__queueSetTimelockPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "comp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getActions", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getReceipt", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "guardian", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "latestProposalIds", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalMaxOperations", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,bool,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorAlphaMock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorAlphaMockInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise<[string]>; - - "comp()"(overrides?: CallOverrides): Promise<[string]>; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - ] - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - ] - >; - - guardian(overrides?: CallOverrides): Promise<[string]>; - - "guardian()"(overrides?: CallOverrides): Promise<[string]>; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalCount()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalMaxOperations(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumVotes()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - >; - - guardian(overrides?: CallOverrides): Promise; - - "guardian()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - __abdicate(overrides?: CallOverrides): Promise; - - "__abdicate()"(overrides?: CallOverrides): Promise; - - __acceptAdmin(overrides?: CallOverrides): Promise; - - "__acceptAdmin()"(overrides?: CallOverrides): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, boolean, BigNumber] & { - hasVoted: boolean; - support: boolean; - votes: BigNumber; - } - >; - - guardian(overrides?: CallOverrides): Promise; - - "guardian()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalCreated( - id: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - id: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalQueued( - id: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { id: BigNumber; eta: BigNumber } - >; - - VoteCast( - voter: null, - proposalId: null, - support: null, - votes: null - ): TypedEventFilter< - [string, BigNumber, boolean, BigNumber], - { - voter: string; - proposalId: BigNumber; - support: boolean; - votes: BigNumber; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - guardian(overrides?: CallOverrides): Promise; - - "guardian()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __executeSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__executeSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - __queueSetTimelockPendingAdmin( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__queueSetTimelockPendingAdmin(address,uint256)"( - newPendingAdmin: string, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - guardian(overrides?: CallOverrides): Promise; - - "guardian()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations( - overrides?: CallOverrides - ): Promise; - - "proposalMaxOperations()"( - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorBravoDelegate.d.ts b/libs/chains/src/eth/types/GovernorBravoDelegate.d.ts deleted file mode 100644 index 774755fafef..00000000000 --- a/libs/chains/src/eth/types/GovernorBravoDelegate.d.ts +++ /dev/null @@ -1,2222 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorBravoDelegateInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "DOMAIN_TYPEHASH()": FunctionFragment; - "MAX_PROPOSAL_THRESHOLD()": FunctionFragment; - "MAX_VOTING_DELAY()": FunctionFragment; - "MAX_VOTING_PERIOD()": FunctionFragment; - "MIN_PROPOSAL_THRESHOLD()": FunctionFragment; - "MIN_VOTING_DELAY()": FunctionFragment; - "MIN_VOTING_PERIOD()": FunctionFragment; - "_acceptAdmin()": FunctionFragment; - "_setPendingAdmin(address)": FunctionFragment; - "_setProposalThreshold(uint256)": FunctionFragment; - "_setVotingDelay(uint256)": FunctionFragment; - "_setVotingPeriod(uint256)": FunctionFragment; - "admin()": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "comp()": FunctionFragment; - "execute(uint256)": FunctionFragment; - "getActions(uint256)": FunctionFragment; - "getReceipt(uint256,address)": FunctionFragment; - "implementation()": FunctionFragment; - "initialProposalId()": FunctionFragment; - "initialize(address,address,uint256,uint256,uint256)": FunctionFragment; - "latestProposalIds(address)": FunctionFragment; - "name()": FunctionFragment; - "pendingAdmin()": FunctionFragment; - "proposalCount()": FunctionFragment; - "proposalMaxOperations()": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposals(uint256)": FunctionFragment; - "propose(address[],uint256[],string[],bytes[],string)": FunctionFragment; - "queue(uint256)": FunctionFragment; - "quorumVotes()": FunctionFragment; - "state(uint256)": FunctionFragment; - "timelock()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DOMAIN_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAX_PROPOSAL_THRESHOLD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAX_VOTING_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAX_VOTING_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MIN_PROPOSAL_THRESHOLD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MIN_VOTING_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MIN_VOTING_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_acceptAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_setPendingAdmin", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "_setProposalThreshold", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_setVotingDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_setVotingPeriod", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "comp", values?: undefined): string; - encodeFunctionData( - functionFragment: "execute", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getActions", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getReceipt", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "implementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialProposalId", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialize", - values: [string, string, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestProposalIds", - values: [string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "pendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalMaxOperations", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposals", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], string[], BytesLike[], string] - ): string; - encodeFunctionData(functionFragment: "queue", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "quorumVotes", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DOMAIN_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAX_PROPOSAL_THRESHOLD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAX_VOTING_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAX_VOTING_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MIN_PROPOSAL_THRESHOLD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MIN_VOTING_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MIN_VOTING_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setProposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setVotingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setVotingPeriod", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "comp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getActions", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getReceipt", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "implementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "initialProposalId", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "latestProposalIds", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "pendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalMaxOperations", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "NewAdmin(address,address)": EventFragment; - "NewImplementation(address,address)": EventFragment; - "NewPendingAdmin(address,address)": EventFragment; - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "ProposalThresholdSet(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - "VotingDelaySet(uint256,uint256)": EventFragment; - "VotingPeriodSet(uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewImplementation"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalThresholdSet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingDelaySet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingPeriodSet"): EventFragment; -} - -export class GovernorBravoDelegate extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorBravoDelegateInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise<[string]>; - - "comp()"(overrides?: CallOverrides): Promise<[string]>; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - implementation(overrides?: CallOverrides): Promise<[string]>; - - "implementation()"(overrides?: CallOverrides): Promise<[string]>; - - initialProposalId(overrides?: CallOverrides): Promise<[BigNumber]>; - - "initialProposalId()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - pendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "pendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - proposalCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalCount()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalMaxOperations(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumVotes()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - _acceptAdmin(overrides?: CallOverrides): Promise; - - "_acceptAdmin()"(overrides?: CallOverrides): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - NewAdmin( - oldAdmin: null, - newAdmin: null - ): TypedEventFilter< - [string, string], - { oldAdmin: string; newAdmin: string } - >; - - NewImplementation( - oldImplementation: null, - newImplementation: null - ): TypedEventFilter< - [string, string], - { oldImplementation: string; newImplementation: string } - >; - - NewPendingAdmin( - oldPendingAdmin: null, - newPendingAdmin: null - ): TypedEventFilter< - [string, string], - { oldPendingAdmin: string; newPendingAdmin: string } - >; - - ProposalCanceled( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalCreated( - id: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - id: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalQueued( - id: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { id: BigNumber; eta: BigNumber } - >; - - ProposalThresholdSet( - oldProposalThreshold: null, - newProposalThreshold: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldProposalThreshold: BigNumber; newProposalThreshold: BigNumber } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - votes: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - votes: BigNumber; - reason: string; - } - >; - - VotingDelaySet( - oldVotingDelay: null, - newVotingDelay: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingDelay: BigNumber; newVotingDelay: BigNumber } - >; - - VotingPeriodSet( - oldVotingPeriod: null, - newVotingPeriod: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingPeriod: BigNumber; newVotingPeriod: BigNumber } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - MAX_PROPOSAL_THRESHOLD( - overrides?: CallOverrides - ): Promise; - - "MAX_PROPOSAL_THRESHOLD()"( - overrides?: CallOverrides - ): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"( - overrides?: CallOverrides - ): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"( - overrides?: CallOverrides - ): Promise; - - MIN_PROPOSAL_THRESHOLD( - overrides?: CallOverrides - ): Promise; - - "MIN_PROPOSAL_THRESHOLD()"( - overrides?: CallOverrides - ): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"( - overrides?: CallOverrides - ): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"( - overrides?: CallOverrides - ): Promise; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"( - overrides?: CallOverrides - ): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"( - overrides?: CallOverrides - ): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations( - overrides?: CallOverrides - ): Promise; - - "proposalMaxOperations()"( - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorBravoDelegateMock.d.ts b/libs/chains/src/eth/types/GovernorBravoDelegateMock.d.ts deleted file mode 100644 index 1a15c715ee1..00000000000 --- a/libs/chains/src/eth/types/GovernorBravoDelegateMock.d.ts +++ /dev/null @@ -1,2222 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorBravoDelegateMockInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "DOMAIN_TYPEHASH()": FunctionFragment; - "MAX_PROPOSAL_THRESHOLD()": FunctionFragment; - "MAX_VOTING_DELAY()": FunctionFragment; - "MAX_VOTING_PERIOD()": FunctionFragment; - "MIN_PROPOSAL_THRESHOLD()": FunctionFragment; - "MIN_VOTING_DELAY()": FunctionFragment; - "MIN_VOTING_PERIOD()": FunctionFragment; - "_acceptAdmin()": FunctionFragment; - "_setPendingAdmin(address)": FunctionFragment; - "_setProposalThreshold(uint256)": FunctionFragment; - "_setVotingDelay(uint256)": FunctionFragment; - "_setVotingPeriod(uint256)": FunctionFragment; - "admin()": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "comp()": FunctionFragment; - "execute(uint256)": FunctionFragment; - "getActions(uint256)": FunctionFragment; - "getReceipt(uint256,address)": FunctionFragment; - "implementation()": FunctionFragment; - "initialProposalId()": FunctionFragment; - "initialize(address,address,uint256,uint256,uint256)": FunctionFragment; - "latestProposalIds(address)": FunctionFragment; - "name()": FunctionFragment; - "pendingAdmin()": FunctionFragment; - "proposalCount()": FunctionFragment; - "proposalMaxOperations()": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposals(uint256)": FunctionFragment; - "propose(address[],uint256[],string[],bytes[],string)": FunctionFragment; - "queue(uint256)": FunctionFragment; - "quorumVotes()": FunctionFragment; - "state(uint256)": FunctionFragment; - "timelock()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DOMAIN_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAX_PROPOSAL_THRESHOLD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAX_VOTING_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAX_VOTING_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MIN_PROPOSAL_THRESHOLD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MIN_VOTING_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MIN_VOTING_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_acceptAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_setPendingAdmin", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "_setProposalThreshold", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_setVotingDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_setVotingPeriod", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "comp", values?: undefined): string; - encodeFunctionData( - functionFragment: "execute", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getActions", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getReceipt", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "implementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialProposalId", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialize", - values: [string, string, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestProposalIds", - values: [string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "pendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalMaxOperations", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposals", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], string[], BytesLike[], string] - ): string; - encodeFunctionData(functionFragment: "queue", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "quorumVotes", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DOMAIN_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAX_PROPOSAL_THRESHOLD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAX_VOTING_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAX_VOTING_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MIN_PROPOSAL_THRESHOLD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MIN_VOTING_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MIN_VOTING_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setProposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setVotingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setVotingPeriod", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "comp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getActions", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getReceipt", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "implementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "initialProposalId", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "latestProposalIds", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "pendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalMaxOperations", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "NewAdmin(address,address)": EventFragment; - "NewImplementation(address,address)": EventFragment; - "NewPendingAdmin(address,address)": EventFragment; - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "ProposalThresholdSet(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - "VotingDelaySet(uint256,uint256)": EventFragment; - "VotingPeriodSet(uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewImplementation"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalThresholdSet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingDelaySet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingPeriodSet"): EventFragment; -} - -export class GovernorBravoDelegateMock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorBravoDelegateMockInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise<[string]>; - - "comp()"(overrides?: CallOverrides): Promise<[string]>; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - implementation(overrides?: CallOverrides): Promise<[string]>; - - "implementation()"(overrides?: CallOverrides): Promise<[string]>; - - initialProposalId(overrides?: CallOverrides): Promise<[BigNumber]>; - - "initialProposalId()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - pendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "pendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - proposalCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalCount()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalMaxOperations(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumVotes()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - _acceptAdmin(overrides?: CallOverrides): Promise; - - "_acceptAdmin()"(overrides?: CallOverrides): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - NewAdmin( - oldAdmin: null, - newAdmin: null - ): TypedEventFilter< - [string, string], - { oldAdmin: string; newAdmin: string } - >; - - NewImplementation( - oldImplementation: null, - newImplementation: null - ): TypedEventFilter< - [string, string], - { oldImplementation: string; newImplementation: string } - >; - - NewPendingAdmin( - oldPendingAdmin: null, - newPendingAdmin: null - ): TypedEventFilter< - [string, string], - { oldPendingAdmin: string; newPendingAdmin: string } - >; - - ProposalCanceled( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalCreated( - id: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - id: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalQueued( - id: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { id: BigNumber; eta: BigNumber } - >; - - ProposalThresholdSet( - oldProposalThreshold: null, - newProposalThreshold: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldProposalThreshold: BigNumber; newProposalThreshold: BigNumber } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - votes: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - votes: BigNumber; - reason: string; - } - >; - - VotingDelaySet( - oldVotingDelay: null, - newVotingDelay: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingDelay: BigNumber; newVotingDelay: BigNumber } - >; - - VotingPeriodSet( - oldVotingPeriod: null, - newVotingPeriod: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingPeriod: BigNumber; newVotingPeriod: BigNumber } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - MAX_PROPOSAL_THRESHOLD( - overrides?: CallOverrides - ): Promise; - - "MAX_PROPOSAL_THRESHOLD()"( - overrides?: CallOverrides - ): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"( - overrides?: CallOverrides - ): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"( - overrides?: CallOverrides - ): Promise; - - MIN_PROPOSAL_THRESHOLD( - overrides?: CallOverrides - ): Promise; - - "MIN_PROPOSAL_THRESHOLD()"( - overrides?: CallOverrides - ): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"( - overrides?: CallOverrides - ): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"( - overrides?: CallOverrides - ): Promise; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"( - overrides?: CallOverrides - ): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"( - overrides?: CallOverrides - ): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations( - overrides?: CallOverrides - ): Promise; - - "proposalMaxOperations()"( - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorBravoDelegateStorageV1.d.ts b/libs/chains/src/eth/types/GovernorBravoDelegateStorageV1.d.ts deleted file mode 100644 index e085aac201b..00000000000 --- a/libs/chains/src/eth/types/GovernorBravoDelegateStorageV1.d.ts +++ /dev/null @@ -1,619 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorBravoDelegateStorageV1Interface - extends ethers.utils.Interface { - functions: { - "admin()": FunctionFragment; - "comp()": FunctionFragment; - "implementation()": FunctionFragment; - "initialProposalId()": FunctionFragment; - "latestProposalIds(address)": FunctionFragment; - "pendingAdmin()": FunctionFragment; - "proposalCount()": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposals(uint256)": FunctionFragment; - "timelock()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData(functionFragment: "comp", values?: undefined): string; - encodeFunctionData( - functionFragment: "implementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialProposalId", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "latestProposalIds", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "pendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposals", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "comp", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "implementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "initialProposalId", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "latestProposalIds", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "pendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: {}; -} - -export class GovernorBravoDelegateStorageV1 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorBravoDelegateStorageV1Interface; - - functions: { - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - comp(overrides?: CallOverrides): Promise<[string]>; - - "comp()"(overrides?: CallOverrides): Promise<[string]>; - - implementation(overrides?: CallOverrides): Promise<[string]>; - - "implementation()"(overrides?: CallOverrides): Promise<[string]>; - - initialProposalId(overrides?: CallOverrides): Promise<[BigNumber]>; - - "initialProposalId()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - pendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "pendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - proposalCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalCount()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"( - overrides?: CallOverrides - ): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"( - overrides?: CallOverrides - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorBravoDelegator.d.ts b/libs/chains/src/eth/types/GovernorBravoDelegator.d.ts deleted file mode 100644 index f85e720243a..00000000000 --- a/libs/chains/src/eth/types/GovernorBravoDelegator.d.ts +++ /dev/null @@ -1,364 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorBravoDelegatorInterface extends ethers.utils.Interface { - functions: { - "_setImplementation(address)": FunctionFragment; - "admin()": FunctionFragment; - "implementation()": FunctionFragment; - "pendingAdmin()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "_setImplementation", - values: [string] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "implementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "pendingAdmin", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "_setImplementation", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "implementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "pendingAdmin", - data: BytesLike - ): Result; - - events: { - "NewAdmin(address,address)": EventFragment; - "NewImplementation(address,address)": EventFragment; - "NewPendingAdmin(address,address)": EventFragment; - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "ProposalThresholdSet(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - "VotingDelaySet(uint256,uint256)": EventFragment; - "VotingPeriodSet(uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewImplementation"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalThresholdSet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingDelaySet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingPeriodSet"): EventFragment; -} - -export class GovernorBravoDelegator extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorBravoDelegatorInterface; - - functions: { - _setImplementation( - implementation_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setImplementation(address)"( - implementation_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - implementation(overrides?: CallOverrides): Promise<[string]>; - - "implementation()"(overrides?: CallOverrides): Promise<[string]>; - - pendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "pendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - }; - - _setImplementation( - implementation_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setImplementation(address)"( - implementation_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - callStatic: { - _setImplementation( - implementation_: string, - overrides?: CallOverrides - ): Promise; - - "_setImplementation(address)"( - implementation_: string, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - }; - - filters: { - NewAdmin( - oldAdmin: null, - newAdmin: null - ): TypedEventFilter< - [string, string], - { oldAdmin: string; newAdmin: string } - >; - - NewImplementation( - oldImplementation: null, - newImplementation: null - ): TypedEventFilter< - [string, string], - { oldImplementation: string; newImplementation: string } - >; - - NewPendingAdmin( - oldPendingAdmin: null, - newPendingAdmin: null - ): TypedEventFilter< - [string, string], - { oldPendingAdmin: string; newPendingAdmin: string } - >; - - ProposalCanceled( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalCreated( - id: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - id: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalQueued( - id: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { id: BigNumber; eta: BigNumber } - >; - - ProposalThresholdSet( - oldProposalThreshold: null, - newProposalThreshold: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldProposalThreshold: BigNumber; newProposalThreshold: BigNumber } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - votes: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - votes: BigNumber; - reason: string; - } - >; - - VotingDelaySet( - oldVotingDelay: null, - newVotingDelay: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingDelay: BigNumber; newVotingDelay: BigNumber } - >; - - VotingPeriodSet( - oldVotingPeriod: null, - newVotingPeriod: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingPeriod: BigNumber; newVotingPeriod: BigNumber } - >; - }; - - estimateGas: { - _setImplementation( - implementation_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setImplementation(address)"( - implementation_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - _setImplementation( - implementation_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setImplementation(address)"( - implementation_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"( - overrides?: CallOverrides - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorBravoDelegatorStorage.d.ts b/libs/chains/src/eth/types/GovernorBravoDelegatorStorage.d.ts deleted file mode 100644 index da6a47f3c2f..00000000000 --- a/libs/chains/src/eth/types/GovernorBravoDelegatorStorage.d.ts +++ /dev/null @@ -1,164 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorBravoDelegatorStorageInterface - extends ethers.utils.Interface { - functions: { - "admin()": FunctionFragment; - "implementation()": FunctionFragment; - "pendingAdmin()": FunctionFragment; - }; - - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "implementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "pendingAdmin", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "implementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "pendingAdmin", - data: BytesLike - ): Result; - - events: {}; -} - -export class GovernorBravoDelegatorStorage extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorBravoDelegatorStorageInterface; - - functions: { - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - implementation(overrides?: CallOverrides): Promise<[string]>; - - "implementation()"(overrides?: CallOverrides): Promise<[string]>; - - pendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "pendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - }; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - callStatic: { - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - }; - - filters: {}; - - estimateGas: { - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"( - overrides?: CallOverrides - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorBravoEvents.d.ts b/libs/chains/src/eth/types/GovernorBravoEvents.d.ts deleted file mode 100644 index 0ddc28c3a86..00000000000 --- a/libs/chains/src/eth/types/GovernorBravoEvents.d.ts +++ /dev/null @@ -1,214 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber} from "ethers"; -import { - Contract, -} from "ethers"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { EventFragment} from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorBravoEventsInterface extends ethers.utils.Interface { - functions: {}; - - events: { - "NewAdmin(address,address)": EventFragment; - "NewImplementation(address,address)": EventFragment; - "NewPendingAdmin(address,address)": EventFragment; - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "ProposalThresholdSet(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - "VotingDelaySet(uint256,uint256)": EventFragment; - "VotingPeriodSet(uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewImplementation"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalThresholdSet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingDelaySet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingPeriodSet"): EventFragment; -} - -export class GovernorBravoEvents extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorBravoEventsInterface; - - functions: {}; - - callStatic: {}; - - filters: { - NewAdmin( - oldAdmin: null, - newAdmin: null - ): TypedEventFilter< - [string, string], - { oldAdmin: string; newAdmin: string } - >; - - NewImplementation( - oldImplementation: null, - newImplementation: null - ): TypedEventFilter< - [string, string], - { oldImplementation: string; newImplementation: string } - >; - - NewPendingAdmin( - oldPendingAdmin: null, - newPendingAdmin: null - ): TypedEventFilter< - [string, string], - { oldPendingAdmin: string; newPendingAdmin: string } - >; - - ProposalCanceled( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalCreated( - id: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - id: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalQueued( - id: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { id: BigNumber; eta: BigNumber } - >; - - ProposalThresholdSet( - oldProposalThreshold: null, - newProposalThreshold: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldProposalThreshold: BigNumber; newProposalThreshold: BigNumber } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - votes: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - votes: BigNumber; - reason: string; - } - >; - - VotingDelaySet( - oldVotingDelay: null, - newVotingDelay: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingDelay: BigNumber; newVotingDelay: BigNumber } - >; - - VotingPeriodSet( - oldVotingPeriod: null, - newVotingPeriod: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingPeriod: BigNumber; newVotingPeriod: BigNumber } - >; - }; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/libs/chains/src/eth/types/GovernorBravoImmutable.d.ts b/libs/chains/src/eth/types/GovernorBravoImmutable.d.ts deleted file mode 100644 index 0f660a7080a..00000000000 --- a/libs/chains/src/eth/types/GovernorBravoImmutable.d.ts +++ /dev/null @@ -1,2261 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorBravoImmutableInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "DOMAIN_TYPEHASH()": FunctionFragment; - "MAX_PROPOSAL_THRESHOLD()": FunctionFragment; - "MAX_VOTING_DELAY()": FunctionFragment; - "MAX_VOTING_PERIOD()": FunctionFragment; - "MIN_PROPOSAL_THRESHOLD()": FunctionFragment; - "MIN_VOTING_DELAY()": FunctionFragment; - "MIN_VOTING_PERIOD()": FunctionFragment; - "_acceptAdmin()": FunctionFragment; - "_initiate()": FunctionFragment; - "_setPendingAdmin(address)": FunctionFragment; - "_setProposalThreshold(uint256)": FunctionFragment; - "_setVotingDelay(uint256)": FunctionFragment; - "_setVotingPeriod(uint256)": FunctionFragment; - "admin()": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "comp()": FunctionFragment; - "execute(uint256)": FunctionFragment; - "getActions(uint256)": FunctionFragment; - "getReceipt(uint256,address)": FunctionFragment; - "implementation()": FunctionFragment; - "initialProposalId()": FunctionFragment; - "initialize(address,address,uint256,uint256,uint256)": FunctionFragment; - "latestProposalIds(address)": FunctionFragment; - "name()": FunctionFragment; - "pendingAdmin()": FunctionFragment; - "proposalCount()": FunctionFragment; - "proposalMaxOperations()": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposals(uint256)": FunctionFragment; - "propose(address[],uint256[],string[],bytes[],string)": FunctionFragment; - "queue(uint256)": FunctionFragment; - "quorumVotes()": FunctionFragment; - "state(uint256)": FunctionFragment; - "timelock()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DOMAIN_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAX_PROPOSAL_THRESHOLD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAX_VOTING_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAX_VOTING_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MIN_PROPOSAL_THRESHOLD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MIN_VOTING_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MIN_VOTING_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "_acceptAdmin", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "_initiate", values?: undefined): string; - encodeFunctionData( - functionFragment: "_setPendingAdmin", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "_setProposalThreshold", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_setVotingDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "_setVotingPeriod", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData(functionFragment: "comp", values?: undefined): string; - encodeFunctionData( - functionFragment: "execute", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getActions", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getReceipt", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "implementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialProposalId", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialize", - values: [string, string, BigNumberish, BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "latestProposalIds", - values: [string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "pendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalMaxOperations", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposals", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], string[], BytesLike[], string] - ): string; - encodeFunctionData(functionFragment: "queue", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "quorumVotes", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DOMAIN_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAX_PROPOSAL_THRESHOLD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAX_VOTING_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAX_VOTING_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MIN_PROPOSAL_THRESHOLD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MIN_VOTING_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MIN_VOTING_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "_initiate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "_setPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setProposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setVotingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "_setVotingPeriod", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "comp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getActions", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getReceipt", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "implementation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "initialProposalId", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "latestProposalIds", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "pendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalMaxOperations", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "NewAdmin(address,address)": EventFragment; - "NewImplementation(address,address)": EventFragment; - "NewPendingAdmin(address,address)": EventFragment; - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "ProposalThresholdSet(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - "VotingDelaySet(uint256,uint256)": EventFragment; - "VotingPeriodSet(uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewImplementation"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalThresholdSet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingDelaySet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingPeriodSet"): EventFragment; -} - -export class GovernorBravoImmutable extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorBravoImmutableInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _initiate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_initiate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise<[string]>; - - "comp()"(overrides?: CallOverrides): Promise<[string]>; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - implementation(overrides?: CallOverrides): Promise<[string]>; - - "implementation()"(overrides?: CallOverrides): Promise<[string]>; - - initialProposalId(overrides?: CallOverrides): Promise<[BigNumber]>; - - "initialProposalId()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - pendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "pendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - proposalCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalCount()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalMaxOperations(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumVotes()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _initiate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_initiate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - _acceptAdmin(overrides?: CallOverrides): Promise; - - "_acceptAdmin()"(overrides?: CallOverrides): Promise; - - _initiate(overrides?: CallOverrides): Promise; - - "_initiate()"(overrides?: CallOverrides): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: CallOverrides - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: CallOverrides - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - NewAdmin( - oldAdmin: null, - newAdmin: null - ): TypedEventFilter< - [string, string], - { oldAdmin: string; newAdmin: string } - >; - - NewImplementation( - oldImplementation: null, - newImplementation: null - ): TypedEventFilter< - [string, string], - { oldImplementation: string; newImplementation: string } - >; - - NewPendingAdmin( - oldPendingAdmin: null, - newPendingAdmin: null - ): TypedEventFilter< - [string, string], - { oldPendingAdmin: string; newPendingAdmin: string } - >; - - ProposalCanceled( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalCreated( - id: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - id: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalQueued( - id: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { id: BigNumber; eta: BigNumber } - >; - - ProposalThresholdSet( - oldProposalThreshold: null, - newProposalThreshold: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldProposalThreshold: BigNumber; newProposalThreshold: BigNumber } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - votes: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - votes: BigNumber; - reason: string; - } - >; - - VotingDelaySet( - oldVotingDelay: null, - newVotingDelay: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingDelay: BigNumber; newVotingDelay: BigNumber } - >; - - VotingPeriodSet( - oldVotingPeriod: null, - newVotingPeriod: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldVotingPeriod: BigNumber; newVotingPeriod: BigNumber } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - MAX_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MAX_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - MIN_PROPOSAL_THRESHOLD(overrides?: CallOverrides): Promise; - - "MIN_PROPOSAL_THRESHOLD()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"(overrides?: CallOverrides): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"(overrides?: CallOverrides): Promise; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _initiate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_initiate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"(overrides?: CallOverrides): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations(overrides?: CallOverrides): Promise; - - "proposalMaxOperations()"(overrides?: CallOverrides): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - MAX_PROPOSAL_THRESHOLD( - overrides?: CallOverrides - ): Promise; - - "MAX_PROPOSAL_THRESHOLD()"( - overrides?: CallOverrides - ): Promise; - - MAX_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MAX_VOTING_DELAY()"( - overrides?: CallOverrides - ): Promise; - - MAX_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MAX_VOTING_PERIOD()"( - overrides?: CallOverrides - ): Promise; - - MIN_PROPOSAL_THRESHOLD( - overrides?: CallOverrides - ): Promise; - - "MIN_PROPOSAL_THRESHOLD()"( - overrides?: CallOverrides - ): Promise; - - MIN_VOTING_DELAY(overrides?: CallOverrides): Promise; - - "MIN_VOTING_DELAY()"( - overrides?: CallOverrides - ): Promise; - - MIN_VOTING_PERIOD(overrides?: CallOverrides): Promise; - - "MIN_VOTING_PERIOD()"( - overrides?: CallOverrides - ): Promise; - - _acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _initiate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_initiate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setPendingAdmin( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setPendingAdmin(address)"( - newPendingAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setProposalThreshold( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setProposalThreshold(uint256)"( - newProposalThreshold: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingDelay( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingDelay(uint256)"( - newVotingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - _setVotingPeriod( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "_setVotingPeriod(uint256)"( - newVotingPeriod: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - comp(overrides?: CallOverrides): Promise; - - "comp()"(overrides?: CallOverrides): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"( - overrides?: CallOverrides - ): Promise; - - initialProposalId(overrides?: CallOverrides): Promise; - - "initialProposalId()"( - overrides?: CallOverrides - ): Promise; - - initialize( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,uint256,uint256,uint256)"( - timelock_: string, - comp_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - latestProposalIds( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "latestProposalIds(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - proposalCount(overrides?: CallOverrides): Promise; - - "proposalCount()"(overrides?: CallOverrides): Promise; - - proposalMaxOperations( - overrides?: CallOverrides - ): Promise; - - "proposalMaxOperations()"( - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorCompatibilityBravo.d.ts b/libs/chains/src/eth/types/GovernorCompatibilityBravo.d.ts deleted file mode 100644 index 1fc02d32184..00000000000 --- a/libs/chains/src/eth/types/GovernorCompatibilityBravo.d.ts +++ /dev/null @@ -1,1905 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorCompatibilityBravoInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getActions(uint256)": FunctionFragment; - "getReceipt(uint256,address)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalEta(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposals(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "queue(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "quorumVotes()": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "timelock()": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getActions", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getReceipt", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalEta", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposals", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "queue", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "quorumVotes", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getActions", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getReceipt", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalEta", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorCompatibilityBravo extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorCompatibilityBravoInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - quorumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumVotes()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalQueued( - proposalId: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { proposalId: BigNumber; eta: BigNumber } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposals( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorCountingSimple.d.ts b/libs/chains/src/eth/types/GovernorCountingSimple.d.ts deleted file mode 100644 index 2ea77b575de..00000000000 --- a/libs/chains/src/eth/types/GovernorCountingSimple.d.ts +++ /dev/null @@ -1,1497 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorCountingSimpleInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "proposalProposer(uint256)": FunctionFragment; - "proposalEta(uint256)": FunctionFragment; - "proposalVotes(uint256)": FunctionFragment; - "proposalThreshold(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalProposer", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalEta", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalVotes", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalProposer", - data: BytesLike - ): Result - decodeFunctionResult( - functionFragment: "proposalEta", - data: BytesLike - ): Result - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result - decodeFunctionResult( - functionFragment: "proposalVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorCountingSimple extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorCountingSimpleInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalProposer( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalProposer(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalThreshold( - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalProposer( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalProposer(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold( - overrides?: CallOverrides - ): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalProposer( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalProposer(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold( - overrides?: CallOverrides - ): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalProposer( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalProposer(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold( - overrides?: CallOverrides - ): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalProposer( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalProposer(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold( - overrides?: CallOverrides - ): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorMock.d.ts b/libs/chains/src/eth/types/GovernorMock.d.ts deleted file mode 100644 index 862bcba845f..00000000000 --- a/libs/chains/src/eth/types/GovernorMock.d.ts +++ /dev/null @@ -1,1848 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorMockInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "cancel(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalEta(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposalVotes(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "queue(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "quorumDenominator()": FunctionFragment; - "quorumNumerator()": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "timelock()": FunctionFragment; - "token()": FunctionFragment; - "updateQuorumNumerator(uint256)": FunctionFragment; - "updateTimelock(address)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cancel", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalEta", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposalVotes", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "queue", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "quorumDenominator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "quorumNumerator", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "updateQuorumNumerator", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "updateTimelock", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalEta", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumDenominator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "quorumNumerator", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateQuorumNumerator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "updateTimelock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "QuorumNumeratorUpdated(uint256,uint256)": EventFragment; - "TimelockChange(address,address)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "QuorumNumeratorUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TimelockChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorMock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorMockInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - cancel( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - quorumDenominator(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumDenominator()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - quorumNumerator(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumNumerator()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - "token()"(overrides?: CallOverrides): Promise<[string]>; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumDenominator(overrides?: CallOverrides): Promise; - - "quorumDenominator()"(overrides?: CallOverrides): Promise; - - quorumNumerator(overrides?: CallOverrides): Promise; - - "quorumNumerator()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "cancel(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, BigNumber] & { - againstVotes: BigNumber; - forVotes: BigNumber; - abstainVotes: BigNumber; - } - >; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumDenominator(overrides?: CallOverrides): Promise; - - "quorumDenominator()"(overrides?: CallOverrides): Promise; - - quorumNumerator(overrides?: CallOverrides): Promise; - - "quorumNumerator()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: CallOverrides - ): Promise; - - updateTimelock( - newTimelock: string, - overrides?: CallOverrides - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalQueued( - proposalId: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { proposalId: BigNumber; eta: BigNumber } - >; - - QuorumNumeratorUpdated( - oldQuorumNumerator: null, - newQuorumNumerator: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldQuorumNumerator: BigNumber; newQuorumNumerator: BigNumber } - >; - - TimelockChange( - oldTimelock: null, - newTimelock: null - ): TypedEventFilter< - [string, string], - { oldTimelock: string; newTimelock: string } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumDenominator(overrides?: CallOverrides): Promise; - - "quorumDenominator()"(overrides?: CallOverrides): Promise; - - quorumNumerator(overrides?: CallOverrides): Promise; - - "quorumNumerator()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposalVotes( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalVotes(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumDenominator(overrides?: CallOverrides): Promise; - - "quorumDenominator()"( - overrides?: CallOverrides - ): Promise; - - quorumNumerator(overrides?: CallOverrides): Promise; - - "quorumNumerator()"( - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorProposalThreshold.d.ts b/libs/chains/src/eth/types/GovernorProposalThreshold.d.ts deleted file mode 100644 index 3ae17981a59..00000000000 --- a/libs/chains/src/eth/types/GovernorProposalThreshold.d.ts +++ /dev/null @@ -1,1266 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorProposalThresholdInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorProposalThreshold extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorProposalThresholdInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorTimelockCompound.d.ts b/libs/chains/src/eth/types/GovernorTimelockCompound.d.ts deleted file mode 100644 index 375a14feb8a..00000000000 --- a/libs/chains/src/eth/types/GovernorTimelockCompound.d.ts +++ /dev/null @@ -1,1527 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorTimelockCompoundInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "__acceptAdmin()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalEta(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "queue(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "timelock()": FunctionFragment; - "updateTimelock(address)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "__acceptAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalEta", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "queue", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData( - functionFragment: "updateTimelock", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "__acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalEta", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateTimelock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "TimelockChange(address,address)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TimelockChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorTimelockCompound extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorTimelockCompoundInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - __acceptAdmin(overrides?: CallOverrides): Promise; - - "__acceptAdmin()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: CallOverrides - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalQueued( - proposalId: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { proposalId: BigNumber; eta: BigNumber } - >; - - TimelockChange( - oldTimelock: null, - newTimelock: null - ): TypedEventFilter< - [string, string], - { oldTimelock: string; newTimelock: string } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - __acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorTimelockControl.d.ts b/libs/chains/src/eth/types/GovernorTimelockControl.d.ts deleted file mode 100644 index 283075aa315..00000000000 --- a/libs/chains/src/eth/types/GovernorTimelockControl.d.ts +++ /dev/null @@ -1,1482 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorTimelockControlInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalEta(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "queue(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "timelock()": FunctionFragment; - "updateTimelock(address)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalEta", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "queue", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData( - functionFragment: "updateTimelock", - values: [string] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalEta", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateTimelock", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "TimelockChange(address,address)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TimelockChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorTimelockControl extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorTimelockControlInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: CallOverrides - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalQueued( - proposalId: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { proposalId: BigNumber; eta: BigNumber } - >; - - TimelockChange( - oldTimelock: null, - newTimelock: null - ): TypedEventFilter< - [string, string], - { oldTimelock: string; newTimelock: string } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - updateTimelock( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateTimelock(address)"( - newTimelock: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorVotes.d.ts b/libs/chains/src/eth/types/GovernorVotes.d.ts deleted file mode 100644 index 45bae9f7a4e..00000000000 --- a/libs/chains/src/eth/types/GovernorVotes.d.ts +++ /dev/null @@ -1,1258 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorVotesInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "token()": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorVotes extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorVotesInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - "token()"(overrides?: CallOverrides): Promise<[string]>; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorVotesComp.d.ts b/libs/chains/src/eth/types/GovernorVotesComp.d.ts deleted file mode 100644 index 2c50f6b9c81..00000000000 --- a/libs/chains/src/eth/types/GovernorVotesComp.d.ts +++ /dev/null @@ -1,1258 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorVotesCompInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "token()": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorVotesComp extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorVotesCompInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - "token()"(overrides?: CallOverrides): Promise<[string]>; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GovernorVotesQuorumFraction.d.ts b/libs/chains/src/eth/types/GovernorVotesQuorumFraction.d.ts deleted file mode 100644 index 09b62e43ec8..00000000000 --- a/libs/chains/src/eth/types/GovernorVotesQuorumFraction.d.ts +++ /dev/null @@ -1,1389 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GovernorVotesQuorumFractionInterface extends ethers.utils.Interface { - functions: { - "BALLOT_TYPEHASH()": FunctionFragment; - "COUNTING_MODE()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "quorumDenominator()": FunctionFragment; - "quorumNumerator()": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "token()": FunctionFragment; - "updateQuorumNumerator(uint256)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "BALLOT_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "quorumDenominator", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "quorumNumerator", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "token", values?: undefined): string; - encodeFunctionData( - functionFragment: "updateQuorumNumerator", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "BALLOT_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumDenominator", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "quorumNumerator", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateQuorumNumerator", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "QuorumNumeratorUpdated(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "QuorumNumeratorUpdated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class GovernorVotesQuorumFraction extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GovernorVotesQuorumFractionInterface; - - functions: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - quorumDenominator(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumDenominator()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - quorumNumerator(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumNumerator()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - token(overrides?: CallOverrides): Promise<[string]>; - - "token()"(overrides?: CallOverrides): Promise<[string]>; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumDenominator(overrides?: CallOverrides): Promise; - - "quorumDenominator()"(overrides?: CallOverrides): Promise; - - quorumNumerator(overrides?: CallOverrides): Promise; - - "quorumNumerator()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumDenominator(overrides?: CallOverrides): Promise; - - "quorumDenominator()"(overrides?: CallOverrides): Promise; - - quorumNumerator(overrides?: CallOverrides): Promise; - - "quorumNumerator()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - QuorumNumeratorUpdated( - oldQuorumNumerator: null, - newQuorumNumerator: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldQuorumNumerator: BigNumber; newQuorumNumerator: BigNumber } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"(overrides?: CallOverrides): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumDenominator(overrides?: CallOverrides): Promise; - - "quorumDenominator()"(overrides?: CallOverrides): Promise; - - quorumNumerator(overrides?: CallOverrides): Promise; - - "quorumNumerator()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - BALLOT_TYPEHASH(overrides?: CallOverrides): Promise; - - "BALLOT_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumDenominator(overrides?: CallOverrides): Promise; - - "quorumDenominator()"( - overrides?: CallOverrides - ): Promise; - - quorumNumerator(overrides?: CallOverrides): Promise; - - "quorumNumerator()"( - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - token(overrides?: CallOverrides): Promise; - - "token()"(overrides?: CallOverrides): Promise; - - updateQuorumNumerator( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateQuorumNumerator(uint256)"( - newQuorumNumerator: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GuildBank1.d.ts b/libs/chains/src/eth/types/GuildBank1.d.ts deleted file mode 100644 index 76eb50752a3..00000000000 --- a/libs/chains/src/eth/types/GuildBank1.d.ts +++ /dev/null @@ -1,360 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GuildBank1Interface extends ethers.utils.Interface { - functions: { - "approvedToken()": FunctionFragment; - "isOwner()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "withdraw(address,uint256,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "approvedToken", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "isOwner", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [string, BigNumberish, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "approvedToken", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "isOwner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - "Withdrawal(address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawal"): EventFragment; -} - -export class GuildBank1 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GuildBank1Interface; - - functions: { - approvedToken(overrides?: CallOverrides): Promise<[string]>; - - "approvedToken()"(overrides?: CallOverrides): Promise<[string]>; - - isOwner(overrides?: CallOverrides): Promise<[boolean]>; - - "isOwner()"(overrides?: CallOverrides): Promise<[boolean]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - "owner()"(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(address,uint256,uint256)"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - approvedToken(overrides?: CallOverrides): Promise; - - "approvedToken()"(overrides?: CallOverrides): Promise; - - isOwner(overrides?: CallOverrides): Promise; - - "isOwner()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(address,uint256,uint256)"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - approvedToken(overrides?: CallOverrides): Promise; - - "approvedToken()"(overrides?: CallOverrides): Promise; - - isOwner(overrides?: CallOverrides): Promise; - - "isOwner()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - "renounceOwnership()"(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "withdraw(address,uint256,uint256)"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - OwnershipTransferred( - previousOwner: string | null, - newOwner: string | null - ): TypedEventFilter< - [string, string], - { previousOwner: string; newOwner: string } - >; - - Withdrawal( - receiver: string | null, - amount: null - ): TypedEventFilter< - [string, BigNumber], - { receiver: string; amount: BigNumber } - >; - }; - - estimateGas: { - approvedToken(overrides?: CallOverrides): Promise; - - "approvedToken()"(overrides?: CallOverrides): Promise; - - isOwner(overrides?: CallOverrides): Promise; - - "isOwner()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(address,uint256,uint256)"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - approvedToken(overrides?: CallOverrides): Promise; - - "approvedToken()"(overrides?: CallOverrides): Promise; - - isOwner(overrides?: CallOverrides): Promise; - - "isOwner()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(address,uint256,uint256)"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/GuildBank2.d.ts b/libs/chains/src/eth/types/GuildBank2.d.ts deleted file mode 100644 index 894c04bca7c..00000000000 --- a/libs/chains/src/eth/types/GuildBank2.d.ts +++ /dev/null @@ -1,421 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface GuildBank2Interface extends ethers.utils.Interface { - functions: { - "isOwner()": FunctionFragment; - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - "withdraw(address,uint256,uint256,address[])": FunctionFragment; - "withdrawToken(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData(functionFragment: "isOwner", values?: undefined): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [string, BigNumberish, BigNumberish, string[]] - ): string; - encodeFunctionData( - functionFragment: "withdrawToken", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "isOwner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawToken", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - "Withdrawal(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawal"): EventFragment; -} - -export class GuildBank2 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: GuildBank2Interface; - - functions: { - isOwner(overrides?: CallOverrides): Promise<[boolean]>; - - "isOwner()"(overrides?: CallOverrides): Promise<[boolean]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - "owner()"(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(address,uint256,uint256,address[])"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawToken( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdrawToken(address,address,uint256)"( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - isOwner(overrides?: CallOverrides): Promise; - - "isOwner()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(address,uint256,uint256,address[])"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawToken( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdrawToken(address,address,uint256)"( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - isOwner(overrides?: CallOverrides): Promise; - - "isOwner()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - "renounceOwnership()"(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: CallOverrides - ): Promise; - - "withdraw(address,uint256,uint256,address[])"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: CallOverrides - ): Promise; - - withdrawToken( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "withdrawToken(address,address,uint256)"( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - OwnershipTransferred( - previousOwner: string | null, - newOwner: string | null - ): TypedEventFilter< - [string, string], - { previousOwner: string; newOwner: string } - >; - - Withdrawal( - receiver: string | null, - tokenAddress: string | null, - amount: null - ): TypedEventFilter< - [string, string, BigNumber], - { receiver: string; tokenAddress: string; amount: BigNumber } - >; - }; - - estimateGas: { - isOwner(overrides?: CallOverrides): Promise; - - "isOwner()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(address,uint256,uint256,address[])"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawToken( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdrawToken(address,address,uint256)"( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - isOwner(overrides?: CallOverrides): Promise; - - "isOwner()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdraw( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdraw(address,uint256,uint256,address[])"( - receiver: string, - shares: BigNumberish, - totalShares: BigNumberish, - _approvedTokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - withdrawToken( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "withdrawToken(address,address,uint256)"( - token: string, - receiver: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/Helper.d.ts b/libs/chains/src/eth/types/Helper.d.ts deleted file mode 100644 index 0b59d3384b9..00000000000 --- a/libs/chains/src/eth/types/Helper.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer} from "ethers"; -import { - Contract, -} from "ethers"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface HelperInterface extends ethers.utils.Interface { - functions: {}; - - events: {}; -} - -export class Helper extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: HelperInterface; - - functions: {}; - - callStatic: {}; - - filters: {}; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/libs/chains/src/eth/types/IAaveGovernanceV2.d.ts b/libs/chains/src/eth/types/IAaveGovernanceV2.d.ts deleted file mode 100644 index 7e694958cf6..00000000000 --- a/libs/chains/src/eth/types/IAaveGovernanceV2.d.ts +++ /dev/null @@ -1,1540 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IAaveGovernanceV2Interface extends ethers.utils.Interface { - functions: { - "__abdicate()": FunctionFragment; - "authorizeExecutors(address[])": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)": FunctionFragment; - "execute(uint256)": FunctionFragment; - "getGovernanceStrategy()": FunctionFragment; - "getGuardian()": FunctionFragment; - "getProposalById(uint256)": FunctionFragment; - "getProposalState(uint256)": FunctionFragment; - "getProposalsCount()": FunctionFragment; - "getVoteOnProposal(uint256,address)": FunctionFragment; - "getVotingDelay()": FunctionFragment; - "isExecutorAuthorized(address)": FunctionFragment; - "queue(uint256)": FunctionFragment; - "setGovernanceStrategy(address)": FunctionFragment; - "setVotingDelay(uint256)": FunctionFragment; - "submitVote(uint256,bool)": FunctionFragment; - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; - "unauthorizeExecutors(address[])": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "__abdicate", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "authorizeExecutors", - values: [string[]] - ): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "create", - values: [ - string, - string[], - BigNumberish[], - string[], - BytesLike[], - boolean[], - BytesLike - ] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getGovernanceStrategy", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getGuardian", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getProposalById", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getProposalState", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getProposalsCount", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getVoteOnProposal", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getVotingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "isExecutorAuthorized", - values: [string] - ): string; - encodeFunctionData(functionFragment: "queue", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "setGovernanceStrategy", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setVotingDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "submitVote", - values: [BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "submitVoteBySignature", - values: [BigNumberish, boolean, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "unauthorizeExecutors", - values: [string[]] - ): string; - - decodeFunctionResult(functionFragment: "__abdicate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "authorizeExecutors", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "create", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getGovernanceStrategy", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getGuardian", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getProposalById", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getProposalState", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getProposalsCount", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getVoteOnProposal", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getVotingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isExecutorAuthorized", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setGovernanceStrategy", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setVotingDelay", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "submitVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "submitVoteBySignature", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "unauthorizeExecutors", - data: BytesLike - ): Result; - - events: { - "ExecutorAuthorized(address)": EventFragment; - "ExecutorUnauthorized(address)": EventFragment; - "GovernanceStrategyChanged(address,address)": EventFragment; - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address,address[],uint256[],string[],bytes[],bool[],uint256,uint256,address,bytes32)": EventFragment; - "ProposalExecuted(uint256,address)": EventFragment; - "ProposalQueued(uint256,uint256,address)": EventFragment; - "VoteEmitted(uint256,address,bool,uint256)": EventFragment; - "VotingDelayChanged(uint256,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ExecutorAuthorized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutorUnauthorized"): EventFragment; - getEvent(nameOrSignatureOrTopic: "GovernanceStrategyChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteEmitted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VotingDelayChanged"): EventFragment; -} - -export class IAaveGovernanceV2 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IAaveGovernanceV2Interface; - - functions: { - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getGovernanceStrategy(overrides?: CallOverrides): Promise<[string]>; - - "getGovernanceStrategy()"(overrides?: CallOverrides): Promise<[string]>; - - getGuardian(overrides?: CallOverrides): Promise<[string]>; - - "getGuardian()"(overrides?: CallOverrides): Promise<[string]>; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - ] - >; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - ] - >; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - getProposalsCount(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getProposalsCount()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [[boolean, BigNumber] & { support: boolean; votingPower: BigNumber }] - >; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [[boolean, BigNumber] & { support: boolean; votingPower: BigNumber }] - >; - - getVotingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getVotingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getGovernanceStrategy(overrides?: CallOverrides): Promise; - - "getGovernanceStrategy()"(overrides?: CallOverrides): Promise; - - getGuardian(overrides?: CallOverrides): Promise; - - "getGuardian()"(overrides?: CallOverrides): Promise; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - >; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - >; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalsCount(overrides?: CallOverrides): Promise; - - "getProposalsCount()"(overrides?: CallOverrides): Promise; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, BigNumber] & { support: boolean; votingPower: BigNumber } - >; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, BigNumber] & { support: boolean; votingPower: BigNumber } - >; - - getVotingDelay(overrides?: CallOverrides): Promise; - - "getVotingDelay()"(overrides?: CallOverrides): Promise; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - __abdicate(overrides?: CallOverrides): Promise; - - "__abdicate()"(overrides?: CallOverrides): Promise; - - authorizeExecutors( - executors: string[], - overrides?: CallOverrides - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: CallOverrides - ): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - execute(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getGovernanceStrategy(overrides?: CallOverrides): Promise; - - "getGovernanceStrategy()"(overrides?: CallOverrides): Promise; - - getGuardian(overrides?: CallOverrides): Promise; - - "getGuardian()"(overrides?: CallOverrides): Promise; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - >; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string - ] & { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - } - >; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalsCount(overrides?: CallOverrides): Promise; - - "getProposalsCount()"(overrides?: CallOverrides): Promise; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, BigNumber] & { support: boolean; votingPower: BigNumber } - >; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, BigNumber] & { support: boolean; votingPower: BigNumber } - >; - - getVotingDelay(overrides?: CallOverrides): Promise; - - "getVotingDelay()"(overrides?: CallOverrides): Promise; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise; - - queue(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: CallOverrides - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: CallOverrides - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: CallOverrides - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: CallOverrides - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: CallOverrides - ): Promise; - }; - - filters: { - ExecutorAuthorized( - executor: null - ): TypedEventFilter<[string], { executor: string }>; - - ExecutorUnauthorized( - executor: null - ): TypedEventFilter<[string], { executor: string }>; - - GovernanceStrategyChanged( - newStrategy: string | null, - initiatorChange: string | null - ): TypedEventFilter< - [string, string], - { newStrategy: string; initiatorChange: string } - >; - - ProposalCanceled( - id: null - ): TypedEventFilter<[BigNumber], { id: BigNumber }>; - - ProposalCreated( - id: null, - creator: string | null, - executor: string | null, - targets: null, - values: null, - signatures: null, - calldatas: null, - withDelegatecalls: null, - startBlock: null, - endBlock: null, - strategy: null, - ipfsHash: null - ): TypedEventFilter< - [ - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - string, - string - ], - { - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - strategy: string; - ipfsHash: string; - } - >; - - ProposalExecuted( - id: null, - initiatorExecution: string | null - ): TypedEventFilter< - [BigNumber, string], - { id: BigNumber; initiatorExecution: string } - >; - - ProposalQueued( - id: null, - executionTime: null, - initiatorQueueing: string | null - ): TypedEventFilter< - [BigNumber, BigNumber, string], - { id: BigNumber; executionTime: BigNumber; initiatorQueueing: string } - >; - - VoteEmitted( - id: null, - voter: string | null, - support: null, - votingPower: null - ): TypedEventFilter< - [BigNumber, string, boolean, BigNumber], - { id: BigNumber; voter: string; support: boolean; votingPower: BigNumber } - >; - - VotingDelayChanged( - newVotingDelay: null, - initiatorChange: string | null - ): TypedEventFilter< - [BigNumber, string], - { newVotingDelay: BigNumber; initiatorChange: string } - >; - }; - - estimateGas: { - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getGovernanceStrategy(overrides?: CallOverrides): Promise; - - "getGovernanceStrategy()"(overrides?: CallOverrides): Promise; - - getGuardian(overrides?: CallOverrides): Promise; - - "getGuardian()"(overrides?: CallOverrides): Promise; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalsCount(overrides?: CallOverrides): Promise; - - "getProposalsCount()"(overrides?: CallOverrides): Promise; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotingDelay(overrides?: CallOverrides): Promise; - - "getVotingDelay()"(overrides?: CallOverrides): Promise; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - __abdicate( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "__abdicate()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - authorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - create( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "create(address,address[],uint256[],string[],bytes[],bool[],bytes32)"( - executor: string, - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - withDelegatecalls: boolean[], - ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getGovernanceStrategy( - overrides?: CallOverrides - ): Promise; - - "getGovernanceStrategy()"( - overrides?: CallOverrides - ): Promise; - - getGuardian(overrides?: CallOverrides): Promise; - - "getGuardian()"(overrides?: CallOverrides): Promise; - - getProposalById( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalById(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalState( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getProposalState(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getProposalsCount(overrides?: CallOverrides): Promise; - - "getProposalsCount()"( - overrides?: CallOverrides - ): Promise; - - getVoteOnProposal( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getVoteOnProposal(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotingDelay(overrides?: CallOverrides): Promise; - - "getVotingDelay()"( - overrides?: CallOverrides - ): Promise; - - isExecutorAuthorized( - executor: string, - overrides?: CallOverrides - ): Promise; - - "isExecutorAuthorized(address)"( - executor: string, - overrides?: CallOverrides - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setGovernanceStrategy( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setGovernanceStrategy(address)"( - governanceStrategy: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setVotingDelay( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setVotingDelay(uint256)"( - votingDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVote( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVote(uint256,bool)"( - proposalId: BigNumberish, - support: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - submitVoteBySignature( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "submitVoteBySignature(uint256,bool,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: boolean, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - unauthorizeExecutors( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "unauthorizeExecutors(address[])"( - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IAccessControl.d.ts b/libs/chains/src/eth/types/IAccessControl.d.ts deleted file mode 100644 index af9ec237bdd..00000000000 --- a/libs/chains/src/eth/types/IAccessControl.d.ts +++ /dev/null @@ -1,434 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IAccessControlInterface extends ethers.utils.Interface { - functions: { - "getRoleAdmin(bytes32)": FunctionFragment; - "grantRole(bytes32,address)": FunctionFragment; - "hasRole(bytes32,address)": FunctionFragment; - "renounceRole(bytes32,address)": FunctionFragment; - "revokeRole(bytes32,address)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "getRoleAdmin", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "grantRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "hasRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "renounceRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "revokeRole", - values: [BytesLike, string] - ): string; - - decodeFunctionResult( - functionFragment: "getRoleAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceRole", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result; - - events: { - "RoleAdminChanged(bytes32,bytes32,bytes32)": EventFragment; - "RoleGranted(bytes32,address,address)": EventFragment; - "RoleRevoked(bytes32,address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "RoleAdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RoleGranted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RoleRevoked"): EventFragment; -} - -export class IAccessControl extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IAccessControlInterface; - - functions: { - getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise<[string]>; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise<[string]>; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - RoleAdminChanged( - role: BytesLike | null, - previousAdminRole: BytesLike | null, - newAdminRole: BytesLike | null - ): TypedEventFilter< - [string, string, string], - { role: string; previousAdminRole: string; newAdminRole: string } - >; - - RoleGranted( - role: BytesLike | null, - account: string | null, - sender: string | null - ): TypedEventFilter< - [string, string, string], - { role: string; account: string; sender: string } - >; - - RoleRevoked( - role: BytesLike | null, - account: string | null, - sender: string | null - ): TypedEventFilter< - [string, string, string], - { role: string; account: string; sender: string } - >; - }; - - estimateGas: { - getRoleAdmin( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - getRoleAdmin( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ICompoundTimelock.d.ts b/libs/chains/src/eth/types/ICompoundTimelock.d.ts deleted file mode 100644 index 385e11c26f8..00000000000 --- a/libs/chains/src/eth/types/ICompoundTimelock.d.ts +++ /dev/null @@ -1,756 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ICompoundTimelockInterface extends ethers.utils.Interface { - functions: { - "GRACE_PERIOD()": FunctionFragment; - "MAXIMUM_DELAY()": FunctionFragment; - "MINIMUM_DELAY()": FunctionFragment; - "acceptAdmin()": FunctionFragment; - "admin()": FunctionFragment; - "cancelTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "delay()": FunctionFragment; - "executeTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "pendingAdmin()": FunctionFragment; - "queueTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "queuedTransactions(bytes32)": FunctionFragment; - "setDelay(uint256)": FunctionFragment; - "setPendingAdmin(address)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "GRACE_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAXIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MINIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "acceptAdmin", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "cancelTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delay", values?: undefined): string; - encodeFunctionData( - functionFragment: "executeTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "pendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "queueTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queuedTransactions", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "setDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setPendingAdmin", - values: [string] - ): string; - - decodeFunctionResult( - functionFragment: "GRACE_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAXIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MINIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "cancelTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "pendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queueTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queuedTransactions", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setDelay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setPendingAdmin", - data: BytesLike - ): Result; - - events: {}; -} - -export class ICompoundTimelock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ICompoundTimelockInterface; - - functions: { - GRACE_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "delay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "pendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - setDelay( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin(overrides?: CallOverrides): Promise; - - "acceptAdmin()"(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay(arg0: BigNumberish, overrides?: CallOverrides): Promise; - - "setDelay(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setPendingAdmin(arg0: string, overrides?: CallOverrides): Promise; - - "setPendingAdmin(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - arg0: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - arg0: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ICuratedProject.d.ts b/libs/chains/src/eth/types/ICuratedProject.d.ts deleted file mode 100644 index a73b76cae27..00000000000 --- a/libs/chains/src/eth/types/ICuratedProject.d.ts +++ /dev/null @@ -1,1312 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ICuratedProjectInterface extends ethers.utils.Interface { - functions: { - "bToken()": FunctionFragment; - "back(uint256)": FunctionFragment; - "backersWithdraw()": FunctionFragment; - "beneficiaryWithdraw()": FunctionFragment; - "cToken()": FunctionFragment; - "curate(uint256)": FunctionFragment; - "curatorFee()": FunctionFragment; - "curatorsWithdraw()": FunctionFragment; - "funded()": FunctionFragment; - "initialize(tuple,tuple,tuple,uint8,address,address)": FunctionFragment; - "lockedWithdraw()": FunctionFragment; - "metaData()": FunctionFragment; - "projectData()": FunctionFragment; - "protocolData()": FunctionFragment; - "setIpfsHash(bytes32)": FunctionFragment; - "setName(bytes32)": FunctionFragment; - "setUrl(bytes32)": FunctionFragment; - "totalCuratorFunding()": FunctionFragment; - "totalFunding()": FunctionFragment; - "withdrawRemaining()": FunctionFragment; - }; - - encodeFunctionData(functionFragment: "bToken", values?: undefined): string; - encodeFunctionData(functionFragment: "back", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "backersWithdraw", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "beneficiaryWithdraw", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cToken", values?: undefined): string; - encodeFunctionData( - functionFragment: "curate", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "curatorFee", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "curatorsWithdraw", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "funded", values?: undefined): string; - encodeFunctionData( - functionFragment: "initialize", - values: [ - { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - BigNumberish, - string, - string - ] - ): string; - encodeFunctionData( - functionFragment: "lockedWithdraw", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "metaData", values?: undefined): string; - encodeFunctionData( - functionFragment: "projectData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "protocolData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setIpfsHash", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "setName", values: [BytesLike]): string; - encodeFunctionData(functionFragment: "setUrl", values: [BytesLike]): string; - encodeFunctionData( - functionFragment: "totalCuratorFunding", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "totalFunding", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "withdrawRemaining", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "bToken", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "back", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "backersWithdraw", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "beneficiaryWithdraw", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cToken", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "curate", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "curatorFee", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "curatorsWithdraw", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "funded", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "lockedWithdraw", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "metaData", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "projectData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "protocolData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setIpfsHash", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setName", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUrl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalCuratorFunding", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalFunding", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "withdrawRemaining", - data: BytesLike - ): Result; - - events: { - "Back(address,address,uint256)": EventFragment; - "Curate(address,address,uint256)": EventFragment; - "Failed()": EventFragment; - "ProjectDataChange(bytes32,bytes32,bytes32)": EventFragment; - "Succeeded(uint256,uint256)": EventFragment; - "Withdraw(address,address,uint256,bytes32)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Back"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Curate"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Failed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProjectDataChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Succeeded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment; -} - -export class ICuratedProject extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ICuratedProjectInterface; - - functions: { - bToken(overrides?: CallOverrides): Promise<[string]>; - - "bToken()"(overrides?: CallOverrides): Promise<[string]>; - - back( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - backersWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "backersWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - beneficiaryWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "beneficiaryWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cToken(overrides?: CallOverrides): Promise<[string]>; - - "cToken()"(overrides?: CallOverrides): Promise<[string]>; - - curate( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "curate(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - curatorFee(overrides?: CallOverrides): Promise<[BigNumber]>; - - "curatorFee()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - curatorsWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "curatorsWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - funded(overrides?: CallOverrides): Promise<[boolean]>; - - "funded()"(overrides?: CallOverrides): Promise<[boolean]>; - - initialize( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize((uint256,bytes32,bytes32,bytes32,address),(uint256,uint256,address,address),(uint8,address,address,address),uint8,address,address)"( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lockedWithdraw(overrides?: CallOverrides): Promise<[boolean]>; - - "lockedWithdraw()"(overrides?: CallOverrides): Promise<[boolean]>; - - metaData( - overrides?: CallOverrides - ): Promise< - [ - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - ] - >; - - "metaData()"( - overrides?: CallOverrides - ): Promise< - [ - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - ] - >; - - projectData( - overrides?: CallOverrides - ): Promise< - [ - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - ] - >; - - "projectData()"( - overrides?: CallOverrides - ): Promise< - [ - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - ] - >; - - protocolData( - overrides?: CallOverrides - ): Promise< - [ - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - ] - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [ - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - ] - >; - - setIpfsHash( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setName( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUrl( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalCuratorFunding(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalCuratorFunding()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - totalFunding(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalFunding()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - withdrawRemaining(overrides?: CallOverrides): Promise<[BigNumber]>; - - "withdrawRemaining()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - bToken(overrides?: CallOverrides): Promise; - - "bToken()"(overrides?: CallOverrides): Promise; - - back( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - backersWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "backersWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - beneficiaryWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "beneficiaryWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cToken(overrides?: CallOverrides): Promise; - - "cToken()"(overrides?: CallOverrides): Promise; - - curate( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "curate(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - curatorFee(overrides?: CallOverrides): Promise; - - "curatorFee()"(overrides?: CallOverrides): Promise; - - curatorsWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "curatorsWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - funded(overrides?: CallOverrides): Promise; - - "funded()"(overrides?: CallOverrides): Promise; - - initialize( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize((uint256,bytes32,bytes32,bytes32,address),(uint256,uint256,address,address),(uint8,address,address,address),uint8,address,address)"( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lockedWithdraw(overrides?: CallOverrides): Promise; - - "lockedWithdraw()"(overrides?: CallOverrides): Promise; - - metaData( - overrides?: CallOverrides - ): Promise< - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - >; - - "metaData()"( - overrides?: CallOverrides - ): Promise< - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - >; - - projectData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - >; - - "projectData()"( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - >; - - protocolData( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - setIpfsHash( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setName( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUrl( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalCuratorFunding(overrides?: CallOverrides): Promise; - - "totalCuratorFunding()"(overrides?: CallOverrides): Promise; - - totalFunding(overrides?: CallOverrides): Promise; - - "totalFunding()"(overrides?: CallOverrides): Promise; - - withdrawRemaining(overrides?: CallOverrides): Promise; - - "withdrawRemaining()"(overrides?: CallOverrides): Promise; - - callStatic: { - bToken(overrides?: CallOverrides): Promise; - - "bToken()"(overrides?: CallOverrides): Promise; - - back(_amount: BigNumberish, overrides?: CallOverrides): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - backersWithdraw(overrides?: CallOverrides): Promise; - - "backersWithdraw()"(overrides?: CallOverrides): Promise; - - beneficiaryWithdraw(overrides?: CallOverrides): Promise; - - "beneficiaryWithdraw()"(overrides?: CallOverrides): Promise; - - cToken(overrides?: CallOverrides): Promise; - - "cToken()"(overrides?: CallOverrides): Promise; - - curate(_amount: BigNumberish, overrides?: CallOverrides): Promise; - - "curate(uint256)"( - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - curatorFee(overrides?: CallOverrides): Promise; - - "curatorFee()"(overrides?: CallOverrides): Promise; - - curatorsWithdraw(overrides?: CallOverrides): Promise; - - "curatorsWithdraw()"(overrides?: CallOverrides): Promise; - - funded(overrides?: CallOverrides): Promise; - - "funded()"(overrides?: CallOverrides): Promise; - - initialize( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: CallOverrides - ): Promise; - - "initialize((uint256,bytes32,bytes32,bytes32,address),(uint256,uint256,address,address),(uint8,address,address,address),uint8,address,address)"( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: CallOverrides - ): Promise; - - lockedWithdraw(overrides?: CallOverrides): Promise; - - "lockedWithdraw()"(overrides?: CallOverrides): Promise; - - metaData( - overrides?: CallOverrides - ): Promise< - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - >; - - "metaData()"( - overrides?: CallOverrides - ): Promise< - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - >; - - projectData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - >; - - "projectData()"( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - >; - - protocolData( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - setIpfsHash(_ipfsHash: BytesLike, overrides?: CallOverrides): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - setName(_name: BytesLike, overrides?: CallOverrides): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: CallOverrides - ): Promise; - - setUrl(_url: BytesLike, overrides?: CallOverrides): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: CallOverrides - ): Promise; - - totalCuratorFunding(overrides?: CallOverrides): Promise; - - "totalCuratorFunding()"(overrides?: CallOverrides): Promise; - - totalFunding(overrides?: CallOverrides): Promise; - - "totalFunding()"(overrides?: CallOverrides): Promise; - - withdrawRemaining(overrides?: CallOverrides): Promise; - - "withdrawRemaining()"(overrides?: CallOverrides): Promise; - }; - - filters: { - Back( - sender: string | null, - token: string | null, - amount: null - ): TypedEventFilter< - [string, string, BigNumber], - { sender: string; token: string; amount: BigNumber } - >; - - Curate( - sender: string | null, - token: string | null, - amount: null - ): TypedEventFilter< - [string, string, BigNumber], - { sender: string; token: string; amount: BigNumber } - >; - - Failed(): TypedEventFilter<[], {}>; - - ProjectDataChange( - name: null, - oldData: null, - newData: null - ): TypedEventFilter< - [string, string, string], - { name: string; oldData: string; newData: string } - >; - - Succeeded( - timestamp: null, - amount: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { timestamp: BigNumber; amount: BigNumber } - >; - - Withdraw( - sender: string | null, - token: string | null, - amount: null, - withdrawalType: null - ): TypedEventFilter< - [string, string, BigNumber, string], - { - sender: string; - token: string; - amount: BigNumber; - withdrawalType: string; - } - >; - }; - - estimateGas: { - bToken(overrides?: CallOverrides): Promise; - - "bToken()"(overrides?: CallOverrides): Promise; - - back( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - backersWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "backersWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - beneficiaryWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "beneficiaryWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cToken(overrides?: CallOverrides): Promise; - - "cToken()"(overrides?: CallOverrides): Promise; - - curate( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "curate(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - curatorFee(overrides?: CallOverrides): Promise; - - "curatorFee()"(overrides?: CallOverrides): Promise; - - curatorsWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "curatorsWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - funded(overrides?: CallOverrides): Promise; - - "funded()"(overrides?: CallOverrides): Promise; - - initialize( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize((uint256,bytes32,bytes32,bytes32,address),(uint256,uint256,address,address),(uint8,address,address,address),uint8,address,address)"( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lockedWithdraw(overrides?: CallOverrides): Promise; - - "lockedWithdraw()"(overrides?: CallOverrides): Promise; - - metaData(overrides?: CallOverrides): Promise; - - "metaData()"(overrides?: CallOverrides): Promise; - - projectData(overrides?: CallOverrides): Promise; - - "projectData()"(overrides?: CallOverrides): Promise; - - protocolData(overrides?: CallOverrides): Promise; - - "protocolData()"(overrides?: CallOverrides): Promise; - - setIpfsHash( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setName( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUrl( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalCuratorFunding(overrides?: CallOverrides): Promise; - - "totalCuratorFunding()"(overrides?: CallOverrides): Promise; - - totalFunding(overrides?: CallOverrides): Promise; - - "totalFunding()"(overrides?: CallOverrides): Promise; - - withdrawRemaining(overrides?: CallOverrides): Promise; - - "withdrawRemaining()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - bToken(overrides?: CallOverrides): Promise; - - "bToken()"(overrides?: CallOverrides): Promise; - - back( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - backersWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "backersWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - beneficiaryWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "beneficiaryWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cToken(overrides?: CallOverrides): Promise; - - "cToken()"(overrides?: CallOverrides): Promise; - - curate( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "curate(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - curatorFee(overrides?: CallOverrides): Promise; - - "curatorFee()"(overrides?: CallOverrides): Promise; - - curatorsWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "curatorsWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - funded(overrides?: CallOverrides): Promise; - - "funded()"(overrides?: CallOverrides): Promise; - - initialize( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize((uint256,bytes32,bytes32,bytes32,address),(uint256,uint256,address,address),(uint8,address,address,address),uint8,address,address)"( - _metaData: { - id: BigNumberish; - name: BytesLike; - ipfsHash: BytesLike; - url: BytesLike; - creator: string; - }, - _projectData: { - threshold: BigNumberish; - deadline: BigNumberish; - beneficiary: string; - acceptedToken: string; - }, - _protocolData: { - fee: BigNumberish; - feeTo: string; - admin: string; - pauseGuardian: string; - }, - _curatorFee: BigNumberish, - _bToken: string, - _cToken: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - lockedWithdraw(overrides?: CallOverrides): Promise; - - "lockedWithdraw()"( - overrides?: CallOverrides - ): Promise; - - metaData(overrides?: CallOverrides): Promise; - - "metaData()"(overrides?: CallOverrides): Promise; - - projectData(overrides?: CallOverrides): Promise; - - "projectData()"(overrides?: CallOverrides): Promise; - - protocolData(overrides?: CallOverrides): Promise; - - "protocolData()"(overrides?: CallOverrides): Promise; - - setIpfsHash( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setName( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUrl( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalCuratorFunding( - overrides?: CallOverrides - ): Promise; - - "totalCuratorFunding()"( - overrides?: CallOverrides - ): Promise; - - totalFunding(overrides?: CallOverrides): Promise; - - "totalFunding()"(overrides?: CallOverrides): Promise; - - withdrawRemaining(overrides?: CallOverrides): Promise; - - "withdrawRemaining()"( - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ICuratedProjectFactory.d.ts b/libs/chains/src/eth/types/ICuratedProjectFactory.d.ts deleted file mode 100644 index fa151e60d16..00000000000 --- a/libs/chains/src/eth/types/ICuratedProjectFactory.d.ts +++ /dev/null @@ -1,960 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ICuratedProjectFactoryInterface extends ethers.utils.Interface { - functions: { - "addAcceptedTokens(address[])": FunctionFragment; - "createProject(bytes32,bytes32,bytes32,address,address,uint256,uint256,uint8)": FunctionFragment; - "isAcceptedToken(address)": FunctionFragment; - "numProjects()": FunctionFragment; - "owner()": FunctionFragment; - "projectImp()": FunctionFragment; - "projects(uint32)": FunctionFragment; - "protocolData()": FunctionFragment; - "setAdmin(address)": FunctionFragment; - "setCmnProjTokenImpl(address)": FunctionFragment; - "setFeeTo(address)": FunctionFragment; - "setPauseGuardian(address)": FunctionFragment; - "setProjectImpl(address)": FunctionFragment; - "setProtocolFee(uint8)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "addAcceptedTokens", - values: [string[]] - ): string; - encodeFunctionData( - functionFragment: "createProject", - values: [ - BytesLike, - BytesLike, - BytesLike, - string, - string, - BigNumberish, - BigNumberish, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "isAcceptedToken", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "numProjects", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "projectImp", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "projects", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "protocolData", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "setAdmin", values: [string]): string; - encodeFunctionData( - functionFragment: "setCmnProjTokenImpl", - values: [string] - ): string; - encodeFunctionData(functionFragment: "setFeeTo", values: [string]): string; - encodeFunctionData( - functionFragment: "setPauseGuardian", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setProjectImpl", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setProtocolFee", - values: [BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "addAcceptedTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "createProject", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isAcceptedToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "numProjects", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "projectImp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "projects", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "protocolData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setAdmin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setCmnProjTokenImpl", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setFeeTo", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setPauseGuardian", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setProjectImpl", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setProtocolFee", - data: BytesLike - ): Result; - - events: { - "ActionPaused(string,bool)": EventFragment; - "NewAdmin(address,address)": EventFragment; - "NewPauseGuardian(address,address)": EventFragment; - "ProjectCreated(uint256,address)": EventFragment; - "ProjectImplChange(address,address)": EventFragment; - "ProtocolFeeChange(uint8,uint8)": EventFragment; - "ProtocolFeeToChange(address,address)": EventFragment; - "ProtocolTokenImplChange(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ActionPaused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPauseGuardian"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProjectCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProjectImplChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProtocolFeeChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProtocolFeeToChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProtocolTokenImplChange"): EventFragment; -} - -export class ICuratedProjectFactory extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ICuratedProjectFactoryInterface; - - functions: { - addAcceptedTokens( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - createProject( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "createProject(bytes32,bytes32,bytes32,address,address,uint256,uint256,uint8)"( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isAcceptedToken( - token: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - numProjects(overrides?: CallOverrides): Promise<[number]>; - - "numProjects()"(overrides?: CallOverrides): Promise<[number]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - "owner()"(overrides?: CallOverrides): Promise<[string]>; - - projectImp(overrides?: CallOverrides): Promise<[string]>; - - "projectImp()"(overrides?: CallOverrides): Promise<[string]>; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - protocolData( - overrides?: CallOverrides - ): Promise< - [ - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - ] - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [ - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - ] - >; - - setAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCmnProjTokenImpl( - _cmnProjTokenImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setCmnProjTokenImpl(address)"( - _cmnProjTokenImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFeeTo( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addAcceptedTokens( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - createProject( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "createProject(bytes32,bytes32,bytes32,address,address,uint256,uint256,uint8)"( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isAcceptedToken(token: string, overrides?: CallOverrides): Promise; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise; - - numProjects(overrides?: CallOverrides): Promise; - - "numProjects()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - projectImp(overrides?: CallOverrides): Promise; - - "projectImp()"(overrides?: CallOverrides): Promise; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - protocolData( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - setAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCmnProjTokenImpl( - _cmnProjTokenImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setCmnProjTokenImpl(address)"( - _cmnProjTokenImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFeeTo( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addAcceptedTokens( - _tokens: string[], - overrides?: CallOverrides - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: CallOverrides - ): Promise; - - createProject( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "createProject(bytes32,bytes32,bytes32,address,address,uint256,uint256,uint8)"( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isAcceptedToken(token: string, overrides?: CallOverrides): Promise; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise; - - numProjects(overrides?: CallOverrides): Promise; - - "numProjects()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - projectImp(overrides?: CallOverrides): Promise; - - "projectImp()"(overrides?: CallOverrides): Promise; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - protocolData( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - setAdmin(newAdmin: string, overrides?: CallOverrides): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: CallOverrides - ): Promise; - - setCmnProjTokenImpl( - _cmnProjTokenImpl: string, - overrides?: CallOverrides - ): Promise; - - "setCmnProjTokenImpl(address)"( - _cmnProjTokenImpl: string, - overrides?: CallOverrides - ): Promise; - - setFeeTo(_feeTo: string, overrides?: CallOverrides): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: CallOverrides - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: CallOverrides - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: CallOverrides - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: CallOverrides - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: CallOverrides - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - ActionPaused( - action: null, - pauseState: null - ): TypedEventFilter< - [string, boolean], - { action: string; pauseState: boolean } - >; - - NewAdmin( - oldAdmin: null, - newAdmin: null - ): TypedEventFilter< - [string, string], - { oldAdmin: string; newAdmin: string } - >; - - NewPauseGuardian( - oldPauseGuardian: null, - newPauseGuardian: null - ): TypedEventFilter< - [string, string], - { oldPauseGuardian: string; newPauseGuardian: string } - >; - - ProjectCreated( - projectIndex: null, - projectAddress: null - ): TypedEventFilter< - [BigNumber, string], - { projectIndex: BigNumber; projectAddress: string } - >; - - ProjectImplChange( - oldAddr: null, - newAddr: null - ): TypedEventFilter<[string, string], { oldAddr: string; newAddr: string }>; - - ProtocolFeeChange( - oldFee: null, - newFee: null - ): TypedEventFilter<[number, number], { oldFee: number; newFee: number }>; - - ProtocolFeeToChange( - oldAddr: null, - newAddr: null - ): TypedEventFilter<[string, string], { oldAddr: string; newAddr: string }>; - - ProtocolTokenImplChange( - oldAddr: null, - newAddr: null - ): TypedEventFilter<[string, string], { oldAddr: string; newAddr: string }>; - }; - - estimateGas: { - addAcceptedTokens( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - createProject( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "createProject(bytes32,bytes32,bytes32,address,address,uint256,uint256,uint8)"( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isAcceptedToken( - token: string, - overrides?: CallOverrides - ): Promise; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise; - - numProjects(overrides?: CallOverrides): Promise; - - "numProjects()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - projectImp(overrides?: CallOverrides): Promise; - - "projectImp()"(overrides?: CallOverrides): Promise; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - protocolData(overrides?: CallOverrides): Promise; - - "protocolData()"(overrides?: CallOverrides): Promise; - - setAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCmnProjTokenImpl( - _cmnProjTokenImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setCmnProjTokenImpl(address)"( - _cmnProjTokenImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFeeTo( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addAcceptedTokens( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - createProject( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "createProject(bytes32,bytes32,bytes32,address,address,uint256,uint256,uint8)"( - _name: BytesLike, - _ipfsHash: BytesLike, - _url: BytesLike, - _beneficiary: string, - _acceptedToken: string, - _threshold: BigNumberish, - _deadline: BigNumberish, - _curatorFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isAcceptedToken( - token: string, - overrides?: CallOverrides - ): Promise; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise; - - numProjects(overrides?: CallOverrides): Promise; - - "numProjects()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - projectImp(overrides?: CallOverrides): Promise; - - "projectImp()"(overrides?: CallOverrides): Promise; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - protocolData(overrides?: CallOverrides): Promise; - - "protocolData()"(overrides?: CallOverrides): Promise; - - setAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setCmnProjTokenImpl( - _cmnProjTokenImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setCmnProjTokenImpl(address)"( - _cmnProjTokenImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFeeTo( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC1155.d.ts b/libs/chains/src/eth/types/IERC1155.d.ts deleted file mode 100644 index d2566b2397c..00000000000 --- a/libs/chains/src/eth/types/IERC1155.d.ts +++ /dev/null @@ -1,671 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { - ethers, - EventFilter, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - Contract, - ContractTransaction, - Overrides, - CallOverrides, -} from "ethers"; -import { BytesLike } from "@ethersproject/bytes"; -import { Listener, Provider } from "@ethersproject/providers"; -import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC1155Interface extends ethers.utils.Interface { - functions: { - "balanceOf(address,uint256)": FunctionFragment; - "balanceOfBatch(address[],uint256[])": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; - "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "balanceOf", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balanceOfBatch", - values: [string[], BigNumberish[]] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "safeBatchTransferFrom", - values: [string, string, BigNumberish[], BigNumberish[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom", - values: [string, string, BigNumberish, BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balanceOfBatch", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeBatchTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - - events: { - "ApprovalForAll(address,address,bool)": EventFragment; - "TransferBatch(address,address,address,uint256[],uint256[])": EventFragment; - "TransferSingle(address,address,address,uint256,uint256)": EventFragment; - "URI(string,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferBatch"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferSingle"): EventFragment; - getEvent(nameOrSignatureOrTopic: "URI"): EventFragment; -} - -export class IERC1155 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC1155Interface; - - functions: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - ApprovalForAll( - account: string | null, - operator: string | null, - approved: null - ): TypedEventFilter< - [string, string, boolean], - { account: string; operator: string; approved: boolean } - >; - - TransferBatch( - operator: string | null, - from: string | null, - to: string | null, - ids: null, - values: null - ): TypedEventFilter< - [string, string, string, BigNumber[], BigNumber[]], - { - operator: string; - from: string; - to: string; - ids: BigNumber[]; - values: BigNumber[]; - } - >; - - TransferSingle( - operator: string | null, - from: string | null, - to: string | null, - id: null, - value: null - ): TypedEventFilter< - [string, string, string, BigNumber, BigNumber], - { - operator: string; - from: string; - to: string; - id: BigNumber; - value: BigNumber; - } - >; - - URI( - value: null, - id: BigNumberish | null - ): TypedEventFilter<[string, BigNumber], { value: string; id: BigNumber }>; - }; - - estimateGas: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC1155MetadataURI.d.ts b/libs/chains/src/eth/types/IERC1155MetadataURI.d.ts deleted file mode 100644 index b60b0c7ff36..00000000000 --- a/libs/chains/src/eth/types/IERC1155MetadataURI.d.ts +++ /dev/null @@ -1,709 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { - ethers, - EventFilter, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - Contract, - ContractTransaction, - Overrides, - CallOverrides, -} from "ethers"; -import { BytesLike } from "@ethersproject/bytes"; -import { Listener, Provider } from "@ethersproject/providers"; -import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC1155MetadataURIInterface extends ethers.utils.Interface { - functions: { - "balanceOf(address,uint256)": FunctionFragment; - "balanceOfBatch(address[],uint256[])": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; - "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "uri(uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "balanceOf", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "balanceOfBatch", - values: [string[], BigNumberish[]] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "safeBatchTransferFrom", - values: [string, string, BigNumberish[], BigNumberish[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom", - values: [string, string, BigNumberish, BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "uri", values: [BigNumberish]): string; - - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "balanceOfBatch", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeBatchTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "uri", data: BytesLike): Result; - - events: { - "ApprovalForAll(address,address,bool)": EventFragment; - "TransferBatch(address,address,address,uint256[],uint256[])": EventFragment; - "TransferSingle(address,address,address,uint256,uint256)": EventFragment; - "URI(string,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferBatch"): EventFragment; - getEvent(nameOrSignatureOrTopic: "TransferSingle"): EventFragment; - getEvent(nameOrSignatureOrTopic: "URI"): EventFragment; -} - -export class IERC1155MetadataURI extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC1155MetadataURIInterface; - - functions: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise<[BigNumber[]]>; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - uri(id: BigNumberish, overrides?: CallOverrides): Promise<[string]>; - - "uri(uint256)"( - id: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - }; - - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri(id: BigNumberish, overrides?: CallOverrides): Promise; - - "uri(uint256)"(id: BigNumberish, overrides?: CallOverrides): Promise; - - callStatic: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri(id: BigNumberish, overrides?: CallOverrides): Promise; - - "uri(uint256)"( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - ApprovalForAll( - account: string | null, - operator: string | null, - approved: null - ): TypedEventFilter< - [string, string, boolean], - { account: string; operator: string; approved: boolean } - >; - - TransferBatch( - operator: string | null, - from: string | null, - to: string | null, - ids: null, - values: null - ): TypedEventFilter< - [string, string, string, BigNumber[], BigNumber[]], - { - operator: string; - from: string; - to: string; - ids: BigNumber[]; - values: BigNumber[]; - } - >; - - TransferSingle( - operator: string | null, - from: string | null, - to: string | null, - id: null, - value: null - ): TypedEventFilter< - [string, string, string, BigNumber, BigNumber], - { - operator: string; - from: string; - to: string; - id: BigNumber; - value: BigNumber; - } - >; - - URI( - value: null, - id: BigNumberish | null - ): TypedEventFilter<[string, BigNumber], { value: string; id: BigNumber }>; - }; - - estimateGas: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri(id: BigNumberish, overrides?: CallOverrides): Promise; - - "uri(uint256)"( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - balanceOf( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address,uint256)"( - account: string, - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOfBatch( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - "balanceOfBatch(address[],uint256[])"( - accounts: string[], - ids: BigNumberish[], - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - account: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - safeBatchTransferFrom( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)"( - from: string, - to: string, - ids: BigNumberish[], - amounts: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - safeTransferFrom( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,uint256,bytes)"( - from: string, - to: string, - id: BigNumberish, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - uri( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "uri(uint256)"( - id: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC1155Receiver.d.ts b/libs/chains/src/eth/types/IERC1155Receiver.d.ts deleted file mode 100644 index e83cd0f2bcf..00000000000 --- a/libs/chains/src/eth/types/IERC1155Receiver.d.ts +++ /dev/null @@ -1,340 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { - ethers, - EventFilter, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - Contract, - ContractTransaction, - Overrides, - CallOverrides, -} from "ethers"; -import { BytesLike } from "@ethersproject/bytes"; -import { Listener, Provider } from "@ethersproject/providers"; -import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC1155ReceiverInterface extends ethers.utils.Interface { - functions: { - "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": FunctionFragment; - "onERC1155Received(address,address,uint256,uint256,bytes)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "onERC1155BatchReceived", - values: [string, string, BigNumberish[], BigNumberish[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "onERC1155Received", - values: [string, string, BigNumberish, BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "onERC1155BatchReceived", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "onERC1155Received", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - - events: {}; -} - -export class IERC1155Receiver extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC1155ReceiverInterface; - - functions: { - onERC1155BatchReceived( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - onERC1155Received( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC1155Received(address,address,uint256,uint256,bytes)"( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - onERC1155BatchReceived( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - onERC1155Received( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC1155Received(address,address,uint256,uint256,bytes)"( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - onERC1155BatchReceived( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - onERC1155Received( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "onERC1155Received(address,address,uint256,uint256,bytes)"( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - onERC1155BatchReceived( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - onERC1155Received( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC1155Received(address,address,uint256,uint256,bytes)"( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - onERC1155BatchReceived( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"( - operator: string, - from: string, - ids: BigNumberish[], - values: BigNumberish[], - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - onERC1155Received( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC1155Received(address,address,uint256,uint256,bytes)"( - operator: string, - from: string, - id: BigNumberish, - value: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC165.d.ts b/libs/chains/src/eth/types/IERC165.d.ts deleted file mode 100644 index 2e8db27624c..00000000000 --- a/libs/chains/src/eth/types/IERC165.d.ts +++ /dev/null @@ -1,139 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC165Interface extends ethers.utils.Interface { - functions: { - "supportsInterface(bytes4)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - - events: {}; -} - -export class IERC165 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC165Interface; - - functions: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC1820Registry.d.ts b/libs/chains/src/eth/types/IERC1820Registry.d.ts deleted file mode 100644 index e0ca0ef36fc..00000000000 --- a/libs/chains/src/eth/types/IERC1820Registry.d.ts +++ /dev/null @@ -1,626 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC1820RegistryInterface extends ethers.utils.Interface { - functions: { - "getInterfaceImplementer(address,bytes32)": FunctionFragment; - "getManager(address)": FunctionFragment; - "implementsERC165Interface(address,bytes4)": FunctionFragment; - "implementsERC165InterfaceNoCache(address,bytes4)": FunctionFragment; - "interfaceHash(string)": FunctionFragment; - "setInterfaceImplementer(address,bytes32,address)": FunctionFragment; - "setManager(address,address)": FunctionFragment; - "updateERC165Cache(address,bytes4)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "getInterfaceImplementer", - values: [string, BytesLike] - ): string; - encodeFunctionData(functionFragment: "getManager", values: [string]): string; - encodeFunctionData( - functionFragment: "implementsERC165Interface", - values: [string, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "implementsERC165InterfaceNoCache", - values: [string, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "interfaceHash", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setInterfaceImplementer", - values: [string, BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "setManager", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "updateERC165Cache", - values: [string, BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "getInterfaceImplementer", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getManager", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "implementsERC165Interface", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "implementsERC165InterfaceNoCache", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "interfaceHash", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setInterfaceImplementer", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setManager", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "updateERC165Cache", - data: BytesLike - ): Result; - - events: { - "InterfaceImplementerSet(address,bytes32,address)": EventFragment; - "ManagerChanged(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "InterfaceImplementerSet"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ManagerChanged"): EventFragment; -} - -export class IERC1820Registry extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC1820RegistryInterface; - - functions: { - getInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise<[string]>; - - "getInterfaceImplementer(address,bytes32)"( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise<[string]>; - - getManager(account: string, overrides?: CallOverrides): Promise<[string]>; - - "getManager(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[string]>; - - implementsERC165Interface( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "implementsERC165Interface(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - implementsERC165InterfaceNoCache( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "implementsERC165InterfaceNoCache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - interfaceHash( - interfaceName: string, - overrides?: CallOverrides - ): Promise<[string]>; - - "interfaceHash(string)"( - interfaceName: string, - overrides?: CallOverrides - ): Promise<[string]>; - - setInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setInterfaceImplementer(address,bytes32,address)"( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setManager( - account: string, - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setManager(address,address)"( - account: string, - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateERC165Cache( - account: string, - interfaceId: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateERC165Cache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - getInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getInterfaceImplementer(address,bytes32)"( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getManager(account: string, overrides?: CallOverrides): Promise; - - "getManager(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - implementsERC165Interface( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "implementsERC165Interface(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - implementsERC165InterfaceNoCache( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "implementsERC165InterfaceNoCache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - interfaceHash( - interfaceName: string, - overrides?: CallOverrides - ): Promise; - - "interfaceHash(string)"( - interfaceName: string, - overrides?: CallOverrides - ): Promise; - - setInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setInterfaceImplementer(address,bytes32,address)"( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setManager( - account: string, - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setManager(address,address)"( - account: string, - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateERC165Cache( - account: string, - interfaceId: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateERC165Cache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - getInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getInterfaceImplementer(address,bytes32)"( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getManager(account: string, overrides?: CallOverrides): Promise; - - "getManager(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - implementsERC165Interface( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "implementsERC165Interface(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - implementsERC165InterfaceNoCache( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "implementsERC165InterfaceNoCache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - interfaceHash( - interfaceName: string, - overrides?: CallOverrides - ): Promise; - - "interfaceHash(string)"( - interfaceName: string, - overrides?: CallOverrides - ): Promise; - - setInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: CallOverrides - ): Promise; - - "setInterfaceImplementer(address,bytes32,address)"( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: CallOverrides - ): Promise; - - setManager( - account: string, - newManager: string, - overrides?: CallOverrides - ): Promise; - - "setManager(address,address)"( - account: string, - newManager: string, - overrides?: CallOverrides - ): Promise; - - updateERC165Cache( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "updateERC165Cache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - InterfaceImplementerSet( - account: string | null, - interfaceHash: BytesLike | null, - implementer: string | null - ): TypedEventFilter< - [string, string, string], - { account: string; interfaceHash: string; implementer: string } - >; - - ManagerChanged( - account: string | null, - newManager: string | null - ): TypedEventFilter< - [string, string], - { account: string; newManager: string } - >; - }; - - estimateGas: { - getInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getInterfaceImplementer(address,bytes32)"( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getManager(account: string, overrides?: CallOverrides): Promise; - - "getManager(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - implementsERC165Interface( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "implementsERC165Interface(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - implementsERC165InterfaceNoCache( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "implementsERC165InterfaceNoCache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - interfaceHash( - interfaceName: string, - overrides?: CallOverrides - ): Promise; - - "interfaceHash(string)"( - interfaceName: string, - overrides?: CallOverrides - ): Promise; - - setInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setInterfaceImplementer(address,bytes32,address)"( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setManager( - account: string, - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setManager(address,address)"( - account: string, - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateERC165Cache( - account: string, - interfaceId: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateERC165Cache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - getInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getInterfaceImplementer(address,bytes32)"( - account: string, - interfaceHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getManager( - account: string, - overrides?: CallOverrides - ): Promise; - - "getManager(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - implementsERC165Interface( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "implementsERC165Interface(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - implementsERC165InterfaceNoCache( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "implementsERC165InterfaceNoCache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - interfaceHash( - interfaceName: string, - overrides?: CallOverrides - ): Promise; - - "interfaceHash(string)"( - interfaceName: string, - overrides?: CallOverrides - ): Promise; - - setInterfaceImplementer( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setInterfaceImplementer(address,bytes32,address)"( - account: string, - interfaceHash: BytesLike, - implementer: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setManager( - account: string, - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setManager(address,address)"( - account: string, - newManager: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - updateERC165Cache( - account: string, - interfaceId: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateERC165Cache(address,bytes4)"( - account: string, - interfaceId: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC20.d.ts b/libs/chains/src/eth/types/IERC20.d.ts deleted file mode 100644 index b4a77f00962..00000000000 --- a/libs/chains/src/eth/types/IERC20.d.ts +++ /dev/null @@ -1,454 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC20Interface extends ethers.utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class IERC20 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC20Interface; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(who: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - who: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(who: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - who: string, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(who: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - who: string, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(who: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - who: string, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - who: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - who: string, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC20Metadata.d.ts b/libs/chains/src/eth/types/IERC20Metadata.d.ts deleted file mode 100644 index b9c0f50d8bd..00000000000 --- a/libs/chains/src/eth/types/IERC20Metadata.d.ts +++ /dev/null @@ -1,523 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC20MetadataInterface extends ethers.utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decimals()": FunctionFragment; - "name()": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class IERC20Metadata extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC20MetadataInterface; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - sender: string, - recipient: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC20Permit.d.ts b/libs/chains/src/eth/types/IERC20Permit.d.ts deleted file mode 100644 index 4bdf931656e..00000000000 --- a/libs/chains/src/eth/types/IERC20Permit.d.ts +++ /dev/null @@ -1,279 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC20PermitInterface extends ethers.utils.Interface { - functions: { - "DOMAIN_SEPARATOR()": FunctionFragment; - "nonces(address)": FunctionFragment; - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DOMAIN_SEPARATOR", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "permit", - values: [ - string, - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike - ] - ): string; - - decodeFunctionResult( - functionFragment: "DOMAIN_SEPARATOR", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; - - events: {}; -} - -export class IERC20Permit extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC20PermitInterface; - - functions: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise<[string]>; - - nonces(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"(overrides?: CallOverrides): Promise; - - nonces(owner: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; - - "DOMAIN_SEPARATOR()"( - overrides?: CallOverrides - ): Promise; - - nonces( - owner: string, - overrides?: CallOverrides - ): Promise; - - "nonces(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - permit( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"( - owner: string, - spender: string, - value: BigNumberish, - deadline: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC721.d.ts b/libs/chains/src/eth/types/IERC721.d.ts deleted file mode 100644 index 5c8a1d4ef79..00000000000 --- a/libs/chains/src/eth/types/IERC721.d.ts +++ /dev/null @@ -1,697 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC721Interface extends ethers.utils.Interface { - functions: { - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "getApproved(uint256)": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "ownerOf(uint256)": FunctionFragment; - "safeTransferFrom(address,address,uint256)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "getApproved", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "ownerOf", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getApproved", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "ApprovalForAll(address,address,bool)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class IERC721 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC721Interface; - - functions: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { balance: BigNumber }>; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { balance: BigNumber }>; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string] & { operator: string }>; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string] & { operator: string }>; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string] & { owner: string }>; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string] & { owner: string }>; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: CallOverrides - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - approved: string | null, - tokenId: BigNumberish | null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; approved: string; tokenId: BigNumber } - >; - - ApprovalForAll( - owner: string | null, - operator: string | null, - approved: null - ): TypedEventFilter< - [string, string, boolean], - { owner: string; operator: string; approved: boolean } - >; - - Transfer( - from: string | null, - to: string | null, - tokenId: BigNumberish | null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; tokenId: BigNumber } - >; - }; - - estimateGas: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC721Metadata.d.ts b/libs/chains/src/eth/types/IERC721Metadata.d.ts deleted file mode 100644 index 06b8a4b0bd6..00000000000 --- a/libs/chains/src/eth/types/IERC721Metadata.d.ts +++ /dev/null @@ -1,793 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC721MetadataInterface extends ethers.utils.Interface { - functions: { - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "getApproved(uint256)": FunctionFragment; - "isApprovedForAll(address,address)": FunctionFragment; - "name()": FunctionFragment; - "ownerOf(uint256)": FunctionFragment; - "safeTransferFrom(address,address,uint256)": FunctionFragment; - "setApprovalForAll(address,bool)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "symbol()": FunctionFragment; - "tokenURI(uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "getApproved", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isApprovedForAll", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "ownerOf", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "safeTransferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setApprovalForAll", - values: [string, boolean] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "tokenURI", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getApproved", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isApprovedForAll", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "safeTransferFrom", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setApprovalForAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "tokenURI", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "ApprovalForAll(address,address,bool)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class IERC721Metadata extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC721MetadataInterface; - - functions: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { balance: BigNumber }>; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber] & { balance: BigNumber }>; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string] & { operator: string }>; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string] & { operator: string }>; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string] & { owner: string }>; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string] & { owner: string }>; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - tokenURI(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: CallOverrides - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - tokenURI(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - approved: string | null, - tokenId: BigNumberish | null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; approved: string; tokenId: BigNumber } - >; - - ApprovalForAll( - owner: string | null, - operator: string | null, - approved: null - ): TypedEventFilter< - [string, string, boolean], - { owner: string; operator: string; approved: boolean } - >; - - Transfer( - from: string | null, - to: string | null, - tokenId: BigNumberish | null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; tokenId: BigNumber } - >; - }; - - estimateGas: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - approve( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - getApproved( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getApproved(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isApprovedForAll( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - "isApprovedForAll(address,address)"( - owner: string, - operator: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - ownerOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "ownerOf(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "safeTransferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "safeTransferFrom(address,address,uint256,bytes)"( - from: string, - to: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setApprovalForAll( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setApprovalForAll(address,bool)"( - operator: string, - _approved: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - tokenURI( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "tokenURI(uint256)"( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - tokenId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC721Receiver.d.ts b/libs/chains/src/eth/types/IERC721Receiver.d.ts deleted file mode 100644 index 3b8defd4ea1..00000000000 --- a/libs/chains/src/eth/types/IERC721Receiver.d.ts +++ /dev/null @@ -1,172 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC721ReceiverInterface extends ethers.utils.Interface { - functions: { - "onERC721Received(address,address,uint256,bytes)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "onERC721Received", - values: [string, string, BigNumberish, BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "onERC721Received", - data: BytesLike - ): Result; - - events: {}; -} - -export class IERC721Receiver extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC721ReceiverInterface; - - functions: { - onERC721Received( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC721Received(address,address,uint256,bytes)"( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - onERC721Received( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC721Received(address,address,uint256,bytes)"( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - onERC721Received( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "onERC721Received(address,address,uint256,bytes)"( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - onERC721Received( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC721Received(address,address,uint256,bytes)"( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - onERC721Received( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onERC721Received(address,address,uint256,bytes)"( - operator: string, - from: string, - tokenId: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC777.d.ts b/libs/chains/src/eth/types/IERC777.d.ts deleted file mode 100644 index 4d24190e6a8..00000000000 --- a/libs/chains/src/eth/types/IERC777.d.ts +++ /dev/null @@ -1,854 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC777Interface extends ethers.utils.Interface { - functions: { - "authorizeOperator(address)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "burn(uint256,bytes)": FunctionFragment; - "defaultOperators()": FunctionFragment; - "granularity()": FunctionFragment; - "isOperatorFor(address,address)": FunctionFragment; - "name()": FunctionFragment; - "operatorBurn(address,uint256,bytes,bytes)": FunctionFragment; - "operatorSend(address,address,uint256,bytes,bytes)": FunctionFragment; - "revokeOperator(address)": FunctionFragment; - "send(address,uint256,bytes)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "authorizeOperator", - values: [string] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "burn", - values: [BigNumberish, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "defaultOperators", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "granularity", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "isOperatorFor", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "operatorBurn", - values: [string, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "operatorSend", - values: [string, string, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "revokeOperator", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "send", - values: [string, BigNumberish, BytesLike] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "authorizeOperator", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "defaultOperators", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "granularity", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isOperatorFor", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "operatorBurn", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "operatorSend", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "revokeOperator", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "send", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - - events: { - "AuthorizedOperator(address,address)": EventFragment; - "Burned(address,address,uint256,bytes,bytes)": EventFragment; - "Minted(address,address,uint256,bytes,bytes)": EventFragment; - "RevokedOperator(address,address)": EventFragment; - "Sent(address,address,address,uint256,bytes,bytes)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AuthorizedOperator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Burned"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Minted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RevokedOperator"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Sent"): EventFragment; -} - -export class IERC777 extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC777Interface; - - functions: { - authorizeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - defaultOperators(overrides?: CallOverrides): Promise<[string[]]>; - - "defaultOperators()"(overrides?: CallOverrides): Promise<[string[]]>; - - granularity(overrides?: CallOverrides): Promise<[BigNumber]>; - - "granularity()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - authorizeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - defaultOperators(overrides?: CallOverrides): Promise; - - "defaultOperators()"(overrides?: CallOverrides): Promise; - - granularity(overrides?: CallOverrides): Promise; - - "granularity()"(overrides?: CallOverrides): Promise; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - callStatic: { - authorizeOperator( - operator: string, - overrides?: CallOverrides - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - defaultOperators(overrides?: CallOverrides): Promise; - - "defaultOperators()"(overrides?: CallOverrides): Promise; - - granularity(overrides?: CallOverrides): Promise; - - "granularity()"(overrides?: CallOverrides): Promise; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - revokeOperator(operator: string, overrides?: CallOverrides): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: CallOverrides - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - }; - - filters: { - AuthorizedOperator( - operator: string | null, - tokenHolder: string | null - ): TypedEventFilter< - [string, string], - { operator: string; tokenHolder: string } - >; - - Burned( - operator: string | null, - from: string | null, - amount: null, - data: null, - operatorData: null - ): TypedEventFilter< - [string, string, BigNumber, string, string], - { - operator: string; - from: string; - amount: BigNumber; - data: string; - operatorData: string; - } - >; - - Minted( - operator: string | null, - to: string | null, - amount: null, - data: null, - operatorData: null - ): TypedEventFilter< - [string, string, BigNumber, string, string], - { - operator: string; - to: string; - amount: BigNumber; - data: string; - operatorData: string; - } - >; - - RevokedOperator( - operator: string | null, - tokenHolder: string | null - ): TypedEventFilter< - [string, string], - { operator: string; tokenHolder: string } - >; - - Sent( - operator: string | null, - from: string | null, - to: string | null, - amount: null, - data: null, - operatorData: null - ): TypedEventFilter< - [string, string, string, BigNumber, string, string], - { - operator: string; - from: string; - to: string; - amount: BigNumber; - data: string; - operatorData: string; - } - >; - }; - - estimateGas: { - authorizeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - defaultOperators(overrides?: CallOverrides): Promise; - - "defaultOperators()"(overrides?: CallOverrides): Promise; - - granularity(overrides?: CallOverrides): Promise; - - "granularity()"(overrides?: CallOverrides): Promise; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - authorizeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "authorizeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - burn( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "burn(uint256,bytes)"( - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - defaultOperators(overrides?: CallOverrides): Promise; - - "defaultOperators()"( - overrides?: CallOverrides - ): Promise; - - granularity(overrides?: CallOverrides): Promise; - - "granularity()"(overrides?: CallOverrides): Promise; - - isOperatorFor( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - "isOperatorFor(address,address)"( - operator: string, - tokenHolder: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - operatorBurn( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorBurn(address,uint256,bytes,bytes)"( - account: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - operatorSend( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "operatorSend(address,address,uint256,bytes,bytes)"( - sender: string, - recipient: string, - amount: BigNumberish, - data: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeOperator( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeOperator(address)"( - operator: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - send( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "send(address,uint256,bytes)"( - recipient: string, - amount: BigNumberish, - data: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC777Recipient.d.ts b/libs/chains/src/eth/types/IERC777Recipient.d.ts deleted file mode 100644 index 21731c2ba87..00000000000 --- a/libs/chains/src/eth/types/IERC777Recipient.d.ts +++ /dev/null @@ -1,192 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC777RecipientInterface extends ethers.utils.Interface { - functions: { - "tokensReceived(address,address,address,uint256,bytes,bytes)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "tokensReceived", - values: [string, string, string, BigNumberish, BytesLike, BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "tokensReceived", - data: BytesLike - ): Result; - - events: {}; -} - -export class IERC777Recipient extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC777RecipientInterface; - - functions: { - tokensReceived( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "tokensReceived(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - tokensReceived( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "tokensReceived(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - tokensReceived( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - "tokensReceived(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - tokensReceived( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "tokensReceived(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - tokensReceived( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "tokensReceived(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IERC777Sender.d.ts b/libs/chains/src/eth/types/IERC777Sender.d.ts deleted file mode 100644 index 503710cdfa3..00000000000 --- a/libs/chains/src/eth/types/IERC777Sender.d.ts +++ /dev/null @@ -1,192 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IERC777SenderInterface extends ethers.utils.Interface { - functions: { - "tokensToSend(address,address,address,uint256,bytes,bytes)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "tokensToSend", - values: [string, string, string, BigNumberish, BytesLike, BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "tokensToSend", - data: BytesLike - ): Result; - - events: {}; -} - -export class IERC777Sender extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IERC777SenderInterface; - - functions: { - tokensToSend( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "tokensToSend(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - tokensToSend( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "tokensToSend(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - tokensToSend( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - - "tokensToSend(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - tokensToSend( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "tokensToSend(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - tokensToSend( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "tokensToSend(address,address,address,uint256,bytes,bytes)"( - operator: string, - from: string, - to: string, - amount: BigNumberish, - userData: BytesLike, - operatorData: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IExecutorWithTimelock.d.ts b/libs/chains/src/eth/types/IExecutorWithTimelock.d.ts deleted file mode 100644 index 10c3f0161a3..00000000000 --- a/libs/chains/src/eth/types/IExecutorWithTimelock.d.ts +++ /dev/null @@ -1,790 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IExecutorWithTimelockInterface extends ethers.utils.Interface { - functions: { - "GRACE_PERIOD()": FunctionFragment; - "MAXIMUM_DELAY()": FunctionFragment; - "MINIMUM_DELAY()": FunctionFragment; - "cancelTransaction(address,uint256,string,bytes,uint256,bool)": FunctionFragment; - "executeTransaction(address,uint256,string,bytes,uint256,bool)": FunctionFragment; - "getAdmin()": FunctionFragment; - "getDelay()": FunctionFragment; - "getPendingAdmin()": FunctionFragment; - "isActionQueued(bytes32)": FunctionFragment; - "isProposalOverGracePeriod(address,uint256)": FunctionFragment; - "queueTransaction(address,uint256,string,bytes,uint256,bool)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "GRACE_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAXIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MINIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cancelTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish, boolean] - ): string; - encodeFunctionData( - functionFragment: "executeTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish, boolean] - ): string; - encodeFunctionData(functionFragment: "getAdmin", values?: undefined): string; - encodeFunctionData(functionFragment: "getDelay", values?: undefined): string; - encodeFunctionData( - functionFragment: "getPendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "isActionQueued", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "isProposalOverGracePeriod", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queueTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish, boolean] - ): string; - - decodeFunctionResult( - functionFragment: "GRACE_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAXIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MINIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "cancelTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "getAdmin", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getDelay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "getPendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isActionQueued", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isProposalOverGracePeriod", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queueTransaction", - data: BytesLike - ): Result; - - events: { - "CancelledAction(bytes32,address,uint256,string,bytes,uint256,bool)": EventFragment; - "ExecutedAction(bytes32,address,uint256,string,bytes,uint256,bool,bytes)": EventFragment; - "NewAdmin(address)": EventFragment; - "NewDelay(uint256)": EventFragment; - "NewPendingAdmin(address)": EventFragment; - "QueuedAction(bytes32,address,uint256,string,bytes,uint256,bool)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "CancelledAction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecutedAction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewDelay"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "QueuedAction"): EventFragment; -} - -export class IExecutorWithTimelock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IExecutorWithTimelockInterface; - - functions: { - GRACE_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise<[string]>; - - "getAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - getDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "getDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - getPendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - CancelledAction( - actionHash: null, - target: string | null, - value: null, - signature: null, - data: null, - executionTime: null, - withDelegatecall: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber, boolean], - { - actionHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - executionTime: BigNumber; - withDelegatecall: boolean; - } - >; - - ExecutedAction( - actionHash: null, - target: string | null, - value: null, - signature: null, - data: null, - executionTime: null, - withDelegatecall: null, - resultData: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber, boolean, string], - { - actionHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - executionTime: BigNumber; - withDelegatecall: boolean; - resultData: string; - } - >; - - NewAdmin(newAdmin: null): TypedEventFilter<[string], { newAdmin: string }>; - - NewDelay(delay: null): TypedEventFilter<[BigNumber], { delay: BigNumber }>; - - NewPendingAdmin( - newPendingAdmin: null - ): TypedEventFilter<[string], { newPendingAdmin: string }>; - - QueuedAction( - actionHash: null, - target: string | null, - value: null, - signature: null, - data: null, - executionTime: null, - withDelegatecall: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber, boolean], - { - actionHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - executionTime: BigNumber; - withDelegatecall: boolean; - } - >; - }; - - estimateGas: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"(overrides?: CallOverrides): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getAdmin(overrides?: CallOverrides): Promise; - - "getAdmin()"(overrides?: CallOverrides): Promise; - - getDelay(overrides?: CallOverrides): Promise; - - "getDelay()"(overrides?: CallOverrides): Promise; - - getPendingAdmin(overrides?: CallOverrides): Promise; - - "getPendingAdmin()"( - overrides?: CallOverrides - ): Promise; - - isActionQueued( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isActionQueued(bytes32)"( - actionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - isProposalOverGracePeriod( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalOverGracePeriod(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256,bool)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - executionTime: BigNumberish, - withDelegatecall: boolean, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IGovernancePowerDelegationToken.d.ts b/libs/chains/src/eth/types/IGovernancePowerDelegationToken.d.ts deleted file mode 100644 index 3a91edcc7ed..00000000000 --- a/libs/chains/src/eth/types/IGovernancePowerDelegationToken.d.ts +++ /dev/null @@ -1,161 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IGovernancePowerDelegationTokenInterface - extends ethers.utils.Interface { - functions: { - "getPowerAtBlock(address,uint256,uint8)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "getPowerAtBlock", - values: [string, BigNumberish, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "getPowerAtBlock", - data: BytesLike - ): Result; - - events: {}; -} - -export class IGovernancePowerDelegationToken extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IGovernancePowerDelegationTokenInterface; - - functions: { - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - getPowerAtBlock( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPowerAtBlock(address,uint256,uint8)"( - user: string, - blockNumber: BigNumberish, - delegationType: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IGovernanceStrategy.d.ts b/libs/chains/src/eth/types/IGovernanceStrategy.d.ts deleted file mode 100644 index ede741b381b..00000000000 --- a/libs/chains/src/eth/types/IGovernanceStrategy.d.ts +++ /dev/null @@ -1,337 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IGovernanceStrategyInterface extends ethers.utils.Interface { - functions: { - "getPropositionPowerAt(address,uint256)": FunctionFragment; - "getTotalPropositionSupplyAt(uint256)": FunctionFragment; - "getTotalVotingSupplyAt(uint256)": FunctionFragment; - "getVotingPowerAt(address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "getPropositionPowerAt", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getTotalPropositionSupplyAt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getTotalVotingSupplyAt", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getVotingPowerAt", - values: [string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "getPropositionPowerAt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalPropositionSupplyAt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTotalVotingSupplyAt", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getVotingPowerAt", - data: BytesLike - ): Result; - - events: {}; -} - -export class IGovernanceStrategy extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IGovernanceStrategyInterface; - - functions: { - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - getPropositionPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPropositionPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalPropositionSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalPropositionSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getTotalVotingSupplyAt( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getTotalVotingSupplyAt(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IGovernanceV2Helper.d.ts b/libs/chains/src/eth/types/IGovernanceV2Helper.d.ts deleted file mode 100644 index 6ff299ecefb..00000000000 --- a/libs/chains/src/eth/types/IGovernanceV2Helper.d.ts +++ /dev/null @@ -1,1167 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { - ethers, - EventFilter, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - Contract, - ContractTransaction, - CallOverrides, -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IGovernanceV2HelperInterface extends ethers.utils.Interface { - functions: { - "getProposal(uint256,address)": FunctionFragment; - "getProposals(uint256,uint256,address)": FunctionFragment; - "getTokensPower(address,address[])": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "getProposal", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getProposals", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getTokensPower", - values: [string, string[]] - ): string; - - decodeFunctionResult( - functionFragment: "getProposal", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getProposals", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTokensPower", - data: BytesLike - ): Result; - - events: {}; -} - -export class IGovernanceV2Helper extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IGovernanceV2HelperInterface; - - functions: { - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - ] & { - proposalStats: [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - }; - } - >; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - ] & { - proposalStats: [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - }; - } - >; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - ] & { - proposalsStats: ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[]; - } - >; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - ] & { - proposalsStats: ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[]; - } - >; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - [ - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - ] & { - power: ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[]; - } - >; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - [ - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - ] & { - power: ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[]; - } - >; - }; - - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - >; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - >; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - >; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - >; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - >; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - >; - - callStatic: { - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - >; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - } - >; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - >; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise< - ([ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string[], - BigNumber[], - string[], - string[], - boolean[], - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean, - string, - string, - number - ] & { - totalVotingSupply: BigNumber; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - executionTimeWithGracePeriod: BigNumber; - proposalCreated: BigNumber; - id: BigNumber; - creator: string; - executor: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - withDelegatecalls: boolean[]; - startBlock: BigNumber; - endBlock: BigNumber; - executionTime: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executed: boolean; - canceled: boolean; - strategy: string; - ipfsHash: string; - proposalState: number; - })[] - >; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - >; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise< - ([BigNumber, string, BigNumber, string] & { - votingPower: BigNumber; - delegatedAddressVotingPower: string; - propositionPower: BigNumber; - delegatedAddressPropositionPower: string; - })[] - >; - }; - - filters: {}; - - estimateGas: { - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - getProposal( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - "getProposal(uint256,address)"( - id: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - getProposals( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - "getProposals(uint256,uint256,address)"( - skip: BigNumberish, - limit: BigNumberish, - governance: string, - overrides?: CallOverrides - ): Promise; - - getTokensPower( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise; - - "getTokensPower(address,address[])"( - user: string, - tokens: string[], - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IGovernor.d.ts b/libs/chains/src/eth/types/IGovernor.d.ts deleted file mode 100644 index ba83017ca58..00000000000 --- a/libs/chains/src/eth/types/IGovernor.d.ts +++ /dev/null @@ -1,1204 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IGovernorInterface extends ethers.utils.Interface { - functions: { - "COUNTING_MODE()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class IGovernor extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IGovernorInterface; - - functions: { - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IGovernorCompatibilityBravo.d.ts b/libs/chains/src/eth/types/IGovernorCompatibilityBravo.d.ts deleted file mode 100644 index f5801d09eac..00000000000 --- a/libs/chains/src/eth/types/IGovernorCompatibilityBravo.d.ts +++ /dev/null @@ -1,1761 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IGovernorCompatibilityBravoInterface extends ethers.utils.Interface { - functions: { - "COUNTING_MODE()": FunctionFragment; - "cancel(uint256)": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getActions(uint256)": FunctionFragment; - "getReceipt(uint256,address)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "proposalThreshold()": FunctionFragment; - "proposals(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "queue(uint256)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "quorumVotes()": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cancel", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getActions", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getReceipt", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalThreshold", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "proposals", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData(functionFragment: "queue", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "quorumVotes", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getActions", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getReceipt", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalThreshold", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "quorumVotes", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class IGovernorCompatibilityBravo extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IGovernorCompatibilityBravoInterface; - - functions: { - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [ - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - ] - >; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalThreshold(overrides?: CallOverrides): Promise<[BigNumber]>; - - "proposalThreshold()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - quorumVotes(overrides?: CallOverrides): Promise<[BigNumber]>; - - "quorumVotes()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise< - [string[], BigNumber[], string[], string[]] & { - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - } - >; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise< - [boolean, number, BigNumber] & { - hasVoted: boolean; - support: number; - votes: BigNumber; - } - >; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise< - [ - BigNumber, - string, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - boolean, - boolean - ] & { - id: BigNumber; - proposer: string; - eta: BigNumber; - startBlock: BigNumber; - endBlock: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes: BigNumber; - canceled: boolean; - executed: boolean; - } - >; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"(overrides?: CallOverrides): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - cancel( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(uint256)"( - proposalId: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getActions( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getActions(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getReceipt( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - "getReceipt(uint256,address)"( - proposalId: BigNumberish, - voter: string, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalThreshold(overrides?: CallOverrides): Promise; - - "proposalThreshold()"( - overrides?: CallOverrides - ): Promise; - - proposals( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposals(uint256)"( - arg0: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],string[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - signatures: string[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(uint256)"( - proposalId: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - quorumVotes(overrides?: CallOverrides): Promise; - - "quorumVotes()"(overrides?: CallOverrides): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IGovernorTimelock.d.ts b/libs/chains/src/eth/types/IGovernorTimelock.d.ts deleted file mode 100644 index 95faa2e82c3..00000000000 --- a/libs/chains/src/eth/types/IGovernorTimelock.d.ts +++ /dev/null @@ -1,1382 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IGovernorTimelockInterface extends ethers.utils.Interface { - functions: { - "COUNTING_MODE()": FunctionFragment; - "castVote(uint256,uint8)": FunctionFragment; - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)": FunctionFragment; - "castVoteWithReason(uint256,uint8,string)": FunctionFragment; - "execute(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "getVotes(address,uint256)": FunctionFragment; - "hasVoted(uint256,address)": FunctionFragment; - "hashProposal(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "name()": FunctionFragment; - "proposalDeadline(uint256)": FunctionFragment; - "proposalEta(uint256)": FunctionFragment; - "proposalSnapshot(uint256)": FunctionFragment; - "propose(address[],uint256[],bytes[],string)": FunctionFragment; - "queue(address[],uint256[],bytes[],bytes32)": FunctionFragment; - "quorum(uint256)": FunctionFragment; - "state(uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "timelock()": FunctionFragment; - "version()": FunctionFragment; - "votingDelay()": FunctionFragment; - "votingPeriod()": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "COUNTING_MODE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "castVote", - values: [BigNumberish, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "castVoteBySig", - values: [BigNumberish, BigNumberish, BigNumberish, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "castVoteWithReason", - values: [BigNumberish, BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "execute", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "hasVoted", - values: [BigNumberish, string] - ): string; - encodeFunctionData( - functionFragment: "hashProposal", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData( - functionFragment: "proposalDeadline", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalEta", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "proposalSnapshot", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "propose", - values: [string[], BigNumberish[], BytesLike[], string] - ): string; - encodeFunctionData( - functionFragment: "queue", - values: [string[], BigNumberish[], BytesLike[], BytesLike] - ): string; - encodeFunctionData( - functionFragment: "quorum", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "state", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "timelock", values?: undefined): string; - encodeFunctionData(functionFragment: "version", values?: undefined): string; - encodeFunctionData( - functionFragment: "votingDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "votingPeriod", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "COUNTING_MODE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "castVote", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "castVoteBySig", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "castVoteWithReason", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "getVotes", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasVoted", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashProposal", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "proposalDeadline", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalEta", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "proposalSnapshot", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "propose", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "queue", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "quorum", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "state", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "timelock", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "votingDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "votingPeriod", - data: BytesLike - ): Result; - - events: { - "ProposalCanceled(uint256)": EventFragment; - "ProposalCreated(uint256,address,address[],uint256[],string[],bytes[],uint256,uint256,string)": EventFragment; - "ProposalExecuted(uint256)": EventFragment; - "ProposalQueued(uint256,uint256)": EventFragment; - "VoteCast(address,uint256,uint8,uint256,string)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ProposalCanceled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProposalQueued"): EventFragment; - getEvent(nameOrSignatureOrTopic: "VoteCast"): EventFragment; -} - -export class IGovernorTimelock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IGovernorTimelockInterface; - - functions: { - COUNTING_MODE(overrides?: CallOverrides): Promise<[string]>; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise<[string]>; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[number]>; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - timelock(overrides?: CallOverrides): Promise<[string]>; - - "timelock()"(overrides?: CallOverrides): Promise<[string]>; - - version(overrides?: CallOverrides): Promise<[string]>; - - "version()"(overrides?: CallOverrides): Promise<[string]>; - - votingDelay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingDelay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - votingPeriod(overrides?: CallOverrides): Promise<[BigNumber]>; - - "votingPeriod()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - - callStatic: { - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: CallOverrides - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: CallOverrides - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: CallOverrides - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: CallOverrides - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state(proposalId: BigNumberish, overrides?: CallOverrides): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - filters: { - ProposalCanceled( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalCreated( - proposalId: null, - proposer: null, - targets: null, - values: null, - signatures: null, - calldatas: null, - startBlock: null, - endBlock: null, - description: null - ): TypedEventFilter< - [ - BigNumber, - string, - string[], - BigNumber[], - string[], - string[], - BigNumber, - BigNumber, - string - ], - { - proposalId: BigNumber; - proposer: string; - targets: string[]; - values: BigNumber[]; - signatures: string[]; - calldatas: string[]; - startBlock: BigNumber; - endBlock: BigNumber; - description: string; - } - >; - - ProposalExecuted( - proposalId: null - ): TypedEventFilter<[BigNumber], { proposalId: BigNumber }>; - - ProposalQueued( - proposalId: null, - eta: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { proposalId: BigNumber; eta: BigNumber } - >; - - VoteCast( - voter: string | null, - proposalId: null, - support: null, - weight: null, - reason: null - ): TypedEventFilter< - [string, BigNumber, number, BigNumber, string], - { - voter: string; - proposalId: BigNumber; - support: number; - weight: BigNumber; - reason: string; - } - >; - }; - - estimateGas: { - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - COUNTING_MODE(overrides?: CallOverrides): Promise; - - "COUNTING_MODE()"(overrides?: CallOverrides): Promise; - - castVote( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVote(uint256,uint8)"( - proposalId: BigNumberish, - support: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteBySig( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)"( - proposalId: BigNumberish, - support: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - castVoteWithReason( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "castVoteWithReason(uint256,uint8,string)"( - proposalId: BigNumberish, - support: BigNumberish, - reason: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - hasVoted( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasVoted(uint256,address)"( - proposalId: BigNumberish, - account: string, - overrides?: CallOverrides - ): Promise; - - hashProposal( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashProposal(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - proposalDeadline( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalDeadline(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalEta( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalEta(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - proposalSnapshot( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "proposalSnapshot(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - propose( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "propose(address[],uint256[],bytes[],string)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - description: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queue( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queue(address[],uint256[],bytes[],bytes32)"( - targets: string[], - values: BigNumberish[], - calldatas: BytesLike[], - descriptionHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - quorum( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "quorum(uint256)"( - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - state( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "state(uint256)"( - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - timelock(overrides?: CallOverrides): Promise; - - "timelock()"(overrides?: CallOverrides): Promise; - - version(overrides?: CallOverrides): Promise; - - "version()"(overrides?: CallOverrides): Promise; - - votingDelay(overrides?: CallOverrides): Promise; - - "votingDelay()"(overrides?: CallOverrides): Promise; - - votingPeriod(overrides?: CallOverrides): Promise; - - "votingPeriod()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IProjectBase.d.ts b/libs/chains/src/eth/types/IProjectBase.d.ts deleted file mode 100644 index 796424ef0ff..00000000000 --- a/libs/chains/src/eth/types/IProjectBase.d.ts +++ /dev/null @@ -1,778 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IProjectBaseInterface extends ethers.utils.Interface { - functions: { - "back(uint256)": FunctionFragment; - "backersWithdraw()": FunctionFragment; - "beneficiaryWithdraw()": FunctionFragment; - "funded()": FunctionFragment; - "lockedWithdraw()": FunctionFragment; - "metaData()": FunctionFragment; - "projectData()": FunctionFragment; - "protocolData()": FunctionFragment; - "setIpfsHash(bytes32)": FunctionFragment; - "setName(bytes32)": FunctionFragment; - "setUrl(bytes32)": FunctionFragment; - "totalFunding()": FunctionFragment; - }; - - encodeFunctionData(functionFragment: "back", values: [BigNumberish]): string; - encodeFunctionData( - functionFragment: "backersWithdraw", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "beneficiaryWithdraw", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "funded", values?: undefined): string; - encodeFunctionData( - functionFragment: "lockedWithdraw", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "metaData", values?: undefined): string; - encodeFunctionData( - functionFragment: "projectData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "protocolData", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "setIpfsHash", - values: [BytesLike] - ): string; - encodeFunctionData(functionFragment: "setName", values: [BytesLike]): string; - encodeFunctionData(functionFragment: "setUrl", values: [BytesLike]): string; - encodeFunctionData( - functionFragment: "totalFunding", - values?: undefined - ): string; - - decodeFunctionResult(functionFragment: "back", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "backersWithdraw", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "beneficiaryWithdraw", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "funded", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "lockedWithdraw", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "metaData", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "projectData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "protocolData", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setIpfsHash", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setName", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setUrl", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalFunding", - data: BytesLike - ): Result; - - events: { - "Back(address,address,uint256)": EventFragment; - "Failed()": EventFragment; - "ProjectDataChange(bytes32,bytes32,bytes32)": EventFragment; - "Succeeded(uint256,uint256)": EventFragment; - "Withdraw(address,address,uint256,bytes32)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Back"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Failed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProjectDataChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Succeeded"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment; -} - -export class IProjectBase extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IProjectBaseInterface; - - functions: { - back( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - backersWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "backersWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - beneficiaryWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "beneficiaryWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - funded(overrides?: CallOverrides): Promise<[boolean]>; - - "funded()"(overrides?: CallOverrides): Promise<[boolean]>; - - lockedWithdraw(overrides?: CallOverrides): Promise<[boolean]>; - - "lockedWithdraw()"(overrides?: CallOverrides): Promise<[boolean]>; - - metaData( - overrides?: CallOverrides - ): Promise< - [ - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - ] - >; - - "metaData()"( - overrides?: CallOverrides - ): Promise< - [ - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - ] - >; - - projectData( - overrides?: CallOverrides - ): Promise< - [ - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - ] - >; - - "projectData()"( - overrides?: CallOverrides - ): Promise< - [ - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - ] - >; - - protocolData( - overrides?: CallOverrides - ): Promise< - [ - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - ] - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [ - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - ] - >; - - setIpfsHash( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setName( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUrl( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalFunding(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalFunding()"(overrides?: CallOverrides): Promise<[BigNumber]>; - }; - - back( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - backersWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "backersWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - beneficiaryWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "beneficiaryWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - funded(overrides?: CallOverrides): Promise; - - "funded()"(overrides?: CallOverrides): Promise; - - lockedWithdraw(overrides?: CallOverrides): Promise; - - "lockedWithdraw()"(overrides?: CallOverrides): Promise; - - metaData( - overrides?: CallOverrides - ): Promise< - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - >; - - "metaData()"( - overrides?: CallOverrides - ): Promise< - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - >; - - projectData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - >; - - "projectData()"( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - >; - - protocolData( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - setIpfsHash( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setName( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUrl( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalFunding(overrides?: CallOverrides): Promise; - - "totalFunding()"(overrides?: CallOverrides): Promise; - - callStatic: { - back(_amount: BigNumberish, overrides?: CallOverrides): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - backersWithdraw(overrides?: CallOverrides): Promise; - - "backersWithdraw()"(overrides?: CallOverrides): Promise; - - beneficiaryWithdraw(overrides?: CallOverrides): Promise; - - "beneficiaryWithdraw()"(overrides?: CallOverrides): Promise; - - funded(overrides?: CallOverrides): Promise; - - "funded()"(overrides?: CallOverrides): Promise; - - lockedWithdraw(overrides?: CallOverrides): Promise; - - "lockedWithdraw()"(overrides?: CallOverrides): Promise; - - metaData( - overrides?: CallOverrides - ): Promise< - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - >; - - "metaData()"( - overrides?: CallOverrides - ): Promise< - [BigNumber, string, string, string, string] & { - id: BigNumber; - name: string; - ipfsHash: string; - url: string; - creator: string; - } - >; - - projectData( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - >; - - "projectData()"( - overrides?: CallOverrides - ): Promise< - [BigNumber, BigNumber, string, string] & { - threshold: BigNumber; - deadline: BigNumber; - beneficiary: string; - acceptedToken: string; - } - >; - - protocolData( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - setIpfsHash(_ipfsHash: BytesLike, overrides?: CallOverrides): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: CallOverrides - ): Promise; - - setName(_name: BytesLike, overrides?: CallOverrides): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: CallOverrides - ): Promise; - - setUrl(_url: BytesLike, overrides?: CallOverrides): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: CallOverrides - ): Promise; - - totalFunding(overrides?: CallOverrides): Promise; - - "totalFunding()"(overrides?: CallOverrides): Promise; - }; - - filters: { - Back( - sender: string | null, - token: string | null, - amount: null - ): TypedEventFilter< - [string, string, BigNumber], - { sender: string; token: string; amount: BigNumber } - >; - - Failed(): TypedEventFilter<[], {}>; - - ProjectDataChange( - name: null, - oldData: null, - newData: null - ): TypedEventFilter< - [string, string, string], - { name: string; oldData: string; newData: string } - >; - - Succeeded( - timestamp: null, - amount: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { timestamp: BigNumber; amount: BigNumber } - >; - - Withdraw( - sender: string | null, - token: string | null, - amount: null, - withdrawalType: null - ): TypedEventFilter< - [string, string, BigNumber, string], - { - sender: string; - token: string; - amount: BigNumber; - withdrawalType: string; - } - >; - }; - - estimateGas: { - back( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - backersWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "backersWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - beneficiaryWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "beneficiaryWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - funded(overrides?: CallOverrides): Promise; - - "funded()"(overrides?: CallOverrides): Promise; - - lockedWithdraw(overrides?: CallOverrides): Promise; - - "lockedWithdraw()"(overrides?: CallOverrides): Promise; - - metaData(overrides?: CallOverrides): Promise; - - "metaData()"(overrides?: CallOverrides): Promise; - - projectData(overrides?: CallOverrides): Promise; - - "projectData()"(overrides?: CallOverrides): Promise; - - protocolData(overrides?: CallOverrides): Promise; - - "protocolData()"(overrides?: CallOverrides): Promise; - - setIpfsHash( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setName( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUrl( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalFunding(overrides?: CallOverrides): Promise; - - "totalFunding()"(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - back( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "back(uint256)"( - _amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - backersWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "backersWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - beneficiaryWithdraw( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "beneficiaryWithdraw()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - funded(overrides?: CallOverrides): Promise; - - "funded()"(overrides?: CallOverrides): Promise; - - lockedWithdraw(overrides?: CallOverrides): Promise; - - "lockedWithdraw()"( - overrides?: CallOverrides - ): Promise; - - metaData(overrides?: CallOverrides): Promise; - - "metaData()"(overrides?: CallOverrides): Promise; - - projectData(overrides?: CallOverrides): Promise; - - "projectData()"(overrides?: CallOverrides): Promise; - - protocolData(overrides?: CallOverrides): Promise; - - "protocolData()"(overrides?: CallOverrides): Promise; - - setIpfsHash( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setIpfsHash(bytes32)"( - _ipfsHash: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setName( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setName(bytes32)"( - _name: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setUrl( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setUrl(bytes32)"( - _url: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalFunding(overrides?: CallOverrides): Promise; - - "totalFunding()"(overrides?: CallOverrides): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IProjectBaseFactory.d.ts b/libs/chains/src/eth/types/IProjectBaseFactory.d.ts deleted file mode 100644 index 0e2b7fb9e23..00000000000 --- a/libs/chains/src/eth/types/IProjectBaseFactory.d.ts +++ /dev/null @@ -1,763 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IProjectBaseFactoryInterface extends ethers.utils.Interface { - functions: { - "addAcceptedTokens(address[])": FunctionFragment; - "isAcceptedToken(address)": FunctionFragment; - "numProjects()": FunctionFragment; - "owner()": FunctionFragment; - "projectImp()": FunctionFragment; - "projects(uint32)": FunctionFragment; - "protocolData()": FunctionFragment; - "setAdmin(address)": FunctionFragment; - "setFeeTo(address)": FunctionFragment; - "setPauseGuardian(address)": FunctionFragment; - "setProjectImpl(address)": FunctionFragment; - "setProtocolFee(uint8)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "addAcceptedTokens", - values: [string[]] - ): string; - encodeFunctionData( - functionFragment: "isAcceptedToken", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "numProjects", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "projectImp", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "projects", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "protocolData", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "setAdmin", values: [string]): string; - encodeFunctionData(functionFragment: "setFeeTo", values: [string]): string; - encodeFunctionData( - functionFragment: "setPauseGuardian", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setProjectImpl", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "setProtocolFee", - values: [BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "addAcceptedTokens", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isAcceptedToken", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "numProjects", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "projectImp", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "projects", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "protocolData", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setAdmin", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "setFeeTo", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setPauseGuardian", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setProjectImpl", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "setProtocolFee", - data: BytesLike - ): Result; - - events: { - "ActionPaused(string,bool)": EventFragment; - "NewAdmin(address,address)": EventFragment; - "NewPauseGuardian(address,address)": EventFragment; - "ProjectCreated(uint256,address)": EventFragment; - "ProjectImplChange(address,address)": EventFragment; - "ProtocolFeeChange(uint8,uint8)": EventFragment; - "ProtocolFeeToChange(address,address)": EventFragment; - "ProtocolTokenImplChange(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "ActionPaused"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPauseGuardian"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProjectCreated"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProjectImplChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProtocolFeeChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProtocolFeeToChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ProtocolTokenImplChange"): EventFragment; -} - -export class IProjectBaseFactory extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IProjectBaseFactoryInterface; - - functions: { - addAcceptedTokens( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isAcceptedToken( - token: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - numProjects(overrides?: CallOverrides): Promise<[number]>; - - "numProjects()"(overrides?: CallOverrides): Promise<[number]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - "owner()"(overrides?: CallOverrides): Promise<[string]>; - - projectImp(overrides?: CallOverrides): Promise<[string]>; - - "projectImp()"(overrides?: CallOverrides): Promise<[string]>; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise<[string]>; - - protocolData( - overrides?: CallOverrides - ): Promise< - [ - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - ] - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [ - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - ] - >; - - setAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFeeTo( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - addAcceptedTokens( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isAcceptedToken(token: string, overrides?: CallOverrides): Promise; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise; - - numProjects(overrides?: CallOverrides): Promise; - - "numProjects()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - projectImp(overrides?: CallOverrides): Promise; - - "projectImp()"(overrides?: CallOverrides): Promise; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - protocolData( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - setAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFeeTo( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - addAcceptedTokens( - _tokens: string[], - overrides?: CallOverrides - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: CallOverrides - ): Promise; - - isAcceptedToken(token: string, overrides?: CallOverrides): Promise; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise; - - numProjects(overrides?: CallOverrides): Promise; - - "numProjects()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - projectImp(overrides?: CallOverrides): Promise; - - "projectImp()"(overrides?: CallOverrides): Promise; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - protocolData( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - "protocolData()"( - overrides?: CallOverrides - ): Promise< - [number, string, string, string] & { - fee: number; - feeTo: string; - admin: string; - pauseGuardian: string; - } - >; - - setAdmin(newAdmin: string, overrides?: CallOverrides): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: CallOverrides - ): Promise; - - setFeeTo(_feeTo: string, overrides?: CallOverrides): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: CallOverrides - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: CallOverrides - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: CallOverrides - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: CallOverrides - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: CallOverrides - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - ActionPaused( - action: null, - pauseState: null - ): TypedEventFilter< - [string, boolean], - { action: string; pauseState: boolean } - >; - - NewAdmin( - oldAdmin: null, - newAdmin: null - ): TypedEventFilter< - [string, string], - { oldAdmin: string; newAdmin: string } - >; - - NewPauseGuardian( - oldPauseGuardian: null, - newPauseGuardian: null - ): TypedEventFilter< - [string, string], - { oldPauseGuardian: string; newPauseGuardian: string } - >; - - ProjectCreated( - projectIndex: null, - projectAddress: null - ): TypedEventFilter< - [BigNumber, string], - { projectIndex: BigNumber; projectAddress: string } - >; - - ProjectImplChange( - oldAddr: null, - newAddr: null - ): TypedEventFilter<[string, string], { oldAddr: string; newAddr: string }>; - - ProtocolFeeChange( - oldFee: null, - newFee: null - ): TypedEventFilter<[number, number], { oldFee: number; newFee: number }>; - - ProtocolFeeToChange( - oldAddr: null, - newAddr: null - ): TypedEventFilter<[string, string], { oldAddr: string; newAddr: string }>; - - ProtocolTokenImplChange( - oldAddr: null, - newAddr: null - ): TypedEventFilter<[string, string], { oldAddr: string; newAddr: string }>; - }; - - estimateGas: { - addAcceptedTokens( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isAcceptedToken( - token: string, - overrides?: CallOverrides - ): Promise; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise; - - numProjects(overrides?: CallOverrides): Promise; - - "numProjects()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - projectImp(overrides?: CallOverrides): Promise; - - "projectImp()"(overrides?: CallOverrides): Promise; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - protocolData(overrides?: CallOverrides): Promise; - - "protocolData()"(overrides?: CallOverrides): Promise; - - setAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFeeTo( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - addAcceptedTokens( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addAcceptedTokens(address[])"( - _tokens: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - isAcceptedToken( - token: string, - overrides?: CallOverrides - ): Promise; - - "isAcceptedToken(address)"( - token: string, - overrides?: CallOverrides - ): Promise; - - numProjects(overrides?: CallOverrides): Promise; - - "numProjects()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - projectImp(overrides?: CallOverrides): Promise; - - "projectImp()"(overrides?: CallOverrides): Promise; - - projects( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "projects(uint32)"( - projectIndex: BigNumberish, - overrides?: CallOverrides - ): Promise; - - protocolData(overrides?: CallOverrides): Promise; - - "protocolData()"(overrides?: CallOverrides): Promise; - - setAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setFeeTo( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setFeeTo(address)"( - _feeTo: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPauseGuardian( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPauseGuardian(address)"( - newPauseGuardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProjectImpl( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProjectImpl(address)"( - _projectImpl: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setProtocolFee( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setProtocolFee(uint8)"( - _protocolFee: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IProposalValidator.d.ts b/libs/chains/src/eth/types/IProposalValidator.d.ts deleted file mode 100644 index f547c9ea5ad..00000000000 --- a/libs/chains/src/eth/types/IProposalValidator.d.ts +++ /dev/null @@ -1,818 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IProposalValidatorInterface extends ethers.utils.Interface { - functions: { - "MINIMUM_QUORUM()": FunctionFragment; - "ONE_HUNDRED_WITH_PRECISION()": FunctionFragment; - "PROPOSITION_THRESHOLD()": FunctionFragment; - "VOTE_DIFFERENTIAL()": FunctionFragment; - "VOTING_DURATION()": FunctionFragment; - "getMinimumPropositionPowerNeeded(address,uint256)": FunctionFragment; - "getMinimumVotingPowerNeeded(uint256)": FunctionFragment; - "isProposalPassed(address,uint256)": FunctionFragment; - "isPropositionPowerEnough(address,address,uint256)": FunctionFragment; - "isQuorumValid(address,uint256)": FunctionFragment; - "isVoteDifferentialValid(address,uint256)": FunctionFragment; - "validateCreatorOfProposal(address,address,uint256)": FunctionFragment; - "validateProposalCancellation(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "MINIMUM_QUORUM", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ONE_HUNDRED_WITH_PRECISION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "PROPOSITION_THRESHOLD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "VOTE_DIFFERENTIAL", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "VOTING_DURATION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getMinimumPropositionPowerNeeded", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getMinimumVotingPowerNeeded", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isProposalPassed", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isPropositionPowerEnough", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isQuorumValid", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isVoteDifferentialValid", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "validateCreatorOfProposal", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "validateProposalCancellation", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "MINIMUM_QUORUM", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ONE_HUNDRED_WITH_PRECISION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "PROPOSITION_THRESHOLD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "VOTE_DIFFERENTIAL", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "VOTING_DURATION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getMinimumPropositionPowerNeeded", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getMinimumVotingPowerNeeded", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isProposalPassed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isPropositionPowerEnough", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isQuorumValid", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isVoteDifferentialValid", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateCreatorOfProposal", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateProposalCancellation", - data: BytesLike - ): Result; - - events: {}; -} - -export class IProposalValidator extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IProposalValidatorInterface; - - functions: { - MINIMUM_QUORUM(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise<[BigNumber]>; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - VOTING_DURATION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"(overrides?: CallOverrides): Promise; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"( - overrides?: CallOverrides - ): Promise; - - ONE_HUNDRED_WITH_PRECISION( - overrides?: CallOverrides - ): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - PROPOSITION_THRESHOLD( - overrides?: CallOverrides - ): Promise; - - "PROPOSITION_THRESHOLD()"( - overrides?: CallOverrides - ): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"( - overrides?: CallOverrides - ): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"( - overrides?: CallOverrides - ): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ITransferHook.d.ts b/libs/chains/src/eth/types/ITransferHook.d.ts deleted file mode 100644 index f992994169e..00000000000 --- a/libs/chains/src/eth/types/ITransferHook.d.ts +++ /dev/null @@ -1,159 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ITransferHookInterface extends ethers.utils.Interface { - functions: { - "onTransfer(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "onTransfer", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "onTransfer", data: BytesLike): Result; - - events: {}; -} - -export class ITransferHook extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ITransferHookInterface; - - functions: { - onTransfer( - from: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onTransfer(address,address,uint256)"( - from: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - onTransfer( - from: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onTransfer(address,address,uint256)"( - from: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - onTransfer( - from: string, - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "onTransfer(address,address,uint256)"( - from: string, - to: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - onTransfer( - from: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onTransfer(address,address,uint256)"( - from: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - onTransfer( - from: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "onTransfer(address,address,uint256)"( - from: string, - to: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/IVotingStrategy.d.ts b/libs/chains/src/eth/types/IVotingStrategy.d.ts deleted file mode 100644 index 1245d7598e2..00000000000 --- a/libs/chains/src/eth/types/IVotingStrategy.d.ts +++ /dev/null @@ -1,150 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface IVotingStrategyInterface extends ethers.utils.Interface { - functions: { - "getVotingPowerAt(address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "getVotingPowerAt", - values: [string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "getVotingPowerAt", - data: BytesLike - ): Result; - - events: {}; -} - -export class IVotingStrategy extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: IVotingStrategyInterface; - - functions: { - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - getVotingPowerAt( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getVotingPowerAt(address,uint256)"( - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/InitializableAdminUpgradeabilityProxy.d.ts b/libs/chains/src/eth/types/InitializableAdminUpgradeabilityProxy.d.ts deleted file mode 100644 index acd2f43e0ff..00000000000 --- a/libs/chains/src/eth/types/InitializableAdminUpgradeabilityProxy.d.ts +++ /dev/null @@ -1,432 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface InitializableAdminUpgradeabilityProxyInterface - extends ethers.utils.Interface { - functions: { - "admin()": FunctionFragment; - "changeAdmin(address)": FunctionFragment; - "implementation()": FunctionFragment; - "initialize(address,address,bytes)": FunctionFragment; - "upgradeTo(address)": FunctionFragment; - "upgradeToAndCall(address,bytes)": FunctionFragment; - }; - - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData(functionFragment: "changeAdmin", values: [string]): string; - encodeFunctionData( - functionFragment: "implementation", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "initialize", - values: [string, string, BytesLike] - ): string; - encodeFunctionData(functionFragment: "upgradeTo", values: [string]): string; - encodeFunctionData( - functionFragment: "upgradeToAndCall", - values: [string, BytesLike] - ): string; - - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "changeAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "implementation", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "upgradeTo", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "upgradeToAndCall", - data: BytesLike - ): Result; - - events: { - "AdminChanged(address,address)": EventFragment; - "Upgraded(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; -} - -export class InitializableAdminUpgradeabilityProxy extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: InitializableAdminUpgradeabilityProxyInterface; - - functions: { - admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "admin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - changeAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - implementation( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "implementation()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,bytes)"( - _logic: string, - _admin: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; - - admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "admin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - changeAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - implementation( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "implementation()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,bytes)"( - _logic: string, - _admin: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - callStatic: { - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - changeAdmin(newAdmin: string, overrides?: CallOverrides): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: CallOverrides - ): Promise; - - implementation(overrides?: CallOverrides): Promise; - - "implementation()"(overrides?: CallOverrides): Promise; - - "initialize(address,address,bytes)"( - _logic: string, - _admin: string, - _data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: CallOverrides - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: CallOverrides - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: CallOverrides - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - AdminChanged( - previousAdmin: null, - newAdmin: null - ): TypedEventFilter< - [string, string], - { previousAdmin: string; newAdmin: string } - >; - - Upgraded( - implementation: string | null - ): TypedEventFilter<[string], { implementation: string }>; - }; - - estimateGas: { - admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "admin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - changeAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - implementation( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "implementation()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,bytes)"( - _logic: string, - _admin: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - admin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "admin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - changeAdmin( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "changeAdmin(address)"( - newAdmin: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - implementation( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "implementation()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "initialize(address,address,bytes)"( - _logic: string, - _admin: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - upgradeTo( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgradeTo(address)"( - newImplementation: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgradeToAndCall( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "upgradeToAndCall(address,bytes)"( - newImplementation: string, - data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/InitializableUpgradeabilityProxy.d.ts b/libs/chains/src/eth/types/InitializableUpgradeabilityProxy.d.ts deleted file mode 100644 index 68eb22e2b18..00000000000 --- a/libs/chains/src/eth/types/InitializableUpgradeabilityProxy.d.ts +++ /dev/null @@ -1,157 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - ContractTransaction, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface InitializableUpgradeabilityProxyInterface - extends ethers.utils.Interface { - functions: { - "initialize(address,bytes)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "initialize", - values: [string, BytesLike] - ): string; - - decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; - - events: { - "Upgraded(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; -} - -export class InitializableUpgradeabilityProxy extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: InitializableUpgradeabilityProxyInterface; - - functions: { - initialize( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; - - initialize( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - callStatic: { - initialize( - _logic: string, - _data: BytesLike, - overrides?: CallOverrides - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Upgraded( - implementation: string | null - ): TypedEventFilter<[string], { implementation: string }>; - }; - - estimateGas: { - initialize( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - initialize( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "initialize(address,bytes)"( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/MPond.d.ts b/libs/chains/src/eth/types/MPond.d.ts deleted file mode 100644 index 0e21b2c8fb0..00000000000 --- a/libs/chains/src/eth/types/MPond.d.ts +++ /dev/null @@ -1,1682 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface MPondInterface extends ethers.utils.Interface { - functions: { - "DELEGATION_TYPEHASH()": FunctionFragment; - "DOMAIN_TYPEHASH()": FunctionFragment; - "UNDELEGATION_TYPEHASH()": FunctionFragment; - "addWhiteListAddress(address)": FunctionFragment; - "admin()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "bridgeSupply()": FunctionFragment; - "checkpoints(address,uint32)": FunctionFragment; - "decimals()": FunctionFragment; - "delegate(address,uint96)": FunctionFragment; - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)": FunctionFragment; - "delegates(address,address)": FunctionFragment; - "enableAllTranfers()": FunctionFragment; - "enableAllTransfers()": FunctionFragment; - "getCurrentVotes(address)": FunctionFragment; - "getPriorVotes(address,uint256)": FunctionFragment; - "isWhiteListed(address)": FunctionFragment; - "isWhiteListedTransfer(address,address)": FunctionFragment; - "name()": FunctionFragment; - "nonces(address)": FunctionFragment; - "numCheckpoints(address)": FunctionFragment; - "symbol()": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "undelegate(address,uint96)": FunctionFragment; - "undelegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DELEGATION_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "DOMAIN_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "UNDELEGATION_TYPEHASH", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "addWhiteListAddress", - values: [string] - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "bridgeSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "checkpoints", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "delegate", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "delegateBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "delegates", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "enableAllTranfers", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "enableAllTransfers", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getCurrentVotes", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "getPriorVotes", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isWhiteListed", - values: [string] - ): string; - encodeFunctionData( - functionFragment: "isWhiteListedTransfer", - values: [string, string] - ): string; - encodeFunctionData(functionFragment: "name", values?: undefined): string; - encodeFunctionData(functionFragment: "nonces", values: [string]): string; - encodeFunctionData( - functionFragment: "numCheckpoints", - values: [string] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "undelegate", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "undelegateBySig", - values: [ - string, - BigNumberish, - BigNumberish, - BigNumberish, - BytesLike, - BytesLike, - BigNumberish - ] - ): string; - - decodeFunctionResult( - functionFragment: "DELEGATION_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "DOMAIN_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "UNDELEGATION_TYPEHASH", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "addWhiteListAddress", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "bridgeSupply", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "checkpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "delegateBySig", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delegates", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "enableAllTranfers", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "enableAllTransfers", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getCurrentVotes", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPriorVotes", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isWhiteListed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isWhiteListedTransfer", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "numCheckpoints", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "undelegate", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "undelegateBySig", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "DelegateChanged(address,address,address)": EventFragment; - "DelegateVotesChanged(address,uint256,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "DelegateVotesChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class MPond extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: MPondInterface; - - functions: { - DELEGATION_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DELEGATION_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - UNDELEGATION_TYPEHASH(overrides?: CallOverrides): Promise<[string]>; - - "UNDELEGATION_TYPEHASH()"(overrides?: CallOverrides): Promise<[string]>; - - addWhiteListAddress( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addWhiteListAddress(address)"( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - bridgeSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "bridgeSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - "checkpoints(address,uint32)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise<[number]>; - - "decimals()"(overrides?: CallOverrides): Promise<[number]>; - - delegate( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "delegates(address,address)"( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - enableAllTranfers(overrides?: CallOverrides): Promise<[boolean]>; - - "enableAllTranfers()"(overrides?: CallOverrides): Promise<[boolean]>; - - enableAllTransfers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "enableAllTransfers()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - isWhiteListed(arg0: string, overrides?: CallOverrides): Promise<[boolean]>; - - "isWhiteListed(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isWhiteListedTransfer( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isWhiteListedTransfer(address,address)"( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - name(overrides?: CallOverrides): Promise<[string]>; - - "name()"(overrides?: CallOverrides): Promise<[string]>; - - nonces(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - numCheckpoints(arg0: string, overrides?: CallOverrides): Promise<[number]>; - - "numCheckpoints(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise<[number]>; - - symbol(overrides?: CallOverrides): Promise<[string]>; - - "symbol()"(overrides?: CallOverrides): Promise<[string]>; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - undelegate( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "undelegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - undelegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "undelegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DELEGATION_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATION_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - UNDELEGATION_TYPEHASH(overrides?: CallOverrides): Promise; - - "UNDELEGATION_TYPEHASH()"(overrides?: CallOverrides): Promise; - - addWhiteListAddress( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addWhiteListAddress(address)"( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - bridgeSupply(overrides?: CallOverrides): Promise; - - "bridgeSupply()"(overrides?: CallOverrides): Promise; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - "checkpoints(address,uint32)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - delegate( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - "delegates(address,address)"( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - enableAllTranfers(overrides?: CallOverrides): Promise; - - "enableAllTranfers()"(overrides?: CallOverrides): Promise; - - enableAllTransfers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "enableAllTransfers()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isWhiteListed(arg0: string, overrides?: CallOverrides): Promise; - - "isWhiteListed(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - isWhiteListedTransfer( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise; - - "isWhiteListedTransfer(address,address)"( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(arg0: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints(arg0: string, overrides?: CallOverrides): Promise; - - "numCheckpoints(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - undelegate( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "undelegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - undelegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "undelegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DELEGATION_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATION_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - UNDELEGATION_TYPEHASH(overrides?: CallOverrides): Promise; - - "UNDELEGATION_TYPEHASH()"(overrides?: CallOverrides): Promise; - - addWhiteListAddress( - _address: string, - overrides?: CallOverrides - ): Promise; - - "addWhiteListAddress(address)"( - _address: string, - overrides?: CallOverrides - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - rawAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - bridgeSupply(overrides?: CallOverrides): Promise; - - "bridgeSupply()"(overrides?: CallOverrides): Promise; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - "checkpoints(address,uint32)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise<[number, BigNumber] & { fromBlock: number; votes: BigNumber }>; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - delegate( - delegatee: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "delegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delegates( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - "delegates(address,address)"( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - enableAllTranfers(overrides?: CallOverrides): Promise; - - "enableAllTranfers()"(overrides?: CallOverrides): Promise; - - enableAllTransfers(overrides?: CallOverrides): Promise; - - "enableAllTransfers()"(overrides?: CallOverrides): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isWhiteListed(arg0: string, overrides?: CallOverrides): Promise; - - "isWhiteListed(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - isWhiteListedTransfer( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise; - - "isWhiteListedTransfer(address,address)"( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(arg0: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints(arg0: string, overrides?: CallOverrides): Promise; - - "numCheckpoints(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - dst: string, - rawAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - undelegate( - delegatee: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "undelegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - undelegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "undelegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - amount: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; amount: BigNumber } - >; - - DelegateChanged( - delegator: string | null, - fromDelegate: string | null, - toDelegate: string | null - ): TypedEventFilter< - [string, string, string], - { delegator: string; fromDelegate: string; toDelegate: string } - >; - - DelegateVotesChanged( - delegate: string | null, - previousBalance: null, - newBalance: null - ): TypedEventFilter< - [string, BigNumber, BigNumber], - { delegate: string; previousBalance: BigNumber; newBalance: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - amount: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; amount: BigNumber } - >; - }; - - estimateGas: { - DELEGATION_TYPEHASH(overrides?: CallOverrides): Promise; - - "DELEGATION_TYPEHASH()"(overrides?: CallOverrides): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"(overrides?: CallOverrides): Promise; - - UNDELEGATION_TYPEHASH(overrides?: CallOverrides): Promise; - - "UNDELEGATION_TYPEHASH()"(overrides?: CallOverrides): Promise; - - addWhiteListAddress( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addWhiteListAddress(address)"( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(account: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - bridgeSupply(overrides?: CallOverrides): Promise; - - "bridgeSupply()"(overrides?: CallOverrides): Promise; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "checkpoints(address,uint32)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - delegate( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - "delegates(address,address)"( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - enableAllTranfers(overrides?: CallOverrides): Promise; - - "enableAllTranfers()"(overrides?: CallOverrides): Promise; - - enableAllTransfers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "enableAllTransfers()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isWhiteListed(arg0: string, overrides?: CallOverrides): Promise; - - "isWhiteListed(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - isWhiteListedTransfer( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise; - - "isWhiteListedTransfer(address,address)"( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces(arg0: string, overrides?: CallOverrides): Promise; - - "nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints(arg0: string, overrides?: CallOverrides): Promise; - - "numCheckpoints(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - undelegate( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "undelegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - undelegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "undelegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DELEGATION_TYPEHASH( - overrides?: CallOverrides - ): Promise; - - "DELEGATION_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - DOMAIN_TYPEHASH(overrides?: CallOverrides): Promise; - - "DOMAIN_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - UNDELEGATION_TYPEHASH( - overrides?: CallOverrides - ): Promise; - - "UNDELEGATION_TYPEHASH()"( - overrides?: CallOverrides - ): Promise; - - addWhiteListAddress( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "addWhiteListAddress(address)"( - _address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - allowance( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - account: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - account: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - bridgeSupply(overrides?: CallOverrides): Promise; - - "bridgeSupply()"(overrides?: CallOverrides): Promise; - - checkpoints( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "checkpoints(address,uint32)"( - arg0: string, - arg1: BigNumberish, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - - "decimals()"(overrides?: CallOverrides): Promise; - - delegate( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delegates( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - "delegates(address,address)"( - arg0: string, - arg1: string, - overrides?: CallOverrides - ): Promise; - - enableAllTranfers(overrides?: CallOverrides): Promise; - - "enableAllTranfers()"( - overrides?: CallOverrides - ): Promise; - - enableAllTransfers( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "enableAllTransfers()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - getCurrentVotes( - account: string, - overrides?: CallOverrides - ): Promise; - - "getCurrentVotes(address)"( - account: string, - overrides?: CallOverrides - ): Promise; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isWhiteListed( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "isWhiteListed(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - isWhiteListedTransfer( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise; - - "isWhiteListedTransfer(address,address)"( - _address1: string, - _address2: string, - overrides?: CallOverrides - ): Promise; - - name(overrides?: CallOverrides): Promise; - - "name()"(overrides?: CallOverrides): Promise; - - nonces( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "nonces(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - numCheckpoints( - arg0: string, - overrides?: CallOverrides - ): Promise; - - "numCheckpoints(address)"( - arg0: string, - overrides?: CallOverrides - ): Promise; - - symbol(overrides?: CallOverrides): Promise; - - "symbol()"(overrides?: CallOverrides): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - src: string, - dst: string, - rawAmount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - undelegate( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "undelegate(address,uint96)"( - delegatee: string, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - undelegateBySig( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "undelegateBySig(address,uint256,uint256,uint8,bytes32,bytes32,uint96)"( - delegatee: string, - nonce: BigNumberish, - expiry: BigNumberish, - v: BigNumberish, - r: BytesLike, - s: BytesLike, - amount: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/MPondInterface.d.ts b/libs/chains/src/eth/types/MPondInterface.d.ts deleted file mode 100644 index 62354ece0ca..00000000000 --- a/libs/chains/src/eth/types/MPondInterface.d.ts +++ /dev/null @@ -1,150 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface MPondInterfaceInterface extends ethers.utils.Interface { - functions: { - "getPriorVotes(address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "getPriorVotes", - values: [string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "getPriorVotes", - data: BytesLike - ): Result; - - events: {}; -} - -export class MPondInterface extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: MPondInterfaceInterface; - - functions: { - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - }; - - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - getPriorVotes( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getPriorVotes(address,uint256)"( - account: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/Migrations.d.ts b/libs/chains/src/eth/types/Migrations.d.ts deleted file mode 100644 index 7eace0d9828..00000000000 --- a/libs/chains/src/eth/types/Migrations.d.ts +++ /dev/null @@ -1,250 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface MigrationsInterface extends ethers.utils.Interface { - functions: { - "last_completed_migration()": FunctionFragment; - "owner()": FunctionFragment; - "setCompleted(uint256)": FunctionFragment; - "upgrade(address)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "last_completed_migration", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "setCompleted", - values: [BigNumberish] - ): string; - encodeFunctionData(functionFragment: "upgrade", values: [string]): string; - - decodeFunctionResult( - functionFragment: "last_completed_migration", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setCompleted", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "upgrade", data: BytesLike): Result; - - events: {}; -} - -export class Migrations extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: MigrationsInterface; - - functions: { - last_completed_migration(overrides?: CallOverrides): Promise<[BigNumber]>; - - "last_completed_migration()"( - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - owner(overrides?: CallOverrides): Promise<[string]>; - - "owner()"(overrides?: CallOverrides): Promise<[string]>; - - setCompleted( - completed: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setCompleted(uint256)"( - completed: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgrade( - new_address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgrade(address)"( - new_address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - last_completed_migration(overrides?: CallOverrides): Promise; - - "last_completed_migration()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - setCompleted( - completed: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setCompleted(uint256)"( - completed: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgrade( - new_address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgrade(address)"( - new_address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - last_completed_migration(overrides?: CallOverrides): Promise; - - "last_completed_migration()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - setCompleted( - completed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "setCompleted(uint256)"( - completed: BigNumberish, - overrides?: CallOverrides - ): Promise; - - upgrade(new_address: string, overrides?: CallOverrides): Promise; - - "upgrade(address)"( - new_address: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - last_completed_migration(overrides?: CallOverrides): Promise; - - "last_completed_migration()"(overrides?: CallOverrides): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - setCompleted( - completed: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setCompleted(uint256)"( - completed: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgrade( - new_address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgrade(address)"( - new_address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - last_completed_migration( - overrides?: CallOverrides - ): Promise; - - "last_completed_migration()"( - overrides?: CallOverrides - ): Promise; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - setCompleted( - completed: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setCompleted(uint256)"( - completed: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - upgrade( - new_address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "upgrade(address)"( - new_address: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/Ownable.d.ts b/libs/chains/src/eth/types/Ownable.d.ts deleted file mode 100644 index d6956cdc6a7..00000000000 --- a/libs/chains/src/eth/types/Ownable.d.ts +++ /dev/null @@ -1,221 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface OwnableInterface extends ethers.utils.Interface { - functions: { - "owner()": FunctionFragment; - "renounceOwnership()": FunctionFragment; - "transferOwnership(address)": FunctionFragment; - }; - - encodeFunctionData(functionFragment: "owner", values?: undefined): string; - encodeFunctionData( - functionFragment: "renounceOwnership", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transferOwnership", - values: [string] - ): string; - - decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "renounceOwnership", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "transferOwnership", - data: BytesLike - ): Result; - - events: { - "OwnershipTransferred(address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; -} - -export class Ownable extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: OwnableInterface; - - functions: { - owner(overrides?: CallOverrides): Promise<[string]>; - - "owner()"(overrides?: CallOverrides): Promise<[string]>; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership(overrides?: CallOverrides): Promise; - - "renounceOwnership()"(overrides?: CallOverrides): Promise; - - transferOwnership( - newOwner: string, - overrides?: CallOverrides - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - OwnershipTransferred( - previousOwner: string | null, - newOwner: string | null - ): TypedEventFilter< - [string, string], - { previousOwner: string; newOwner: string } - >; - }; - - estimateGas: { - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - owner(overrides?: CallOverrides): Promise; - - "owner()"(overrides?: CallOverrides): Promise; - - renounceOwnership( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceOwnership()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferOwnership( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferOwnership(address)"( - newOwner: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/ProposalValidator.d.ts b/libs/chains/src/eth/types/ProposalValidator.d.ts deleted file mode 100644 index fc30a8a5507..00000000000 --- a/libs/chains/src/eth/types/ProposalValidator.d.ts +++ /dev/null @@ -1,818 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ProposalValidatorInterface extends ethers.utils.Interface { - functions: { - "MINIMUM_QUORUM()": FunctionFragment; - "ONE_HUNDRED_WITH_PRECISION()": FunctionFragment; - "PROPOSITION_THRESHOLD()": FunctionFragment; - "VOTE_DIFFERENTIAL()": FunctionFragment; - "VOTING_DURATION()": FunctionFragment; - "getMinimumPropositionPowerNeeded(address,uint256)": FunctionFragment; - "getMinimumVotingPowerNeeded(uint256)": FunctionFragment; - "isProposalPassed(address,uint256)": FunctionFragment; - "isPropositionPowerEnough(address,address,uint256)": FunctionFragment; - "isQuorumValid(address,uint256)": FunctionFragment; - "isVoteDifferentialValid(address,uint256)": FunctionFragment; - "validateCreatorOfProposal(address,address,uint256)": FunctionFragment; - "validateProposalCancellation(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "MINIMUM_QUORUM", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "ONE_HUNDRED_WITH_PRECISION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "PROPOSITION_THRESHOLD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "VOTE_DIFFERENTIAL", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "VOTING_DURATION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getMinimumPropositionPowerNeeded", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "getMinimumVotingPowerNeeded", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isProposalPassed", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isPropositionPowerEnough", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isQuorumValid", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "isVoteDifferentialValid", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "validateCreatorOfProposal", - values: [string, string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "validateProposalCancellation", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "MINIMUM_QUORUM", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "ONE_HUNDRED_WITH_PRECISION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "PROPOSITION_THRESHOLD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "VOTE_DIFFERENTIAL", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "VOTING_DURATION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getMinimumPropositionPowerNeeded", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getMinimumVotingPowerNeeded", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isProposalPassed", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isPropositionPowerEnough", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isQuorumValid", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isVoteDifferentialValid", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateCreatorOfProposal", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "validateProposalCancellation", - data: BytesLike - ): Result; - - events: {}; -} - -export class ProposalValidator extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ProposalValidatorInterface; - - functions: { - MINIMUM_QUORUM(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise<[BigNumber]>; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - VOTING_DURATION(overrides?: CallOverrides): Promise<[BigNumber]>; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"(overrides?: CallOverrides): Promise; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - callStatic: { - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"(overrides?: CallOverrides): Promise; - - ONE_HUNDRED_WITH_PRECISION(overrides?: CallOverrides): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - PROPOSITION_THRESHOLD(overrides?: CallOverrides): Promise; - - "PROPOSITION_THRESHOLD()"(overrides?: CallOverrides): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"(overrides?: CallOverrides): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"(overrides?: CallOverrides): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - MINIMUM_QUORUM(overrides?: CallOverrides): Promise; - - "MINIMUM_QUORUM()"( - overrides?: CallOverrides - ): Promise; - - ONE_HUNDRED_WITH_PRECISION( - overrides?: CallOverrides - ): Promise; - - "ONE_HUNDRED_WITH_PRECISION()"( - overrides?: CallOverrides - ): Promise; - - PROPOSITION_THRESHOLD( - overrides?: CallOverrides - ): Promise; - - "PROPOSITION_THRESHOLD()"( - overrides?: CallOverrides - ): Promise; - - VOTE_DIFFERENTIAL(overrides?: CallOverrides): Promise; - - "VOTE_DIFFERENTIAL()"( - overrides?: CallOverrides - ): Promise; - - VOTING_DURATION(overrides?: CallOverrides): Promise; - - "VOTING_DURATION()"( - overrides?: CallOverrides - ): Promise; - - getMinimumPropositionPowerNeeded( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumPropositionPowerNeeded(address,uint256)"( - governance: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - getMinimumVotingPowerNeeded( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "getMinimumVotingPowerNeeded(uint256)"( - votingSupply: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isProposalPassed( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isProposalPassed(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isPropositionPowerEnough( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isPropositionPowerEnough(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isQuorumValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isQuorumValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - isVoteDifferentialValid( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "isVoteDifferentialValid(address,uint256)"( - governance: string, - proposalId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateCreatorOfProposal( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateCreatorOfProposal(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - validateProposalCancellation( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "validateProposalCancellation(address,address,uint256)"( - governance: string, - user: string, - blockNumber: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/Proxy.d.ts b/libs/chains/src/eth/types/Proxy.d.ts deleted file mode 100644 index 12c9bd5fbac..00000000000 --- a/libs/chains/src/eth/types/Proxy.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer} from "ethers"; -import { - Contract, -} from "ethers"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface ProxyInterface extends ethers.utils.Interface { - functions: {}; - - events: {}; -} - -export class Proxy extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: ProxyInterface; - - functions: {}; - - callStatic: {}; - - filters: {}; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/libs/chains/src/eth/types/SelfdestructTransfer.d.ts b/libs/chains/src/eth/types/SelfdestructTransfer.d.ts deleted file mode 100644 index 9aed71708e1..00000000000 --- a/libs/chains/src/eth/types/SelfdestructTransfer.d.ts +++ /dev/null @@ -1,138 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - PopulatedTransaction, - ContractTransaction, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface SelfdestructTransferInterface extends ethers.utils.Interface { - functions: { - "destroyAndTransfer(address)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "destroyAndTransfer", - values: [string] - ): string; - - decodeFunctionResult( - functionFragment: "destroyAndTransfer", - data: BytesLike - ): Result; - - events: {}; -} - -export class SelfdestructTransfer extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: SelfdestructTransferInterface; - - functions: { - destroyAndTransfer( - to: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "destroyAndTransfer(address)"( - to: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; - - destroyAndTransfer( - to: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "destroyAndTransfer(address)"( - to: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - callStatic: { - destroyAndTransfer(to: string, overrides?: CallOverrides): Promise; - - "destroyAndTransfer(address)"( - to: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - destroyAndTransfer( - to: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "destroyAndTransfer(address)"( - to: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - destroyAndTransfer( - to: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "destroyAndTransfer(address)"( - to: string, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/Timelock.d.ts b/libs/chains/src/eth/types/Timelock.d.ts deleted file mode 100644 index e57a8917dc6..00000000000 --- a/libs/chains/src/eth/types/Timelock.d.ts +++ /dev/null @@ -1,842 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface TimelockInterface extends ethers.utils.Interface { - functions: { - "GRACE_PERIOD()": FunctionFragment; - "MAXIMUM_DELAY()": FunctionFragment; - "MINIMUM_DELAY()": FunctionFragment; - "acceptAdmin()": FunctionFragment; - "admin()": FunctionFragment; - "cancelTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "delay()": FunctionFragment; - "executeTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "pendingAdmin()": FunctionFragment; - "queueTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "queuedTransactions(bytes32)": FunctionFragment; - "setDelay(uint256)": FunctionFragment; - "setPendingAdmin(address)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "GRACE_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAXIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MINIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "acceptAdmin", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "cancelTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delay", values?: undefined): string; - encodeFunctionData( - functionFragment: "executeTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "pendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "queueTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queuedTransactions", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "setDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setPendingAdmin", - values: [string] - ): string; - - decodeFunctionResult( - functionFragment: "GRACE_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAXIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MINIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "cancelTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "pendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queueTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queuedTransactions", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setDelay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setPendingAdmin", - data: BytesLike - ): Result; - - events: { - "CancelTransaction(bytes32,address,uint256,string,bytes,uint256)": EventFragment; - "ExecuteTransaction(bytes32,address,uint256,string,bytes,uint256)": EventFragment; - "NewAdmin(address)": EventFragment; - "NewDelay(uint256)": EventFragment; - "NewPendingAdmin(address)": EventFragment; - "QueueTransaction(bytes32,address,uint256,string,bytes,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "CancelTransaction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteTransaction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewDelay"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "QueueTransaction"): EventFragment; -} - -export class Timelock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: TimelockInterface; - - functions: { - GRACE_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "delay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "pendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - setDelay( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin(overrides?: CallOverrides): Promise; - - "acceptAdmin()"(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay(delay_: BigNumberish, overrides?: CallOverrides): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: CallOverrides - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - CancelTransaction( - txHash: BytesLike | null, - target: string | null, - value: null, - signature: null, - data: null, - eta: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber], - { - txHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - eta: BigNumber; - } - >; - - ExecuteTransaction( - txHash: BytesLike | null, - target: string | null, - value: null, - signature: null, - data: null, - eta: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber], - { - txHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - eta: BigNumber; - } - >; - - NewAdmin( - newAdmin: string | null - ): TypedEventFilter<[string], { newAdmin: string }>; - - NewDelay( - newDelay: BigNumberish | null - ): TypedEventFilter<[BigNumber], { newDelay: BigNumber }>; - - NewPendingAdmin( - newPendingAdmin: string | null - ): TypedEventFilter<[string], { newPendingAdmin: string }>; - - QueueTransaction( - txHash: BytesLike | null, - target: string | null, - value: null, - signature: null, - data: null, - eta: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber], - { - txHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - eta: BigNumber; - } - >; - }; - - estimateGas: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/TimelockController.d.ts b/libs/chains/src/eth/types/TimelockController.d.ts deleted file mode 100644 index d73aea97fd5..00000000000 --- a/libs/chains/src/eth/types/TimelockController.d.ts +++ /dev/null @@ -1,1704 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface TimelockControllerInterface extends ethers.utils.Interface { - functions: { - "DEFAULT_ADMIN_ROLE()": FunctionFragment; - "EXECUTOR_ROLE()": FunctionFragment; - "PROPOSER_ROLE()": FunctionFragment; - "TIMELOCK_ADMIN_ROLE()": FunctionFragment; - "cancel(bytes32)": FunctionFragment; - "execute(address,uint256,bytes,bytes32,bytes32)": FunctionFragment; - "executeBatch(address[],uint256[],bytes[],bytes32,bytes32)": FunctionFragment; - "getMinDelay()": FunctionFragment; - "getRoleAdmin(bytes32)": FunctionFragment; - "getTimestamp(bytes32)": FunctionFragment; - "grantRole(bytes32,address)": FunctionFragment; - "hasRole(bytes32,address)": FunctionFragment; - "hashOperation(address,uint256,bytes,bytes32,bytes32)": FunctionFragment; - "hashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32)": FunctionFragment; - "isOperation(bytes32)": FunctionFragment; - "isOperationDone(bytes32)": FunctionFragment; - "isOperationPending(bytes32)": FunctionFragment; - "isOperationReady(bytes32)": FunctionFragment; - "renounceRole(bytes32,address)": FunctionFragment; - "revokeRole(bytes32,address)": FunctionFragment; - "schedule(address,uint256,bytes,bytes32,bytes32,uint256)": FunctionFragment; - "scheduleBatch(address[],uint256[],bytes[],bytes32,bytes32,uint256)": FunctionFragment; - "supportsInterface(bytes4)": FunctionFragment; - "updateDelay(uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "DEFAULT_ADMIN_ROLE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "EXECUTOR_ROLE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "PROPOSER_ROLE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "TIMELOCK_ADMIN_ROLE", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "cancel", values: [BytesLike]): string; - encodeFunctionData( - functionFragment: "execute", - values: [string, BigNumberish, BytesLike, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "executeBatch", - values: [string[], BigNumberish[], BytesLike[], BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getMinDelay", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getRoleAdmin", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "getTimestamp", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "grantRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "hasRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "hashOperation", - values: [string, BigNumberish, BytesLike, BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "hashOperationBatch", - values: [string[], BigNumberish[], BytesLike[], BytesLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "isOperation", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "isOperationDone", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "isOperationPending", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "isOperationReady", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "renounceRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "revokeRole", - values: [BytesLike, string] - ): string; - encodeFunctionData( - functionFragment: "schedule", - values: [ - string, - BigNumberish, - BytesLike, - BytesLike, - BytesLike, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "scheduleBatch", - values: [ - string[], - BigNumberish[], - BytesLike[], - BytesLike, - BytesLike, - BigNumberish - ] - ): string; - encodeFunctionData( - functionFragment: "supportsInterface", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "updateDelay", - values: [BigNumberish] - ): string; - - decodeFunctionResult( - functionFragment: "DEFAULT_ADMIN_ROLE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "EXECUTOR_ROLE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "PROPOSER_ROLE", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "TIMELOCK_ADMIN_ROLE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "cancel", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeBatch", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getMinDelay", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRoleAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getTimestamp", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "hashOperation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "hashOperationBatch", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isOperation", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isOperationDone", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isOperationPending", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "isOperationReady", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "renounceRole", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "schedule", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "scheduleBatch", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "supportsInterface", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "updateDelay", - data: BytesLike - ): Result; - - events: { - "CallExecuted(bytes32,uint256,address,uint256,bytes)": EventFragment; - "CallScheduled(bytes32,uint256,address,uint256,bytes,bytes32,uint256)": EventFragment; - "Cancelled(bytes32)": EventFragment; - "MinDelayChange(uint256,uint256)": EventFragment; - "RoleAdminChanged(bytes32,bytes32,bytes32)": EventFragment; - "RoleGranted(bytes32,address,address)": EventFragment; - "RoleRevoked(bytes32,address,address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "CallExecuted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "CallScheduled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Cancelled"): EventFragment; - getEvent(nameOrSignatureOrTopic: "MinDelayChange"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RoleAdminChanged"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RoleGranted"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RoleRevoked"): EventFragment; -} - -export class TimelockController extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: TimelockControllerInterface; - - functions: { - DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<[string]>; - - "DEFAULT_ADMIN_ROLE()"(overrides?: CallOverrides): Promise<[string]>; - - EXECUTOR_ROLE(overrides?: CallOverrides): Promise<[string]>; - - "EXECUTOR_ROLE()"(overrides?: CallOverrides): Promise<[string]>; - - PROPOSER_ROLE(overrides?: CallOverrides): Promise<[string]>; - - "PROPOSER_ROLE()"(overrides?: CallOverrides): Promise<[string]>; - - TIMELOCK_ADMIN_ROLE(overrides?: CallOverrides): Promise<[string]>; - - "TIMELOCK_ADMIN_ROLE()"(overrides?: CallOverrides): Promise<[string]>; - - cancel( - id: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(bytes32)"( - id: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - executeBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getMinDelay( - overrides?: CallOverrides - ): Promise<[BigNumber] & { duration: BigNumber }>; - - "getMinDelay()"( - overrides?: CallOverrides - ): Promise<[BigNumber] & { duration: BigNumber }>; - - getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise<[string]>; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise<[string]>; - - getTimestamp( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber] & { timestamp: BigNumber }>; - - "getTimestamp(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[BigNumber] & { timestamp: BigNumber }>; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise<[boolean]>; - - hashOperation( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise<[string] & { hash: string }>; - - "hashOperation(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise<[string] & { hash: string }>; - - hashOperationBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise<[string] & { hash: string }>; - - "hashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise<[string] & { hash: string }>; - - isOperation( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean] & { pending: boolean }>; - - "isOperation(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean] & { pending: boolean }>; - - isOperationDone( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean] & { done: boolean }>; - - "isOperationDone(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean] & { done: boolean }>; - - isOperationPending( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean] & { pending: boolean }>; - - "isOperationPending(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean] & { pending: boolean }>; - - isOperationReady( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean] & { ready: boolean }>; - - "isOperationReady(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean] & { ready: boolean }>; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - schedule( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "schedule(address,uint256,bytes,bytes32,bytes32,uint256)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - scheduleBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "scheduleBatch(address[],uint256[],bytes[],bytes32,bytes32,uint256)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - updateDelay( - newDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateDelay(uint256)"( - newDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; - - "DEFAULT_ADMIN_ROLE()"(overrides?: CallOverrides): Promise; - - EXECUTOR_ROLE(overrides?: CallOverrides): Promise; - - "EXECUTOR_ROLE()"(overrides?: CallOverrides): Promise; - - PROPOSER_ROLE(overrides?: CallOverrides): Promise; - - "PROPOSER_ROLE()"(overrides?: CallOverrides): Promise; - - TIMELOCK_ADMIN_ROLE(overrides?: CallOverrides): Promise; - - "TIMELOCK_ADMIN_ROLE()"(overrides?: CallOverrides): Promise; - - cancel( - id: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(bytes32)"( - id: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - executeBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getMinDelay(overrides?: CallOverrides): Promise; - - "getMinDelay()"(overrides?: CallOverrides): Promise; - - getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - getTimestamp(id: BytesLike, overrides?: CallOverrides): Promise; - - "getTimestamp(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - hashOperation( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashOperation(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - hashOperationBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperation(id: BytesLike, overrides?: CallOverrides): Promise; - - "isOperation(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationDone(id: BytesLike, overrides?: CallOverrides): Promise; - - "isOperationDone(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationPending( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperationPending(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationReady(id: BytesLike, overrides?: CallOverrides): Promise; - - "isOperationReady(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - schedule( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "schedule(address,uint256,bytes,bytes32,bytes32,uint256)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - scheduleBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "scheduleBatch(address[],uint256[],bytes[],bytes32,bytes32,uint256)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - updateDelay( - newDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateDelay(uint256)"( - newDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; - - "DEFAULT_ADMIN_ROLE()"(overrides?: CallOverrides): Promise; - - EXECUTOR_ROLE(overrides?: CallOverrides): Promise; - - "EXECUTOR_ROLE()"(overrides?: CallOverrides): Promise; - - PROPOSER_ROLE(overrides?: CallOverrides): Promise; - - "PROPOSER_ROLE()"(overrides?: CallOverrides): Promise; - - TIMELOCK_ADMIN_ROLE(overrides?: CallOverrides): Promise; - - "TIMELOCK_ADMIN_ROLE()"(overrides?: CallOverrides): Promise; - - cancel(id: BytesLike, overrides?: CallOverrides): Promise; - - "cancel(bytes32)"(id: BytesLike, overrides?: CallOverrides): Promise; - - execute( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "execute(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - executeBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "executeBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - getMinDelay(overrides?: CallOverrides): Promise; - - "getMinDelay()"(overrides?: CallOverrides): Promise; - - getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - getTimestamp(id: BytesLike, overrides?: CallOverrides): Promise; - - "getTimestamp(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - hashOperation( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashOperation(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - hashOperationBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperation(id: BytesLike, overrides?: CallOverrides): Promise; - - "isOperation(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationDone(id: BytesLike, overrides?: CallOverrides): Promise; - - "isOperationDone(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationPending( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperationPending(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationReady( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperationReady(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - schedule( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "schedule(address,uint256,bytes,bytes32,bytes32,uint256)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - scheduleBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "scheduleBatch(address[],uint256[],bytes[],bytes32,bytes32,uint256)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - updateDelay( - newDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "updateDelay(uint256)"( - newDelay: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - CallExecuted( - id: BytesLike | null, - index: BigNumberish | null, - target: null, - value: null, - data: null - ): TypedEventFilter< - [string, BigNumber, string, BigNumber, string], - { - id: string; - index: BigNumber; - target: string; - value: BigNumber; - data: string; - } - >; - - CallScheduled( - id: BytesLike | null, - index: BigNumberish | null, - target: null, - value: null, - data: null, - predecessor: null, - delay: null - ): TypedEventFilter< - [string, BigNumber, string, BigNumber, string, string, BigNumber], - { - id: string; - index: BigNumber; - target: string; - value: BigNumber; - data: string; - predecessor: string; - delay: BigNumber; - } - >; - - Cancelled(id: BytesLike | null): TypedEventFilter<[string], { id: string }>; - - MinDelayChange( - oldDuration: null, - newDuration: null - ): TypedEventFilter< - [BigNumber, BigNumber], - { oldDuration: BigNumber; newDuration: BigNumber } - >; - - RoleAdminChanged( - role: BytesLike | null, - previousAdminRole: BytesLike | null, - newAdminRole: BytesLike | null - ): TypedEventFilter< - [string, string, string], - { role: string; previousAdminRole: string; newAdminRole: string } - >; - - RoleGranted( - role: BytesLike | null, - account: string | null, - sender: string | null - ): TypedEventFilter< - [string, string, string], - { role: string; account: string; sender: string } - >; - - RoleRevoked( - role: BytesLike | null, - account: string | null, - sender: string | null - ): TypedEventFilter< - [string, string, string], - { role: string; account: string; sender: string } - >; - }; - - estimateGas: { - DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; - - "DEFAULT_ADMIN_ROLE()"(overrides?: CallOverrides): Promise; - - EXECUTOR_ROLE(overrides?: CallOverrides): Promise; - - "EXECUTOR_ROLE()"(overrides?: CallOverrides): Promise; - - PROPOSER_ROLE(overrides?: CallOverrides): Promise; - - "PROPOSER_ROLE()"(overrides?: CallOverrides): Promise; - - TIMELOCK_ADMIN_ROLE(overrides?: CallOverrides): Promise; - - "TIMELOCK_ADMIN_ROLE()"(overrides?: CallOverrides): Promise; - - cancel( - id: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(bytes32)"( - id: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - executeBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getMinDelay(overrides?: CallOverrides): Promise; - - "getMinDelay()"(overrides?: CallOverrides): Promise; - - getRoleAdmin( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - getTimestamp(id: BytesLike, overrides?: CallOverrides): Promise; - - "getTimestamp(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - hashOperation( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashOperation(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - hashOperationBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperation(id: BytesLike, overrides?: CallOverrides): Promise; - - "isOperation(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationDone( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperationDone(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationPending( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperationPending(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationReady( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperationReady(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - schedule( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "schedule(address,uint256,bytes,bytes32,bytes32,uint256)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - scheduleBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "scheduleBatch(address[],uint256[],bytes[],bytes32,bytes32,uint256)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - updateDelay( - newDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateDelay(uint256)"( - newDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - DEFAULT_ADMIN_ROLE( - overrides?: CallOverrides - ): Promise; - - "DEFAULT_ADMIN_ROLE()"( - overrides?: CallOverrides - ): Promise; - - EXECUTOR_ROLE(overrides?: CallOverrides): Promise; - - "EXECUTOR_ROLE()"(overrides?: CallOverrides): Promise; - - PROPOSER_ROLE(overrides?: CallOverrides): Promise; - - "PROPOSER_ROLE()"(overrides?: CallOverrides): Promise; - - TIMELOCK_ADMIN_ROLE( - overrides?: CallOverrides - ): Promise; - - "TIMELOCK_ADMIN_ROLE()"( - overrides?: CallOverrides - ): Promise; - - cancel( - id: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancel(bytes32)"( - id: BytesLike, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - execute( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "execute(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - executeBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - getMinDelay(overrides?: CallOverrides): Promise; - - "getMinDelay()"(overrides?: CallOverrides): Promise; - - getRoleAdmin( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getRoleAdmin(bytes32)"( - role: BytesLike, - overrides?: CallOverrides - ): Promise; - - getTimestamp( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "getTimestamp(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - grantRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "grantRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - hasRole( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - "hasRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: CallOverrides - ): Promise; - - hashOperation( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashOperation(address,uint256,bytes,bytes32,bytes32)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - hashOperationBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - "hashOperationBatch(address[],uint256[],bytes[],bytes32,bytes32)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperation( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperation(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationDone( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperationDone(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationPending( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperationPending(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - isOperationReady( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - "isOperationReady(bytes32)"( - id: BytesLike, - overrides?: CallOverrides - ): Promise; - - renounceRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "renounceRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - revokeRole( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "revokeRole(bytes32,address)"( - role: BytesLike, - account: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - schedule( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "schedule(address,uint256,bytes,bytes32,bytes32,uint256)"( - target: string, - value: BigNumberish, - data: BytesLike, - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - scheduleBatch( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "scheduleBatch(address[],uint256[],bytes[],bytes32,bytes32,uint256)"( - targets: string[], - values: BigNumberish[], - datas: BytesLike[], - predecessor: BytesLike, - salt: BytesLike, - delay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - supportsInterface( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - "supportsInterface(bytes4)"( - interfaceId: BytesLike, - overrides?: CallOverrides - ): Promise; - - updateDelay( - newDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "updateDelay(uint256)"( - newDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/TimelockInterface.d.ts b/libs/chains/src/eth/types/TimelockInterface.d.ts deleted file mode 100644 index c15b1c680d9..00000000000 --- a/libs/chains/src/eth/types/TimelockInterface.d.ts +++ /dev/null @@ -1,537 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface TimelockInterfaceInterface extends ethers.utils.Interface { - functions: { - "GRACE_PERIOD()": FunctionFragment; - "acceptAdmin()": FunctionFragment; - "cancelTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "delay()": FunctionFragment; - "executeTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "queueTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "queuedTransactions(bytes32)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "GRACE_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "acceptAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "cancelTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delay", values?: undefined): string; - encodeFunctionData( - functionFragment: "executeTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queueTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queuedTransactions", - values: [BytesLike] - ): string; - - decodeFunctionResult( - functionFragment: "GRACE_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "cancelTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queueTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queuedTransactions", - data: BytesLike - ): Result; - - events: {}; -} - -export class TimelockInterface extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: TimelockInterfaceInterface; - - functions: { - GRACE_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "delay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - hash: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "queuedTransactions(bytes32)"( - hash: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - }; - - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - hash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - hash: BytesLike, - overrides?: CallOverrides - ): Promise; - - callStatic: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - acceptAdmin(overrides?: CallOverrides): Promise; - - "acceptAdmin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedTransactions( - hash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - hash: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - hash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - hash: BytesLike, - overrides?: CallOverrides - ): Promise; - }; - - populateTransaction: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - hash: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - hash: BytesLike, - overrides?: CallOverrides - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/TimelockMock.d.ts b/libs/chains/src/eth/types/TimelockMock.d.ts deleted file mode 100644 index 3daf4827fe9..00000000000 --- a/libs/chains/src/eth/types/TimelockMock.d.ts +++ /dev/null @@ -1,842 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - PayableOverrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface TimelockMockInterface extends ethers.utils.Interface { - functions: { - "GRACE_PERIOD()": FunctionFragment; - "MAXIMUM_DELAY()": FunctionFragment; - "MINIMUM_DELAY()": FunctionFragment; - "acceptAdmin()": FunctionFragment; - "admin()": FunctionFragment; - "cancelTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "delay()": FunctionFragment; - "executeTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "pendingAdmin()": FunctionFragment; - "queueTransaction(address,uint256,string,bytes,uint256)": FunctionFragment; - "queuedTransactions(bytes32)": FunctionFragment; - "setDelay(uint256)": FunctionFragment; - "setPendingAdmin(address)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "GRACE_PERIOD", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MAXIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "MINIMUM_DELAY", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "acceptAdmin", - values?: undefined - ): string; - encodeFunctionData(functionFragment: "admin", values?: undefined): string; - encodeFunctionData( - functionFragment: "cancelTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "delay", values?: undefined): string; - encodeFunctionData( - functionFragment: "executeTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "pendingAdmin", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "queueTransaction", - values: [string, BigNumberish, string, BytesLike, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "queuedTransactions", - values: [BytesLike] - ): string; - encodeFunctionData( - functionFragment: "setDelay", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "setPendingAdmin", - values: [string] - ): string; - - decodeFunctionResult( - functionFragment: "GRACE_PERIOD", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MAXIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "MINIMUM_DELAY", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "acceptAdmin", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "cancelTransaction", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "delay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "executeTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "pendingAdmin", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queueTransaction", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "queuedTransactions", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "setDelay", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "setPendingAdmin", - data: BytesLike - ): Result; - - events: { - "CancelTransaction(bytes32,address,uint256,string,bytes,uint256)": EventFragment; - "ExecuteTransaction(bytes32,address,uint256,string,bytes,uint256)": EventFragment; - "NewAdmin(address)": EventFragment; - "NewDelay(uint256)": EventFragment; - "NewPendingAdmin(address)": EventFragment; - "QueueTransaction(bytes32,address,uint256,string,bytes,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "CancelTransaction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "ExecuteTransaction"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewDelay"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NewPendingAdmin"): EventFragment; - getEvent(nameOrSignatureOrTopic: "QueueTransaction"): EventFragment; -} - -export class TimelockMock extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: TimelockMockInterface; - - functions: { - GRACE_PERIOD(overrides?: CallOverrides): Promise<[BigNumber]>; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise<[BigNumber]>; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise<[string]>; - - "admin()"(overrides?: CallOverrides): Promise<[string]>; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise<[BigNumber]>; - - "delay()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise<[string]>; - - "pendingAdmin()"(overrides?: CallOverrides): Promise<[string]>; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise<[boolean]>; - - setDelay( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin(overrides?: CallOverrides): Promise; - - "acceptAdmin()"(overrides?: CallOverrides): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: CallOverrides - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay(delay_: BigNumberish, overrides?: CallOverrides): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: CallOverrides - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: CallOverrides - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - CancelTransaction( - txHash: BytesLike | null, - target: string | null, - value: null, - signature: null, - data: null, - eta: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber], - { - txHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - eta: BigNumber; - } - >; - - ExecuteTransaction( - txHash: BytesLike | null, - target: string | null, - value: null, - signature: null, - data: null, - eta: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber], - { - txHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - eta: BigNumber; - } - >; - - NewAdmin( - newAdmin: string | null - ): TypedEventFilter<[string], { newAdmin: string }>; - - NewDelay( - newDelay: BigNumberish | null - ): TypedEventFilter<[BigNumber], { newDelay: BigNumber }>; - - NewPendingAdmin( - newPendingAdmin: string | null - ): TypedEventFilter<[string], { newPendingAdmin: string }>; - - QueueTransaction( - txHash: BytesLike | null, - target: string | null, - value: null, - signature: null, - data: null, - eta: null - ): TypedEventFilter< - [string, string, BigNumber, string, string, BigNumber], - { - txHash: string; - target: string; - value: BigNumber; - signature: string; - data: string; - eta: BigNumber; - } - >; - }; - - estimateGas: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - GRACE_PERIOD(overrides?: CallOverrides): Promise; - - "GRACE_PERIOD()"(overrides?: CallOverrides): Promise; - - MAXIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MAXIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - MINIMUM_DELAY(overrides?: CallOverrides): Promise; - - "MINIMUM_DELAY()"(overrides?: CallOverrides): Promise; - - acceptAdmin( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "acceptAdmin()"( - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - admin(overrides?: CallOverrides): Promise; - - "admin()"(overrides?: CallOverrides): Promise; - - cancelTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "cancelTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - delay(overrides?: CallOverrides): Promise; - - "delay()"(overrides?: CallOverrides): Promise; - - executeTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - "executeTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - - pendingAdmin(overrides?: CallOverrides): Promise; - - "pendingAdmin()"(overrides?: CallOverrides): Promise; - - queueTransaction( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "queueTransaction(address,uint256,string,bytes,uint256)"( - target: string, - value: BigNumberish, - signature: string, - data: BytesLike, - eta: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - queuedTransactions( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - "queuedTransactions(bytes32)"( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - - setDelay( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setDelay(uint256)"( - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - setPendingAdmin( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "setPendingAdmin(address)"( - pendingAdmin_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/Token.d.ts b/libs/chains/src/eth/types/Token.d.ts deleted file mode 100644 index e551abeb44e..00000000000 --- a/libs/chains/src/eth/types/Token.d.ts +++ /dev/null @@ -1,592 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer, - BigNumber, - BigNumberish, - PopulatedTransaction, - ContractTransaction, - Overrides, - CallOverrides} from "ethers"; -import { - Contract -} from "ethers"; -import type { BytesLike } from "@ethersproject/bytes"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface TokenInterface extends ethers.utils.Interface { - functions: { - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - }; - - encodeFunctionData( - functionFragment: "allowance", - values: [string, string] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [string, BigNumberish] - ): string; - encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [string, BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [string, string, BigNumberish] - ): string; - - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; -} - -export class Token extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: TokenInterface; - - functions: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - callStatic: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - Approval( - owner: string | null, - spender: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { owner: string; spender: string; value: BigNumber } - >; - - Transfer( - from: string | null, - to: string | null, - value: null - ): TypedEventFilter< - [string, string, BigNumber], - { from: string; to: string; value: BigNumber } - >; - }; - - estimateGas: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf(owner: string, overrides?: CallOverrides): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; - - populateTransaction: { - allowance( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - "allowance(address,address)"( - owner: string, - spender: string, - overrides?: CallOverrides - ): Promise; - - approve( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "approve(address,uint256)"( - spender: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - balanceOf( - owner: string, - overrides?: CallOverrides - ): Promise; - - "balanceOf(address)"( - owner: string, - overrides?: CallOverrides - ): Promise; - - decreaseAllowance( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "decreaseAllowance(address,uint256)"( - spender: string, - subtractedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - increaseAllowance( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "increaseAllowance(address,uint256)"( - spender: string, - addedValue: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - "totalSupply()"(overrides?: CallOverrides): Promise; - - transfer( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transfer(address,uint256)"( - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - transferFrom( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - - "transferFrom(address,address,uint256)"( - from: string, - to: string, - value: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise; - }; -} diff --git a/libs/chains/src/eth/types/UpgradeabilityProxy.d.ts b/libs/chains/src/eth/types/UpgradeabilityProxy.d.ts deleted file mode 100644 index 5ef7cbddbfc..00000000000 --- a/libs/chains/src/eth/types/UpgradeabilityProxy.d.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - ethers, - Signer} from "ethers"; -import { - Contract, -} from "ethers"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { EventFragment} from "@ethersproject/abi"; -import type { TypedEventFilter, TypedEvent, TypedListener } from "./commons"; - -interface UpgradeabilityProxyInterface extends ethers.utils.Interface { - functions: {}; - - events: { - "Upgraded(address)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment; -} - -export class UpgradeabilityProxy extends Contract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - listeners, EventArgsObject>( - eventFilter?: TypedEventFilter - ): Array>; - off, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - on, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - once, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeListener, EventArgsObject>( - eventFilter: TypedEventFilter, - listener: TypedListener - ): this; - removeAllListeners, EventArgsObject>( - eventFilter: TypedEventFilter - ): this; - - listeners(eventName?: string): Array; - off(eventName: string, listener: Listener): this; - on(eventName: string, listener: Listener): this; - once(eventName: string, listener: Listener): this; - removeListener(eventName: string, listener: Listener): this; - removeAllListeners(eventName?: string): this; - - queryFilter, EventArgsObject>( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>>; - - interface: UpgradeabilityProxyInterface; - - functions: {}; - - callStatic: {}; - - filters: { - Upgraded( - implementation: string | null - ): TypedEventFilter<[string], { implementation: string }>; - }; - - estimateGas: {}; - - populateTransaction: {}; -} diff --git a/libs/chains/src/eth/types/commons.ts b/libs/chains/src/eth/types/commons.ts deleted file mode 100644 index a2cc8a1bea9..00000000000 --- a/libs/chains/src/eth/types/commons.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { EventFilter, Event } from "ethers"; -import type { Result } from "@ethersproject/abi"; - -export type TypedEventFilter<_EventArgsArray, _EventArgsObject> = EventFilter - -export interface TypedEvent extends Event { - args: EventArgs; -} - -export type TypedListener< - EventArgsArray extends Array, - EventArgsObject -> = ( - ...listenerArg: [ - ...EventArgsArray, - TypedEvent - ] -) => void; diff --git a/libs/chains/src/eth/types/factories/AaveGovernanceV2__factory.ts b/libs/chains/src/eth/types/factories/AaveGovernanceV2__factory.ts deleted file mode 100644 index 8058992bf01..00000000000 --- a/libs/chains/src/eth/types/factories/AaveGovernanceV2__factory.ts +++ /dev/null @@ -1,848 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { AaveGovernanceV2 } from "../AaveGovernanceV2"; - -export class AaveGovernanceV2__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - governanceStrategy: string, - votingDelay: BigNumberish, - guardian: string, - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - governanceStrategy, - votingDelay, - guardian, - executors, - overrides || {} - ) as Promise; - } - getDeployTransaction( - governanceStrategy: string, - votingDelay: BigNumberish, - guardian: string, - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - governanceStrategy, - votingDelay, - guardian, - executors, - overrides || {} - ); - } - attach(address: string): AaveGovernanceV2 { - return super.attach(address) as AaveGovernanceV2; - } - connect(signer: Signer): AaveGovernanceV2__factory { - return super.connect(signer) as AaveGovernanceV2__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AaveGovernanceV2 { - return new Contract(address, _abi, signerOrProvider) as AaveGovernanceV2; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "governanceStrategy", - type: "address", - }, - { - internalType: "uint256", - name: "votingDelay", - type: "uint256", - }, - { - internalType: "address", - name: "guardian", - type: "address", - }, - { - internalType: "address[]", - name: "executors", - type: "address[]", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "executor", - type: "address", - }, - ], - name: "ExecutorAuthorized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "executor", - type: "address", - }, - ], - name: "ExecutorUnauthorized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newStrategy", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "initiatorChange", - type: "address", - }, - ], - name: "GovernanceStrategyChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "creator", - type: "address", - }, - { - indexed: true, - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "strategy", - type: "address", - }, - { - indexed: false, - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "initiatorExecution", - type: "address", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "initiatorQueueing", - type: "address", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "support", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "votingPower", - type: "uint256", - }, - ], - name: "VoteEmitted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "initiatorChange", - type: "address", - }, - ], - name: "VotingDelayChanged", - type: "event", - }, - { - inputs: [], - name: "DOMAIN_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "NAME", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "VOTE_EMITTED_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "__abdicate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "executors", - type: "address[]", - }, - ], - name: "authorizeExecutors", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - ], - name: "create", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "getGovernanceStrategy", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getGuardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getProposalById", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "creator", - type: "address", - }, - { - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "address", - name: "strategy", - type: "address", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - ], - internalType: "struct IAaveGovernanceV2.ProposalWithoutVotes", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getProposalState", - outputs: [ - { - internalType: "enum IAaveGovernanceV2.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getProposalsCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getVoteOnProposal", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "support", - type: "bool", - }, - { - internalType: "uint248", - name: "votingPower", - type: "uint248", - }, - ], - internalType: "struct IAaveGovernanceV2.Vote", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getVotingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "executor", - type: "address", - }, - ], - name: "isExecutorAuthorized", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "governanceStrategy", - type: "address", - }, - ], - name: "setGovernanceStrategy", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "votingDelay", - type: "uint256", - }, - ], - name: "setVotingDelay", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - ], - name: "submitVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "submitVoteBySignature", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "executors", - type: "address[]", - }, - ], - name: "unauthorizeExecutors", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b50604051620036173803806200361783398101604081905262000034916200028e565b600062000040620000d0565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009584620000d4565b620000a08362000121565b600680546001600160a01b0319166001600160a01b038416179055620000c68162000165565b50505050620003b1565b3390565b600180546001600160a01b0319166001600160a01b0383169081179091556040513391907f9e8e9f668db69a2cefb172dabe284d0d3aea2b7ee64212a205bd033bd03a3d5590600090a350565b600281905560405133907fc46fc23e244f0720a98ddbac6efb5bb40d212cf15e6478fc4b3017648715289d906200015a90849062000384565b60405180910390a250565b6200016f620000d0565b6000546001600160a01b03908116911614620001d2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b81518110156200020d5762000204828281518110620001f057fe5b60200260200101516200021160201b60201c565b600101620001d5565b5050565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517f52762435f58790076157ea2a4914a5a4d0aa0eb421588891377692f7fd3bc082906200026690839062000370565b60405180910390a150565b80516001600160a01b03811681146200028957600080fd5b919050565b60008060008060808587031215620002a4578384fd5b620002af8562000271565b93506020808601519350620002c76040870162000271565b60608701519093506001600160401b0380821115620002e4578384fd5b818801915088601f830112620002f8578384fd5b8151818111156200030557fe5b8381029150620003178483016200038d565b8181528481019084860184860187018d101562000332578788fd5b8795505b838610156200035f576200034a8162000271565b83526001959095019491860191860162000336565b50989b979a50959850505050505050565b6001600160a01b0391909116815260200190565b90815260200190565b6040518181016001600160401b0381118282101715620003a957fe5b604052919050565b61325680620003c16000396000f3fe6080604052600436106101665760003560e01c8063760fbc13116100d1578063a3f4df7e1161008a578063ddf0b00911610064578063ddf0b00914610403578063f2fde38b14610423578063f8741a9c14610443578063fe0d94c11461046357610166565b8063a3f4df7e146103ac578063a75b87d2146103ce578063af1e0bd3146103e357610166565b8063760fbc131461030b5780638da5cb5b146103205780639080936f1461033557806398e527d3146103625780639aad6f6a14610377578063a2b170b01461039757610166565b80634185ff83116101235780634185ff831461023c578063548b514e14610269578063612c56fa1461029657806364c786d9146102b657806370b0f660146102d6578063715018a6146102f657610166565b806306be3e8e1461016b5780631a1caf7f1461019657806320606b70146101b857806334b18c26146101da5780633656de21146101ef57806340e58ee51461021c575b600080fd5b34801561017757600080fd5b50610180610476565b60405161018d9190612ac4565b60405180910390f35b3480156101a257600080fd5b506101b66101b1366004612668565b610485565b005b3480156101c457600080fd5b506101cd610511565b60405161018d9190612b89565b3480156101e657600080fd5b506101cd610535565b3480156101fb57600080fd5b5061020f61020a366004612830565b610559565b60405161018d9190612ed8565b34801561022857600080fd5b506101b6610237366004612830565b61090a565b34801561024857600080fd5b5061025c610257366004612848565b610be5565b60405161018d9190613032565b34801561027557600080fd5b5061028961028436600461264c565b610c3e565b60405161018d9190612b7e565b3480156102a257600080fd5b506101b66102b1366004612877565b610c5c565b3480156102c257600080fd5b506101b66102d1366004612668565b610c67565b3480156102e257600080fd5b506101b66102f1366004612830565b610cef565b34801561030257600080fd5b506101b6610d53565b34801561031757600080fd5b506101b6610df5565b34801561032c57600080fd5b50610180610e31565b34801561034157600080fd5b50610355610350366004612830565b610e40565b60405161018d9190612c10565b34801561036e57600080fd5b506101cd611011565b34801561038357600080fd5b506101b661039236600461264c565b611017565b3480156103a357600080fd5b506101cd611078565b3480156103b857600080fd5b506103c161107e565b60405161018d9190612c24565b3480156103da57600080fd5b506101806110ac565b3480156103ef57600080fd5b506101b66103fe36600461289b565b6110bb565b34801561040f57600080fd5b506101b661041e366004612830565b61125d565b34801561042f57600080fd5b506101b661043e36600461264c565b611559565b34801561044f57600080fd5b506101cd61045e36600461274a565b611651565b6101b6610471366004612830565b6119da565b6001546001600160a01b031690565b61048d611bd9565b6000546001600160a01b039081169116146104dd576040805162461bcd60e51b81526020600482018190526024820152600080516020613201833981519152604482015290519081900360640190fd5b60005b815181101561050d576105058282815181106104f857fe5b6020026020010151611bdd565b6001016104e0565b5050565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b7f4e031542a9553ed1c4e810c54674ab4b984243e335b246aa3de73663bf4c11ee81565b610561612094565b6000828152600460205260409020610577612094565b60408051610220810182528354815260018401546001600160a01b0390811660208084019190915260028601549091168284015260038501805484518184028101840190955280855292936060850193909283018282801561060257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105e4575b505050505081526020018360040180548060200260200160405190810160405280929190818152602001828054801561065a57602002820191906000526020600020905b815481526020019060010190808311610646575b5050505050815260200183600501805480602002602001604051908101604052809291908181526020016000905b828210156107335760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561071f5780601f106106f45761010080835404028352916020019161071f565b820191906000526020600020905b81548152906001019060200180831161070257829003601f168201915b505050505081526020019060010190610688565b50505050815260200183600601805480602002602001604051908101604052809291908181526020016000905b8282101561080b5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156107f75780601f106107cc576101008083540402835291602001916107f7565b820191906000526020600020905b8154815290600101906020018083116107da57829003601f168201915b505050505081526020019060010190610760565b5050505081526020018360070180548060200260200160405190810160405280929190818152602001828054801561088257602002820191906000526020600020906000905b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116108515790505b50505091835250506008840154602082015260098401546040820152600a8401546060820152600b8401546080820152600c84015460a0820152600d84015460ff808216151560c0840152610100808304909116151560e0840152620100009091046001600160a01b031690820152600e90930154610120909301929092525090505b919050565b600061091582610e40565b9050600781600781111561092557fe5b1415801561093f5750600181600781111561093c57fe5b14155b80156109575750600681600781111561095457fe5b14155b61097c5760405162461bcd60e51b815260040161097390612e4e565b60405180910390fd5b60008281526004602052604090206006546001600160a01b0316331480610a2f5750600281015460018201546040516331a7bc4160e01b81526001600160a01b03928316926331a7bc41926109df92309290911690436000190190600401612bec565b60206040518083038186803b1580156109f757600080fd5b505afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906126a3565b610a4b5760405162461bcd60e51b815260040161097390612e19565b600d8101805461ff00191661010017905560005b6003820154811015610ba85760028201546003830180546001600160a01b0390921691631dc40b51919084908110610a9357fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610abb57fe5b9060005260206000200154856005018581548110610ad557fe5b90600052602060002001866006018681548110610aee57fe5b9060005260206000200187600a0154886007018881548110610b0c57fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518763ffffffff1660e01b8152600401610b4d96959493929190612b45565b602060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f91906126bf565b50600101610a5f565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610bd89190612b89565b60405180910390a1505050565b610bed61213a565b5060008281526004602090815260408083206001600160a01b0385168452600f0182529182902082518084019093525460ff8116151583526001600160f81b03610100909104169082015292915050565b6001600160a01b031660009081526005602052604090205460ff1690565b61050d338383611c38565b610c6f611bd9565b6000546001600160a01b03908116911614610cbf576040805162461bcd60e51b81526020600482018190526024820152600080516020613201833981519152604482015290519081900360640190fd5b60005b815181101561050d57610ce7828281518110610cda57fe5b6020026020010151611df2565b600101610cc2565b610cf7611bd9565b6000546001600160a01b03908116911614610d47576040805162461bcd60e51b81526020600482018190526024820152600080516020613201833981519152604482015290519081900360640190fd5b610d5081611e45565b50565b610d5b611bd9565b6000546001600160a01b03908116911614610dab576040805162461bcd60e51b81526020600482018190526024820152600080516020613201833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6006546001600160a01b03163314610e1f5760405162461bcd60e51b815260040161097390612db8565b600680546001600160a01b0319169055565b6000546001600160a01b031690565b6000816003541015610e645760405162461bcd60e51b815260040161097390612e7c565b6000828152600460205260409020600d810154610100900460ff1615610e8e576001915050610905565b80600801544311610ea3576000915050610905565b80600901544311610eb8576002915050610905565b60028101546040516306fbb3ab60e01b81526001600160a01b03909116906306fbb3ab90610eec9030908790600401612ad8565b60206040518083038186803b158015610f0457600080fd5b505afa158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c91906126a3565b610f4a576003915050610905565b600a810154610f5d576004915050610905565b600d81015460ff1615610f74576007915050610905565b600281015460405163f670a5f960e01b81526001600160a01b039091169063f670a5f990610fa89030908790600401612ad8565b60206040518083038186803b158015610fc057600080fd5b505afa158015610fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff891906126a3565b15611007576006915050610905565b6005915050610905565b60035490565b61101f611bd9565b6000546001600160a01b0390811691161461106f576040805162461bcd60e51b81526020600482018190526024820152600080516020613201833981519152604482015290519081900360640190fd5b610d5081611e87565b60025490565b6040518060400160405280601281526020017120b0bb329023b7bb32b93730b731b2903b1960711b81525081565b6006546001600160a01b031690565b60408051808201909152601281527120b0bb329023b7bb32b93730b731b2903b1960711b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f4cc6f35bf1a450a8f51b0719ea5910c789b7b914b5c4f0451867c8a5475a4982611131611ed4565b306040516020016111459493929190612b92565b604051602081830303815290604052805190602001207f4e031542a9553ed1c4e810c54674ab4b984243e335b246aa3de73663bf4c11ee878760405160200161119093929190612bb6565b604051602081830303815290604052805190602001206040516020016111b7929190612aa9565b6040516020818303038152906040528051906020012090506000600182868686604051600081526020016040526040516111f49493929190612bce565b6020604051602081039080840390855afa158015611216573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112495760405162461bcd60e51b815260040161097390612d26565b611254818888611c38565b50505050505050565b600461126882610e40565b600781111561127357fe5b146112905760405162461bcd60e51b815260040161097390612c95565b60008181526004602081815260408084206002810154825163675e4d4160e11b81529251919594611327946001600160a01b039092169363cebc9a829381830193929091829003018186803b1580156112e857600080fd5b505afa1580156112fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132091906126bf565b4290611ed8565b905060005b6003830154811015611510576002830154600384018054611508926001600160a01b031691908490811061135c57fe5b6000918252602090912001546004860180546001600160a01b03909216918590811061138457fe5b906000526020600020015486600501858154811061139e57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561142c5780601f106114015761010080835404028352916020019161142c565b820191906000526020600020905b81548152906001019060200180831161140f57829003601f168201915b505050505087600601868154811061144057fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156114ce5780601f106114a3576101008083540402835291602001916114ce565b820191906000526020600020905b8154815290600101906020018083116114b157829003601f168201915b5050505050878960070188815481106114e357fe5b90600052602060002090602091828204019190069054906101000a900460ff16611f39565b60010161132c565b50600a820181905560405133907f11a0b38e70585e4b09b794bd1d9f9b1a51a802eb8ee2101eeee178d0349e73fe9061154c9086908590613109565b60405180910390a2505050565b611561611bd9565b6000546001600160a01b039081169116146115b1576040805162461bcd60e51b81526020600482018190526024820152600080516020613201833981519152604482015290519081900360640190fd5b6001600160a01b0381166115f65760405162461bcd60e51b81526004018080602001828103825260268152602001806131db6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008651600014156116755760405162461bcd60e51b815260040161097390612cf7565b85518751148015611687575084518751145b8015611694575083518751145b80156116a1575082518751145b6116bd5760405162461bcd60e51b815260040161097390612de2565b6116c688610c3e565b6116e25760405162461bcd60e51b815260040161097390612d81565b604051631a1b205360e31b81526001600160a01b0389169063d0d90298906117169030903390600019430190600401612bec565b60206040518083038186803b15801561172e57600080fd5b505afa158015611742573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176691906126a3565b6117825760405162461bcd60e51b815260040161097390612c37565b61178a612151565b600254611798904390611ed8565b81600001818152505061181d896001600160a01b031663a438d2086040518163ffffffff1660e01b815260040160206040518083038186803b1580156117dd57600080fd5b505afa1580156117f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181591906126bf565b825190611ed8565b602082810191909152600380546040808501828152600092835260048552912090518155600181018054336001600160a01b0319918216179091556002820180549091166001600160a01b038e161790558a51909261188292840191908c0190612172565b50875161189890600483019060208b01906121d7565b5086516118ae90600583019060208a0190612212565b5085516118c4906006830190602089019061226b565b5084516118da90600783019060208801906122c4565b508160000151816008018190555081602001518160090181905550600160009054906101000a90046001600160a01b031681600d0160026101000a8154816001600160a01b0302191690836001600160a01b031602179055508381600e0181905550600360008154809291906001019190505550896001600160a01b0316336001600160a01b03167fd272d67d2c8c66de43c1d2515abb064978a5020c173e15903b6a2ab3bf7440ec84604001518c8c8c8c8c8a600001518b60200151600160009054906101000a90046001600160a01b03168f6040516119c49a99989796959493929190613054565b60405180910390a3549998505050505050505050565b60056119e582610e40565b60078111156119f057fe5b14611a0d5760405162461bcd60e51b815260040161097390612ea9565b6000818152600460205260408120600d8101805460ff19166001179055905b6003820154811015611b935760028201546004830180546001600160a01b0390921691638902ab65919084908110611a6057fe5b9060005260206000200154846003018481548110611a7a57fe5b6000918252602090912001546004860180546001600160a01b039092169186908110611aa257fe5b9060005260206000200154866005018681548110611abc57fe5b90600052602060002001876006018781548110611ad557fe5b9060005260206000200188600a0154896007018981548110611af357fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518863ffffffff1660e01b8152600401611b3496959493929190612b45565b6000604051808303818588803b158015611b4d57600080fd5b505af1158015611b61573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b8a91908101906126d7565b50600101611a2c565b50336001600160a01b03167f9c85b616f29fca57a17eafe71cf9ff82ffef41766e2cf01ea7f8f7878dd3ec2483604051611bcd9190612b89565b60405180910390a25050565b3390565b6001600160a01b03811660009081526005602052604090819020805460ff19169055517f5e8105a2af24345971359d2289f43efa80d093f4a7123561b8d63836b98724f490611c2d908390612ac4565b60405180910390a150565b6002611c4383610e40565b6007811115611c4e57fe5b14611c6b5760405162461bcd60e51b815260040161097390612c6e565b60008281526004602090815260408083206001600160a01b0387168452600f8101909252909120805461010090046001600160f81b031615611cbf5760405162461bcd60e51b815260040161097390612d51565b600d820154600883015460405163eaeded5f60e01b81526000926201000090046001600160a01b03169163eaeded5f91611cfd918a91600401612ad8565b60206040518083038186803b158015611d1557600080fd5b505afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d91906126bf565b90508315611d6e57600b830154611d649082611ed8565b600b840155611d83565b600c830154611d7d9082611ed8565b600c8401555b815460ff60ff1990911685151517166101006001600160f81b038316021782556040516001600160a01b038716907f0c611e7b6ae0de26f4772260e1bbdb5f58cbb7c275fe2de14671968d29add8d690611de2908890889086906130f3565b60405180910390a2505050505050565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517f52762435f58790076157ea2a4914a5a4d0aa0eb421588891377692f7fd3bc08290611c2d908390612ac4565b600281905560405133907fc46fc23e244f0720a98ddbac6efb5bb40d212cf15e6478fc4b3017648715289d90611e7c908490612b89565b60405180910390a250565b600180546001600160a01b0319166001600160a01b0383169081179091556040513391907f9e8e9f668db69a2cefb172dabe284d0d3aea2b7ee64212a205bd033bd03a3d5590600090a350565b4690565b600082820183811015611f32576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b866001600160a01b031663b1fc8796878787878787604051602001611f6396959493929190612af1565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611f959190612b89565b60206040518083038186803b158015611fad57600080fd5b505afa158015611fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe591906126a3565b156120025760405162461bcd60e51b815260040161097390612ccc565b604051638d8fe2e360e01b81526001600160a01b03881690638d8fe2e39061203890899089908990899089908990600401612af1565b602060405180830381600087803b15801561205257600080fd5b505af1158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a91906126bf565b5050505050505050565b6040518061022001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b03168152602001600080191681525090565b604080518082019091526000808252602082015290565b60405180606001604052806000815260200160008152602001600081525090565b8280548282559060005260206000209081019282156121c7579160200282015b828111156121c757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612192565b506121d3929150612360565b5090565b8280548282559060005260206000209081019282156121c7579160200282015b828111156121c75782518255916020019190600101906121f7565b82805482825590600052602060002090810192821561225f579160200282015b8281111561225f578251805161224f918491602090910190612375565b5091602001919060010190612232565b506121d39291506123f0565b8280548282559060005260206000209081019282156122b8579160200282015b828111156122b857825180516122a8918491602090910190612375565b509160200191906001019061228b565b506121d392915061240d565b82805482825590600052602060002090601f016020900481019282156121c75791602002820160005b8382111561232a57835183826101000a81548160ff02191690831515021790555092602001926001016020816000010492830192600103026122ed565b80156123575782816101000a81549060ff021916905560010160208160000104928301926001030261232a565b50506121d39291505b5b808211156121d35760008155600101612361565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826123ab57600085556121c7565b82601f106123c457805160ff19168380011785556121c7565b828001600101855582156121c757918201828111156121c75782518255916020019190600101906121f7565b808211156121d3576000612404828261242a565b506001016123f0565b808211156121d3576000612421828261242a565b5060010161240d565b50805460018160011615610100020316600290046000825580601f106124505750610d50565b601f016020900490600052602060002090810190610d509190612360565b600082601f83011261247e578081fd5b813561249161248c8261313b565b613117565b8181529150602080830190848101818402860182018710156124b257600080fd5b60005b848110156124da5781356124c8816131b7565b845292820192908201906001016124b5565b505050505092915050565b600082601f8301126124f5578081fd5b813561250361248c8261313b565b81815291506020808301908481018184028601820187101561252457600080fd5b60005b848110156124da57813561253a816131cc565b84529282019290820190600101612527565b600082601f83011261255c578081fd5b813561256a61248c8261313b565b818152915060208083019084810160005b848110156124da578135870188603f82011261259657600080fd5b838101356125a661248c82613159565b81815260408b818486010111156125bc57600080fd5b8281850188840137506000918101860191909152855250928201929082019060010161257b565b600082601f8301126125f3578081fd5b813561260161248c8261313b565b81815291506020808301908481018184028601820187101561262257600080fd5b60005b848110156124da57813584529282019290820190600101612625565b8035610905816131b7565b60006020828403121561265d578081fd5b8135611f32816131b7565b600060208284031215612679578081fd5b813567ffffffffffffffff81111561268f578182fd5b61269b8482850161246e565b949350505050565b6000602082840312156126b4578081fd5b8151611f32816131cc565b6000602082840312156126d0578081fd5b5051919050565b6000602082840312156126e8578081fd5b815167ffffffffffffffff8111156126fe578182fd5b8201601f8101841361270e578182fd5b805161271c61248c82613159565b818152856020838501011115612730578384fd5b612741826020830160208601613187565b95945050505050565b600080600080600080600060e0888a031215612764578283fd5b61276d88612641565b9650602088013567ffffffffffffffff80821115612789578485fd5b6127958b838c0161246e565b975060408a01359150808211156127aa578485fd5b6127b68b838c016125e3565b965060608a01359150808211156127cb578485fd5b6127d78b838c0161254c565b955060808a01359150808211156127ec578485fd5b6127f88b838c0161254c565b945060a08a013591508082111561280d578384fd5b5061281a8a828b016124e5565b92505060c0880135905092959891949750929550565b600060208284031215612841578081fd5b5035919050565b6000806040838503121561285a578182fd5b82359150602083013561286c816131b7565b809150509250929050565b60008060408385031215612889578182fd5b82359150602083013561286c816131cc565b600080600080600060a086880312156128b2578283fd5b8535945060208601356128c4816131cc565b9350604086013560ff811681146128d9578384fd5b94979396509394606081013594506080013592915050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156129365781516001600160a01b031687529582019590820190600101612911565b509495945050505050565b6000815180845260208085019450808401835b83811015612936578151151587529582019590820190600101612954565b6000815180845260208085018081965082840281019150828601855b858110156129b85782840389526129a68483516129fa565b9885019893509084019060010161298e565b5091979650505050505050565b6000815180845260208085019450808401835b83811015612936578151875295820195908201906001016129d8565b15159052565b60008151808452612a12816020860160208601613187565b601f01601f19169290920160200192915050565b60008154600180821660008114612a445760018114612a6257612aa0565b60028304607f16865260ff1983166020870152604086019350612aa0565b60028304808752612a728661317b565b60005b82811015612a965781546020828b0101528482019150602081019050612a75565b8801602001955050505b50505092915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038816825286602083015260c06040830152612b1860c08301876129fa565b8281036060840152612b2a81876129fa565b6080840195909552505090151560a090910152949350505050565b600060018060a01b038816825286602083015260c06040830152612b6c60c0830187612a26565b8281036060840152612b2a8187612a26565b901515815260200190565b90815260200190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020810160088310612c1e57fe5b91905290565b600060208252611f3260208301846129fa565b6020808252601c908201527f50524f504f534954494f4e5f4352454154494f4e5f494e56414c494400000000604082015260600190565b6020808252600d908201526c1593d5125391d7d0d313d4d151609a1b604082015260600190565b60208082526017908201527f494e56414c49445f53544154455f464f525f5155455545000000000000000000604082015260600190565b602080825260119082015270222aa82624a1a0aa22a22fa0a1aa24a7a760791b604082015260600190565b602080825260159082015274494e56414c49445f454d5054595f5441524745545360581b604082015260600190565b602080825260119082015270494e56414c49445f5349474e415455524560781b604082015260600190565b6020808252601690820152751593d51157d053149150511657d4d55093525515115160521b604082015260600190565b60208082526017908201527f4558454355544f525f4e4f545f415554484f52495a4544000000000000000000604082015260600190565b60208082526010908201526f27a7262cafa12cafa3aaa0a92224a0a760811b604082015260600190565b6020808252601a908201527f494e434f4e53495354454e545f504152414d535f4c454e475448000000000000604082015260600190565b6020808252818101527f50524f504f534954494f4e5f43414e43454c4c4154494f4e5f494e56414c4944604082015260600190565b60208082526014908201527313d3931657d0915193d49157d1561150d555115160621b604082015260600190565b6020808252601390820152721253959053125117d41493d413d4d05317d251606a1b604082015260600190565b6020808252601590820152744f4e4c595f5155455545445f50524f504f53414c5360581b604082015260600190565b600060208252825160208301526020830151612ef760408401826128f1565b506040830151612f0a60608401826128f1565b506060830151610220806080850152612f276102408501836128fe565b91506080850151601f19808685030160a0870152612f4584836129c5565b935060a08701519150808685030160c0870152612f628483612972565b935060c08701519150808685030160e0870152612f7f8483612972565b935060e08701519150610100818786030181880152612f9e8584612941565b90880151610120888101919091528801516101408089019190915288015161016080890191909152880151610180808901919091528801516101a08089019190915288015190945091506101c09050612ff9818701836129f4565b86015190506101e061300d868201836129f4565b8601519050610200613021868201836128f1565b959095015193019290925250919050565b8151151581526020918201516001600160f81b03169181019190915260400190565b60006101408c835280602084015261306e8184018d6128fe565b90508281036040840152613082818c6129c5565b90508281036060840152613096818b612972565b905082810360808401526130aa818a612972565b905082810360a08401526130be8189612941565b60c0840197909752505060e08101939093526001600160a01b0391909116610100830152610120909101529695505050505050565b9283529015156020830152604082015260600190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561313357fe5b604052919050565b600067ffffffffffffffff82111561314f57fe5b5060209081020190565b600067ffffffffffffffff82111561316d57fe5b50601f01601f191660200190565b60009081526020902090565b60005b838110156131a257818101518382015260200161318a565b838111156131b1576000848401525b50505050565b6001600160a01b0381168114610d5057600080fd5b8015158114610d5057600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220ac26bc836004f1ad165cdf5434d3aa72ba2daf1a455fb8825e63e2e9258e0d3664736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/AaveTokenV1Mock__factory.ts b/libs/chains/src/eth/types/factories/AaveTokenV1Mock__factory.ts deleted file mode 100644 index f200afa3a33..00000000000 --- a/libs/chains/src/eth/types/factories/AaveTokenV1Mock__factory.ts +++ /dev/null @@ -1,550 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { AaveTokenV1Mock } from "../AaveTokenV1Mock"; - -export class AaveTokenV1Mock__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): AaveTokenV1Mock { - return super.attach(address) as AaveTokenV1Mock; - } - connect(signer: Signer): AaveTokenV1Mock__factory { - return super.connect(signer) as AaveTokenV1Mock__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AaveTokenV1Mock { - return new Contract(address, _abi, signerOrProvider) as AaveTokenV1Mock; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: false, - internalType: "uint128", - name: "oldValue", - type: "uint128", - }, - { - indexed: false, - internalType: "uint128", - name: "newValue", - type: "uint128", - }, - ], - name: "SnapshotDone", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "EIP712_REVISION", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "REVISION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_aaveGovernance", - outputs: [ - { - internalType: "contract ITransferHook", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "_countsSnapshots", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "_nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "_snapshots", - outputs: [ - { - internalType: "uint128", - name: "blockNumber", - type: "uint128", - }, - { - internalType: "uint128", - name: "value", - type: "uint128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "migrator", - type: "address", - }, - { - internalType: "address", - name: "distributor", - type: "address", - }, - { - internalType: "contract ITransferHook", - name: "aaveGovernance", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "minter", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405260006006553480156200001657600080fd5b50604080518082018252600a81526920b0bb32902a37b5b2b760b11b6020808301918252835180850190945260048452634141564560e01b908401528151919291620000659160039162000091565b5080516200007b90600490602084019062000091565b50506005805460ff19166012179055506200013d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620000c9576000855562000114565b82601f10620000e457805160ff191683800117855562000114565b8280016001018555821562000114579182015b8281111562000114578251825591602001919060010190620000f7565b506200012292915062000126565b5090565b5b8082111562000122576000815560010162000127565b61171d806200014d6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638779588c116100b8578063c0c53b8b1161007c578063c0c53b8b146103e3578063c3863ada1461041d578063c4d66de814610441578063d505accf14610467578063dd62ed3e146104b8578063dde43cba146104e657610142565b80638779588c1461033757806395d89b411461035d578063a457c2d714610365578063a9059cbb14610391578063b9844d8d146103bd57610142565b806330adf81f1161010a57806330adf81f146102af578063313ce567146102b75780633644e515146102d557806339509351146102dd57806370a0823114610309578063781603761461032f57610142565b806306fdde0314610147578063095ea7b3146101c457806318160ddd1461020457806323b872dd1461021e5780632acbf82314610254575b600080fd5b61014f6104ee565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610189578181015183820152602001610171565b50505050905090810190601f1680156101b65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101f0600480360360408110156101da57600080fd5b506001600160a01b038135169060200135610584565b604080519115158252519081900360200190f35b61020c6105a1565b60408051918252519081900360200190f35b6101f06004803603606081101561023457600080fd5b506001600160a01b038135811691602081013590911690604001356105a7565b6102806004803603604081101561026a57600080fd5b506001600160a01b03813516906020013561062e565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b61020c61065f565b6102bf610683565b6040805160ff9092168252519081900360200190f35b61020c61068c565b6101f0600480360360408110156102f357600080fd5b506001600160a01b038135169060200135610692565b61020c6004803603602081101561031f57600080fd5b50356001600160a01b03166106e0565b61014f6106fb565b61020c6004803603602081101561034d57600080fd5b50356001600160a01b0316610718565b61014f61072a565b6101f06004803603604081101561037b57600080fd5b506001600160a01b03813516906020013561078b565b6101f0600480360360408110156103a757600080fd5b506001600160a01b0381351690602001356107f3565b61020c600480360360208110156103d357600080fd5b50356001600160a01b0316610807565b61041b600480360360608110156103f957600080fd5b506001600160a01b038135811691602081013582169160409091013516610819565b005b6104256109e2565b604080516001600160a01b039092168252519081900360200190f35b61041b6004803603602081101561045757600080fd5b50356001600160a01b03166109f1565b61041b600480360360e081101561047d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610b9d565b61020c600480360360408110156104ce57600080fd5b506001600160a01b0381358116916020013516610de4565b61020c610e0f565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561057a5780601f1061054f5761010080835404028352916020019161057a565b820191906000526020600020905b81548152906001019060200180831161055d57829003601f168201915b5050505050905090565b6000610598610591610e14565b8484610e18565b50600192915050565b60025490565b60006105b4848484610f04565b610624846105c0610e14565b61061f85604051806060016040528060288152602001611624602891396001600160a01b038a166000908152600160205260408120906105fe610e14565b6001600160a01b03168152602081019190915260400160002054919061105f565b610e18565b5060019392505050565b603a6020908152600092835260408084209091529082529020546001600160801b0380821691600160801b90041682565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b603d5481565b600061059861069f610e14565b8461061f85600160006106b0610e14565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906110f6565b6001600160a01b031660009081526020819052604090205490565b604051806040016040528060018152602001603160f81b81525081565b603b6020526000908152604090205481565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561057a5780601f1061054f5761010080835404028352916020019161057a565b6000610598610798610e14565b8461061f856040518060600160405280602581526020016116c360259139600160006107c2610e14565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061105f565b6000610598610800610e14565b8484610f04565b60396020526000908152604090205481565b6000610823611157565b905060065481116108655760405162461bcd60e51b815260040180806020018281038252602e81526020018061164c602e913960400191505060405180910390fd5b6006819055604080518082018252600a8082526920b0bb32902a37b5b2b760b11b60209283018190528351808501855260018152603160f81b9084015283517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818501527fc79ca22c0992a4cca3636d52362fc61ce7d8001b81a7b225d701c42fb0636f32818601527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a0808401919091528651808403909101815260c0830180885281519190960120603d5561010082019095529282905260e090920191825261096191600391611517565b50604080518082019091526004808252634141564560e01b602090920191825261098b9181611517565b50610996601261115c565b603c80546001600160a01b0319166001600160a01b0385161790556109c6856a0ac0db698068112d000000611172565b6109db846a027b46536c66c8e3000000611172565b5050505050565b603c546001600160a01b031681565b60006109fb611157565b90506006548111610a3d5760405162461bcd60e51b815260040180806020018281038252602e81526020018061164c602e913960400191505060405180910390fd5b6006819055604080518082018252600a8082526920b0bb32902a37b5b2b760b11b60209283018190528351808501855260018152603160f81b9084015283517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818501527fc79ca22c0992a4cca3636d52362fc61ce7d8001b81a7b225d701c42fb0636f32818601527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a0808401919091528651808403909101815260c0830180885281519190960120603d5561010082019095529282905260e0909201918252610b3991600391611517565b50604080518082019091526004808252634141564560e01b6020909201918252610b639181611517565b50610b6e601261115c565b610b83836a0ac0db698068112d000000611172565b610b98836a027b46536c66c8e3000000611172565b505050565b6001600160a01b038716610be8576040805162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa7aba722a960991b604482015290519081900360640190fd5b83421115610c32576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604482015290519081900360640190fd5b6001600160a01b03808816600081815260396020908152604080832054603d5482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601835280519084012061190160f01b6101008701526101028601969096526101228086019690965281518086039096018652610142850180835286519684019690962093909552610162840180825283905260ff88166101828501526101a284018790526101c284018690525191926001926101e28083019392601f198301929081900390910190855afa158015610d47573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b031614610daa576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b610db58260016110f6565b6001600160a01b038a16600090815260396020526040902055610dd9898989610e18565b505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600181565b3390565b6001600160a01b038316610e5d5760405162461bcd60e51b815260040180806020018281038252602481526020018061169f6024913960400191505060405180910390fd5b6001600160a01b038216610ea25760405162461bcd60e51b81526004018080602001828103825260228152602001806115dc6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610f495760405162461bcd60e51b815260040180806020018281038252602581526020018061167a6025913960400191505060405180910390fd5b6001600160a01b038216610f8e5760405162461bcd60e51b81526004018080602001828103825260238152602001806115b96023913960400191505060405180910390fd5b610f99838383611262565b610fd6816040518060600160405280602681526020016115fe602691396001600160a01b038616600090815260208190526040902054919061105f565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461100590826110f6565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156110ee5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110b357818101518382015260200161109b565b50505050905090810190601f1680156110e05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611150576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600190565b6005805460ff191660ff92909216919091179055565b6001600160a01b0382166111cd576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6111d960008383611262565b6002546111e690826110f6565b6002556001600160a01b03821660009081526020819052604090205461120c90826110f6565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b816001600160a01b0316836001600160a01b0316141561128157610b98565b6001600160a01b038316156112b357600061129b846106e0565b90506112b184826112ac8186611379565b6113bb565b505b6001600160a01b038216156112e05760006112cd836106e0565b90506112de83826112ac81866110f6565b505b603c546001600160a01b0316801561137357806001600160a01b0316634a3931498585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561135a57600080fd5b505af115801561136e573d6000803e3d6000fd5b505050505b50505050565b600061115083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061105f565b6001600160a01b0383166000908152603b6020908152604080832054603a909252909120439190811580159061140f575060001982016000908152602082905260409020546001600160801b038481169116145b15611444576000198201600090815260208290526040902080546001600160801b03808716600160801b0291161790556114bd565b6040805180820182526001600160801b038086168252868116602080840191825260008781528682528581209451855493518516600160801b029085166fffffffffffffffffffffffffffffffff1990941693909317909316919091179092556001600160a01b0389168152603b909152206001830190555b604080516001600160a01b03881681526001600160801b03808816602083015286168183015290517f2cd3c83ddac2953ee75f53265d9ea4463eaf05030e5459a1b7e63819b7ce88f79181900360600190a1505050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261154d5760008555611593565b82601f1061156657805160ff1916838001178555611593565b82800160010185558215611593579182015b82811115611593578251825591602001919060010190611578565b5061159f9291506115a3565b5090565b5b8082111561159f57600081556001016115a456fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b3be6f13ee0f4eec60a08ebd7aac8d9c7d5f023bc04c7f00b2fc51ffc93db36064736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/AaveTokenV2Mock__factory.ts b/libs/chains/src/eth/types/factories/AaveTokenV2Mock__factory.ts deleted file mode 100644 index 59857bddb56..00000000000 --- a/libs/chains/src/eth/types/factories/AaveTokenV2Mock__factory.ts +++ /dev/null @@ -1,798 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { AaveTokenV2Mock } from "../AaveTokenV2Mock"; - -export class AaveTokenV2Mock__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): AaveTokenV2Mock { - return super.attach(address) as AaveTokenV2Mock; - } - connect(signer: Signer): AaveTokenV2Mock__factory { - return super.connect(signer) as AaveTokenV2Mock__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AaveTokenV2Mock { - return new Contract(address, _abi, signerOrProvider) as AaveTokenV2Mock; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "delegatee", - type: "address", - }, - { - indexed: false, - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "DelegateChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "DelegatedPowerChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DELEGATE_BY_TYPE_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "DELEGATE_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "EIP712_REVISION", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "REVISION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_aaveGovernance", - outputs: [ - { - internalType: "contract ITransferHook", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "_nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "_votingSnapshots", - outputs: [ - { - internalType: "uint128", - name: "blockNumber", - type: "uint128", - }, - { - internalType: "uint128", - name: "value", - type: "uint128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "_votingSnapshotsCounts", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - ], - name: "delegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "delegateBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "delegateByType", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "delegateByTypeBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegator", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getDelegateeByType", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getPowerAtBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getPowerCurrent", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "minter", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "totalSupplyAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405260006006553480156200001657600080fd5b50604080518082018252600a81526920b0bb32902a37b5b2b760b11b6020808301918252835180850190945260048452634141564560e01b908401528151919291620000659160039162000091565b5080516200007b90600490602084019062000091565b50506005805460ff19166012179055506200013d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620000c9576000855562000114565b82601f10620000e457805160ff191683800117855562000114565b8280016001018555821562000114579182015b8281111562000114578251825591602001919060010190620000f7565b506200012292915062000126565b5090565b5b8082111562000122576000815560010162000127565b611ff5806200014d6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638129fc1c1161010f578063c2ffbb91116100a2578063dc937e1c11610071578063dc937e1c14610669578063dd62ed3e14610698578063dde43cba146106c6578063f713d8a8146106ce576101f0565b8063c2ffbb9114610594578063c3863ada146105c9578063c3cda520146105d1578063d505accf14610618576101f0565b8063a9059cbb116100de578063a9059cbb1461050b578063aa9fbe0214610537578063b2f4201d1461053f578063b9844d8d1461056e576101f0565b80638129fc1c146104b257806395d89b41146104ba578063981b24d0146104c2578063a457c2d7146104df576101f0565b806340c10f19116101875780636f50458d116101565780636f50458d1461041357806370a082311461045e57806378160376146104845780637bb73c971461048c576101f0565b806340c10f191461035c57806341cbf54a1461038a5780635b3cc0cf146103925780635c19a95c146103ed576101f0565b806330adf81f116101c357806330adf81f14610302578063313ce5671461030a5780633644e515146103285780633950935114610330576101f0565b806306fdde03146101f5578063095ea7b31461027257806318160ddd146102b257806323b872dd146102cc575b600080fd5b6101fd61071f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023757818101518382015260200161021f565b50505050905090810190601f1680156102645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61029e6004803603604081101561028857600080fd5b506001600160a01b0381351690602001356107b5565b604080519115158252519081900360200190f35b6102ba6107d3565b60408051918252519081900360200190f35b61029e600480360360608110156102e257600080fd5b506001600160a01b038135811691602081013590911690604001356107d9565b6102ba610860565b610312610884565b6040805160ff9092168252519081900360200190f35b6102ba61088d565b61029e6004803603604081101561034657600080fd5b506001600160a01b038135169060200135610893565b6103886004803603604081101561037257600080fd5b506001600160a01b0381351690602001356108e1565b005b6102ba6108ef565b6103be600480360360408110156103a857600080fd5b506001600160a01b038135169060200135610913565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6103886004803603602081101561040357600080fd5b50356001600160a01b0316610944565b6104426004803603604081101561042957600080fd5b5080356001600160a01b0316906020013560ff1661095f565b604080516001600160a01b039092168252519081900360200190f35b6102ba6004803603602081101561047457600080fd5b50356001600160a01b0316610981565b6101fd61099c565b6102ba600480360360208110156104a257600080fd5b50356001600160a01b03166109b9565b6103886109cb565b6101fd610a1c565b6102ba600480360360208110156104d857600080fd5b5035610a7d565b61029e600480360360408110156104f557600080fd5b506001600160a01b038135169060200135610a87565b61029e6004803603604081101561052157600080fd5b506001600160a01b038135169060200135610aef565b6102ba610b03565b6102ba6004803603604081101561055557600080fd5b5080356001600160a01b0316906020013560ff16610b27565b6102ba6004803603602081101561058457600080fd5b50356001600160a01b0316610b4f565b6102ba600480360360608110156105aa57600080fd5b5080356001600160a01b0316906020810135906040013560ff16610b61565b610442610b8a565b610388600480360360c08110156105e757600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a00135610b99565b610388600480360360e081101561062e57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610dbb565b6103886004803603604081101561067f57600080fd5b5080356001600160a01b0316906020013560ff16610ff7565b6102ba600480360360408110156106ae57600080fd5b506001600160a01b0381358116916020013516611002565b6102ba61102d565b610388600480360360e08110156106e457600080fd5b506001600160a01b038135169060ff602082013581169160408101359160608201359160808101359091169060a08101359060c00135611032565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107ab5780601f10610780576101008083540402835291602001916107ab565b820191906000526020600020905b81548152906001019060200180831161078e57829003601f168201915b5050505050905090565b60006107c96107c2611265565b8484611269565b5060015b92915050565b60025490565b60006107e6848484611355565b610856846107f2611265565b61085185604051806060016040528060288152602001611efc602891396001600160a01b038a16600090815260016020526040812090610830611265565b6001600160a01b0316815260208101919091526040016000205491906114b0565b611269565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b603d5481565b60006107c96108a0611265565b8461085185600160006108b1611265565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611547565b6108eb82826115a8565b5050565b7f9a9a49b990ba9bb39f8048c490a40ab25c18f55d208d5fbcf958261a9b48716d81565b603a6020908152600092835260408084209091529082529020546001600160801b0380821691600160801b90041682565b61095033826000611698565b61095c33826001611698565b50565b60008061096b836117a9565b9250505061097984826117e3565b949350505050565b6001600160a01b031660009081526020819052604090205490565b604051806040016040528060018152602001603160f81b81525081565b603b6020526000908152604090205481565b60006109d561180e565b90506006548111610a175760405162461bcd60e51b815260040180806020018281038252602e815260200180611f24602e913960400191505060405180910390fd5b600655565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107ab5780601f10610780576101008083540402835291602001916107ab565b60006107cd6107d3565b60006107c9610a94611265565b8461085185604051806060016040528060258152602001611f9b6025913960016000610abe611265565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906114b0565b60006107c9610afc611265565b8484611355565b7f10d8d059343739efce7dad10d09f0806da52b252b3e6a7951920d2d6ec4102e581565b6000806000610b35846117a9565b5091509150610b4682828743611813565b95945050505050565b60396020526000908152604090205481565b6000806000610b6f846117a9565b5091509150610b8082828888611813565b9695505050505050565b603c546001600160a01b031681565b604080517f9a9a49b990ba9bb39f8048c490a40ab25c18f55d208d5fbcf958261a9b48716d6020808301919091526001600160a01b038916828401526060820188905260808083018890528351808403909101815260a083018452805190820120603d5461190160f01b60c085015260c284015260e2808401829052845180850390910181526101028401808652815191840191909120600091829052610122850180875281905260ff891661014286015261016285018890526101828501879052945191949390926001926101a280840193601f198301929081900390910190855afa158015610c8e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610cea576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b6001600160a01b03811660009081526039602052604090208054600181019091558814610d4e576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f4e4f4e434560981b604482015290519081900360640190fd5b86421115610d98576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604482015290519081900360640190fd5b610da4818a6000611698565b610db0818a6001611698565b505050505050505050565b6001600160a01b038716610e06576040805162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa7aba722a960991b604482015290519081900360640190fd5b83421115610e50576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604482015290519081900360640190fd5b6001600160a01b03808816600081815260396020908152604080832054603d5482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601835280519084012061190160f01b6101008701526101028601969096526101228086019690965281518086039096018652610142850180835286519684019690962093909552610162840180825283905260ff88166101828501526101a284018790526101c284018690525191926001926101e28083019392601f198301929081900390910190855afa158015610f65573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b031614610fc8576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b610fd3826001611547565b6001600160a01b038a16600090815260396020526040902055610db0898989611269565b6108eb338383611698565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600281565b60007f10d8d059343739efce7dad10d09f0806da52b252b3e6a7951920d2d6ec4102e58888600181111561106257fe5b604080516020808201959095526001600160a01b039093168382015260608301919091526080820189905260a08083018990528151808403909101815260c083018252805190840120603d5461190160f01b60e085015260e2840152610102808401829052825180850390910181526101228401808452815191860191909120600091829052610142850180855281905260ff8a1661016286015261018285018990526101a285018890529251919550919391926001926101c2808301939192601f198301929081900390910190855afa158015611144573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166111a0576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b6001600160a01b03811660009081526039602052604090208054600181019091558814611204576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f4e4f4e434560981b604482015290519081900360640190fd5b8642111561124e576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604482015290519081900360640190fd5b611259818b8b611698565b50505050505050505050565b3390565b6001600160a01b0383166112ae5760405162461bcd60e51b8152600401808060200182810382526024815260200180611f776024913960400191505060405180910390fd5b6001600160a01b0382166112f35760405162461bcd60e51b8152600401808060200182810382526022815260200180611eb46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661139a5760405162461bcd60e51b8152600401808060200182810382526025815260200180611f526025913960400191505060405180910390fd5b6001600160a01b0382166113df5760405162461bcd60e51b8152600401808060200182810382526023815260200180611e916023913960400191505060405180910390fd5b6113ea838383611a2e565b61142781604051806060016040528060268152602001611ed6602691396001600160a01b03861660009081526020819052604090205491906114b0565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546114569082611547565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561153f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115045781810151838201526020016114ec565b50505050905090810190601f1680156115315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156115a1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611603576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61160f60008383611a2e565b60025461161c9082611547565b6002556001600160a01b0382166000908152602081905260409020546116429082611547565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166116e7576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f44454c45474154454560781b604482015290519081900360640190fd5b60006116f2826117a9565b92505050600061170185610981565b9050600061170f86846117e3565b6001600160a01b03878116600090815260208690526040902080546001600160a01b031916918816919091179055905061174b81868487611b21565b846001600160a01b0316866001600160a01b03167fe8d51c8e11bd570db1734c8ec775785330e77007feed45c43b608ef33ff914bd866040518082600181111561179157fe5b815260200191505060405180910390a3505050505050565b60008080808460018111156117ba57fe5b14156117d05750603a9150603b9050603e6117dc565b50603f91506040905060415b9193909250565b6001600160a01b03808316600090815260208390526040812054909116806115a157839150506107cd565b600290565b600043821115611861576040805162461bcd60e51b815260206004820152601460248201527324a72b20a624a22fa12627a1a5afa72aa6a122a960611b604482015290519081900360640190fd5b6001600160a01b038316600090815260208590526040902054806118905761188884610981565b915050610979565b6001600160a01b038416600090815260208781526040808320600019850184529091529020546001600160801b03168310611903576001600160a01b038416600090815260208781526040808320600019909401835292905220546001600160801b03600160801b909104169050610979565b6001600160a01b0384166000908152602087815260408083208380529091529020546001600160801b031683101561193f576000915050610979565b600060001982015b818111156119f157600282820304810361195f611e79565b506001600160a01b038716600090815260208a815260408083208484528252918290208251808401909352546001600160801b03808216808552600160801b90920416918301919091528714156119c957602001516001600160801b031694506109799350505050565b80516001600160801b03168711156119e3578193506119ea565b6001820392505b5050611947565b506001600160a01b0385166000908152602088815260408083209383529290522054600160801b90046001600160801b0316915050949350505050565b6000611a3b84603e6117e3565b90506000611a4a84603e6117e3565b9050611a598282856000611b21565b6000611a668660416117e3565b90506000611a758660416117e3565b9050611a848282876001611b21565b603c546001600160a01b03168015611b1757806001600160a01b0316634a3931498989896040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611afe57600080fd5b505af1158015611b12573d6000803e3d6000fd5b505050505b5050505050505050565b826001600160a01b0316846001600160a01b03161415611b4057611d2a565b600080611b4c836117a9565b5090925090506001600160a01b03861615611c3f576001600160a01b0386166000908152602082905260408120548015611bbd576001600160a01b03881660009081526020858152604080832060001985018452909152902054600160801b90046001600160801b03169150611bc9565b611bc688610981565b91505b611bdf84848a85611bda818c611d30565b611d72565b6001600160a01b0388167fa0a19463ee116110c9b282012d9b65cc5522dc38a9520340cbaf3142e550127f611c148489611d30565b8760405180838152602001826001811115611c2b57fe5b81526020019250505060405180910390a250505b6001600160a01b03851615611d27576001600160a01b0385166000908152602082905260408120548015611caa576001600160a01b03871660009081526020858152604080832060001985018452909152902054600160801b90046001600160801b03169150611cb6565b611cb387610981565b91505b611cc784848985611bda818c611547565b6001600160a01b0387167fa0a19463ee116110c9b282012d9b65cc5522dc38a9520340cbaf3142e550127f611cfc8489611547565b8760405180838152602001826001811115611d1357fe5b81526020019250505060405180910390a250505b50505b50505050565b60006115a183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114b0565b6001600160a01b03831660009081526020858152604080832054918890529091204391908115801590611dc3575060001982016000908152602082905260409020546001600160801b038481169116145b15611df8576000198201600090815260208290526040902080546001600160801b03808716600160801b029116179055611b17565b6040805180820182526001600160801b038086168252868116602080840191825260008781528682528581209451855493518516600160801b029085166fffffffffffffffffffffffffffffffff1990941693909317909316919091179092556001600160a01b038916815290899052206001830190555050505050505050565b60408051808201909152600080825260208201529056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122012b47fdc939fc8d50edf884dab3716a0426b45c8d488a8cf5c9e8258220f51b064736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/AaveTokenV2__factory.ts b/libs/chains/src/eth/types/factories/AaveTokenV2__factory.ts deleted file mode 100644 index b099ee043c1..00000000000 --- a/libs/chains/src/eth/types/factories/AaveTokenV2__factory.ts +++ /dev/null @@ -1,785 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { AaveTokenV2 } from "../AaveTokenV2"; - -export class AaveTokenV2__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): AaveTokenV2 { - return super.attach(address) as AaveTokenV2; - } - connect(signer: Signer): AaveTokenV2__factory { - return super.connect(signer) as AaveTokenV2__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AaveTokenV2 { - return new Contract(address, _abi, signerOrProvider) as AaveTokenV2; - } -} - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "delegatee", - type: "address", - }, - { - indexed: false, - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "DelegateChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "DelegatedPowerChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DELEGATE_BY_TYPE_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "DELEGATE_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "EIP712_REVISION", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "REVISION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_aaveGovernance", - outputs: [ - { - internalType: "contract ITransferHook", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "_nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "_votingSnapshots", - outputs: [ - { - internalType: "uint128", - name: "blockNumber", - type: "uint128", - }, - { - internalType: "uint128", - name: "value", - type: "uint128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "_votingSnapshotsCounts", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - ], - name: "delegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "delegateBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "delegateByType", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "delegateByTypeBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegator", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getDelegateeByType", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getPowerAtBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getPowerCurrent", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "totalSupplyAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405260006006553480156200001657600080fd5b50604080518082018252600a81526920b0bb32902a37b5b2b760b11b6020808301918252835180850190945260048452634141564560e01b908401528151919291620000659160039162000091565b5080516200007b90600490602084019062000091565b50506005805460ff19166012179055506200013d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620000c9576000855562000114565b82601f10620000e457805160ff191683800117855562000114565b8280016001018555821562000114579182015b8281111562000114578251825591602001919060010190620000f7565b506200012292915062000126565b5090565b5b8082111562000122576000815560010162000127565b611ec4806200014d6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638129fc1c1161010f578063c2ffbb91116100a2578063dc937e1c11610071578063dc937e1c14610632578063dd62ed3e14610661578063dde43cba1461068f578063f713d8a814610697576101e5565b8063c2ffbb911461055d578063c3863ada14610592578063c3cda5201461059a578063d505accf146105e1576101e5565b8063a9059cbb116100de578063a9059cbb146104d4578063aa9fbe0214610500578063b2f4201d14610508578063b9844d8d14610537576101e5565b80638129fc1c1461047b57806395d89b4114610483578063981b24d01461048b578063a457c2d7146104a8576101e5565b806339509351116101875780636f50458d116101565780636f50458d146103dc57806370a0823114610427578063781603761461044d5780637bb73c9714610455576101e5565b8063395093511461032557806341cbf54a146103515780635b3cc0cf146103595780635c19a95c146103b4576101e5565b806323b872dd116101c357806323b872dd146102c157806330adf81f146102f7578063313ce567146102ff5780633644e5151461031d576101e5565b806306fdde03146101ea578063095ea7b31461026757806318160ddd146102a7575b600080fd5b6101f26106e8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022c578181015183820152602001610214565b50505050905090810190601f1680156102595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102936004803603604081101561027d57600080fd5b506001600160a01b03813516906020013561077e565b604080519115158252519081900360200190f35b6102af61079c565b60408051918252519081900360200190f35b610293600480360360608110156102d757600080fd5b506001600160a01b038135811691602081013590911690604001356107a2565b6102af610829565b61030761084d565b6040805160ff9092168252519081900360200190f35b6102af610856565b6102936004803603604081101561033b57600080fd5b506001600160a01b03813516906020013561085c565b6102af6108aa565b6103856004803603604081101561036f57600080fd5b506001600160a01b0381351690602001356108ce565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6103da600480360360208110156103ca57600080fd5b50356001600160a01b03166108ff565b005b61040b600480360360408110156103f257600080fd5b5080356001600160a01b0316906020013560ff1661091a565b604080516001600160a01b039092168252519081900360200190f35b6102af6004803603602081101561043d57600080fd5b50356001600160a01b031661093c565b6101f2610957565b6102af6004803603602081101561046b57600080fd5b50356001600160a01b0316610974565b6103da610986565b6101f26109d7565b6102af600480360360208110156104a157600080fd5b5035610a38565b610293600480360360408110156104be57600080fd5b506001600160a01b038135169060200135610a42565b610293600480360360408110156104ea57600080fd5b506001600160a01b038135169060200135610aaa565b6102af610abe565b6102af6004803603604081101561051e57600080fd5b5080356001600160a01b0316906020013560ff16610ae2565b6102af6004803603602081101561054d57600080fd5b50356001600160a01b0316610b0a565b6102af6004803603606081101561057357600080fd5b5080356001600160a01b0316906020810135906040013560ff16610b1c565b61040b610b45565b6103da600480360360c08110156105b057600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a00135610b54565b6103da600480360360e08110156105f757600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610d76565b6103da6004803603604081101561064857600080fd5b5080356001600160a01b0316906020013560ff16610fb2565b6102af6004803603604081101561067757600080fd5b506001600160a01b0381358116916020013516610fc1565b6102af610fec565b6103da600480360360e08110156106ad57600080fd5b506001600160a01b038135169060ff602082013581169160408101359160608201359160808101359091169060a08101359060c00135610ff1565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107745780601f1061074957610100808354040283529160200191610774565b820191906000526020600020905b81548152906001019060200180831161075757829003601f168201915b5050505050905090565b600061079261078b611224565b8484611228565b5060015b92915050565b60025490565b60006107af848484611314565b61081f846107bb611224565b61081a85604051806060016040528060288152602001611dcb602891396001600160a01b038a166000908152600160205260408120906107f9611224565b6001600160a01b03168152602081019190915260400160002054919061146f565b611228565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b603d5481565b6000610792610869611224565b8461081a856001600061087a611224565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611506565b7f9a9a49b990ba9bb39f8048c490a40ab25c18f55d208d5fbcf958261a9b48716d81565b603a6020908152600092835260408084209091529082529020546001600160801b0380821691600160801b90041682565b61090b33826000611567565b61091733826001611567565b50565b60008061092683611678565b9250505061093484826116b2565b949350505050565b6001600160a01b031660009081526020819052604090205490565b604051806040016040528060018152602001603160f81b81525081565b603b6020526000908152604090205481565b60006109906116dd565b905060065481116109d25760405162461bcd60e51b815260040180806020018281038252602e815260200180611df3602e913960400191505060405180910390fd5b600655565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107745780601f1061074957610100808354040283529160200191610774565b600061079661079c565b6000610792610a4f611224565b8461081a85604051806060016040528060258152602001611e6a6025913960016000610a79611224565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061146f565b6000610792610ab7611224565b8484611314565b7f10d8d059343739efce7dad10d09f0806da52b252b3e6a7951920d2d6ec4102e581565b6000806000610af084611678565b5091509150610b01828287436116e2565b95945050505050565b60396020526000908152604090205481565b6000806000610b2a84611678565b5091509150610b3b828288886116e2565b9695505050505050565b603c546001600160a01b031681565b604080517f9a9a49b990ba9bb39f8048c490a40ab25c18f55d208d5fbcf958261a9b48716d6020808301919091526001600160a01b038916828401526060820188905260808083018890528351808403909101815260a083018452805190820120603d5461190160f01b60c085015260c284015260e2808401829052845180850390910181526101028401808652815191840191909120600091829052610122850180875281905260ff891661014286015261016285018890526101828501879052945191949390926001926101a280840193601f198301929081900390910190855afa158015610c49573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ca5576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b6001600160a01b03811660009081526039602052604090208054600181019091558814610d09576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f4e4f4e434560981b604482015290519081900360640190fd5b86421115610d53576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604482015290519081900360640190fd5b610d5f818a6000611567565b610d6b818a6001611567565b505050505050505050565b6001600160a01b038716610dc1576040805162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa7aba722a960991b604482015290519081900360640190fd5b83421115610e0b576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604482015290519081900360640190fd5b6001600160a01b03808816600081815260396020908152604080832054603d5482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601835280519084012061190160f01b6101008701526101028601969096526101228086019690965281518086039096018652610142850180835286519684019690962093909552610162840180825283905260ff88166101828501526101a284018790526101c284018690525191926001926101e28083019392601f198301929081900390910190855afa158015610f20573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b031614610f83576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b610f8e826001611506565b6001600160a01b038a16600090815260396020526040902055610d6b898989611228565b610fbd338383611567565b5050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600281565b60007f10d8d059343739efce7dad10d09f0806da52b252b3e6a7951920d2d6ec4102e58888600181111561102157fe5b604080516020808201959095526001600160a01b039093168382015260608301919091526080820189905260a08083018990528151808403909101815260c083018252805190840120603d5461190160f01b60e085015260e2840152610102808401829052825180850390910181526101228401808452815191860191909120600091829052610142850180855281905260ff8a1661016286015261018285018990526101a285018890529251919550919391926001926101c2808301939192601f198301929081900390910190855afa158015611103573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661115f576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b6001600160a01b038116600090815260396020526040902080546001810190915588146111c3576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f4e4f4e434560981b604482015290519081900360640190fd5b8642111561120d576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604482015290519081900360640190fd5b611218818b8b611567565b50505050505050505050565b3390565b6001600160a01b03831661126d5760405162461bcd60e51b8152600401808060200182810382526024815260200180611e466024913960400191505060405180910390fd5b6001600160a01b0382166112b25760405162461bcd60e51b8152600401808060200182810382526022815260200180611d836022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166113595760405162461bcd60e51b8152600401808060200182810382526025815260200180611e216025913960400191505060405180910390fd5b6001600160a01b03821661139e5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d606023913960400191505060405180910390fd5b6113a98383836118fd565b6113e681604051806060016040528060268152602001611da5602691396001600160a01b038616600090815260208190526040902054919061146f565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546114159082611506565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156114fe5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114c35781810151838201526020016114ab565b50505050905090810190601f1680156114f05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611560576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166115b6576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f44454c45474154454560781b604482015290519081900360640190fd5b60006115c182611678565b9250505060006115d08561093c565b905060006115de86846116b2565b6001600160a01b03878116600090815260208690526040902080546001600160a01b031916918816919091179055905061161a818684876119f0565b846001600160a01b0316866001600160a01b03167fe8d51c8e11bd570db1734c8ec775785330e77007feed45c43b608ef33ff914bd866040518082600181111561166057fe5b815260200191505060405180910390a3505050505050565b600080808084600181111561168957fe5b141561169f5750603a9150603b9050603e6116ab565b50603f91506040905060415b9193909250565b6001600160a01b03808316600090815260208390526040812054909116806115605783915050610796565b600290565b600043821115611730576040805162461bcd60e51b815260206004820152601460248201527324a72b20a624a22fa12627a1a5afa72aa6a122a960611b604482015290519081900360640190fd5b6001600160a01b0383166000908152602085905260409020548061175f576117578461093c565b915050610934565b6001600160a01b038416600090815260208781526040808320600019850184529091529020546001600160801b031683106117d2576001600160a01b038416600090815260208781526040808320600019909401835292905220546001600160801b03600160801b909104169050610934565b6001600160a01b0384166000908152602087815260408083208380529091529020546001600160801b031683101561180e576000915050610934565b600060001982015b818111156118c057600282820304810361182e611d48565b506001600160a01b038716600090815260208a815260408083208484528252918290208251808401909352546001600160801b03808216808552600160801b909204169183019190915287141561189857602001516001600160801b031694506109349350505050565b80516001600160801b03168711156118b2578193506118b9565b6001820392505b5050611816565b506001600160a01b0385166000908152602088815260408083209383529290522054600160801b90046001600160801b0316915050949350505050565b600061190a84603e6116b2565b9050600061191984603e6116b2565b905061192882828560006119f0565b60006119358660416116b2565b905060006119448660416116b2565b905061195382828760016119f0565b603c546001600160a01b031680156119e657806001600160a01b0316634a3931498989896040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156119cd57600080fd5b505af11580156119e1573d6000803e3d6000fd5b505050505b5050505050505050565b826001600160a01b0316846001600160a01b03161415611a0f57611bf9565b600080611a1b83611678565b5090925090506001600160a01b03861615611b0e576001600160a01b0386166000908152602082905260408120548015611a8c576001600160a01b03881660009081526020858152604080832060001985018452909152902054600160801b90046001600160801b03169150611a98565b611a958861093c565b91505b611aae84848a85611aa9818c611bff565b611c41565b6001600160a01b0388167fa0a19463ee116110c9b282012d9b65cc5522dc38a9520340cbaf3142e550127f611ae38489611bff565b8760405180838152602001826001811115611afa57fe5b81526020019250505060405180910390a250505b6001600160a01b03851615611bf6576001600160a01b0385166000908152602082905260408120548015611b79576001600160a01b03871660009081526020858152604080832060001985018452909152902054600160801b90046001600160801b03169150611b85565b611b828761093c565b91505b611b9684848985611aa9818c611506565b6001600160a01b0387167fa0a19463ee116110c9b282012d9b65cc5522dc38a9520340cbaf3142e550127f611bcb8489611506565b8760405180838152602001826001811115611be257fe5b81526020019250505060405180910390a250505b50505b50505050565b600061156083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061146f565b6001600160a01b03831660009081526020858152604080832054918890529091204391908115801590611c92575060001982016000908152602082905260409020546001600160801b038481169116145b15611cc7576000198201600090815260208290526040902080546001600160801b03808716600160801b0291161790556119e6565b6040805180820182526001600160801b038086168252868116602080840191825260008781528682528581209451855493518516600160801b029085166fffffffffffffffffffffffffffffffff1990941693909317909316919091179092556001600160a01b038916815290899052206001830190555050505050505050565b60408051808201909152600080825260208201529056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220de97f5642a5d2a6ad17ab293ee3697c796214b2f93ef2a4236d81ea186bdb2dc64736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/AaveToken__factory.ts b/libs/chains/src/eth/types/factories/AaveToken__factory.ts deleted file mode 100644 index 3c86ffe196b..00000000000 --- a/libs/chains/src/eth/types/factories/AaveToken__factory.ts +++ /dev/null @@ -1,542 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { AaveToken } from "../AaveToken"; - -export class AaveToken__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): AaveToken { - return super.attach(address) as AaveToken; - } - connect(signer: Signer): AaveToken__factory { - return super.connect(signer) as AaveToken__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AaveToken { - return new Contract(address, _abi, signerOrProvider) as AaveToken; - } -} - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: false, - internalType: "uint128", - name: "oldValue", - type: "uint128", - }, - { - indexed: false, - internalType: "uint128", - name: "newValue", - type: "uint128", - }, - ], - name: "SnapshotDone", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "EIP712_REVISION", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PERMIT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "REVISION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "_aaveGovernance", - outputs: [ - { - internalType: "contract ITransferHook", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "_countsSnapshots", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "_nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "_snapshots", - outputs: [ - { - internalType: "uint128", - name: "blockNumber", - type: "uint128", - }, - { - internalType: "uint128", - name: "value", - type: "uint128", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "migrator", - type: "address", - }, - { - internalType: "address", - name: "distributor", - type: "address", - }, - { - internalType: "contract ITransferHook", - name: "aaveGovernance", - type: "address", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405260006006553480156200001657600080fd5b50604080518082018252600a81526920b0bb32902a37b5b2b760b11b6020808301918252835180850190945260048452634141564560e01b908401528151919291620000659160039162000091565b5080516200007b90600490602084019062000091565b50506005805460ff19166012179055506200013d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620000c9576000855562000114565b82601f10620000e457805160ff191683800117855562000114565b8280016001018555821562000114579182015b8281111562000114578251825591602001919060010190620000f7565b506200012292915062000126565b5090565b5b8082111562000122576000815560010162000127565b611541806200014d6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806378160376116100b8578063b9844d8d1161007c578063b9844d8d146103b2578063c0c53b8b146103d8578063c3863ada14610412578063d505accf14610436578063dd62ed3e14610487578063dde43cba146104b557610137565b806378160376146103245780638779588c1461032c57806395d89b4114610352578063a457c2d71461035a578063a9059cbb1461038657610137565b806330adf81f116100ff57806330adf81f146102a4578063313ce567146102ac5780633644e515146102ca57806339509351146102d257806370a08231146102fe57610137565b806306fdde031461013c578063095ea7b3146101b957806318160ddd146101f957806323b872dd146102135780632acbf82314610249575b600080fd5b6101446104bd565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017e578181015183820152602001610166565b50505050905090810190601f1680156101ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e5600480360360408110156101cf57600080fd5b506001600160a01b038135169060200135610553565b604080519115158252519081900360200190f35b610201610570565b60408051918252519081900360200190f35b6101e56004803603606081101561022957600080fd5b506001600160a01b03813581169160208101359091169060400135610576565b6102756004803603604081101561025f57600080fd5b506001600160a01b0381351690602001356105fd565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b61020161062e565b6102b4610652565b6040805160ff9092168252519081900360200190f35b61020161065b565b6101e5600480360360408110156102e857600080fd5b506001600160a01b038135169060200135610661565b6102016004803603602081101561031457600080fd5b50356001600160a01b03166106af565b6101446106ca565b6102016004803603602081101561034257600080fd5b50356001600160a01b03166106e7565b6101446106f9565b6101e56004803603604081101561037057600080fd5b506001600160a01b03813516906020013561075a565b6101e56004803603604081101561039c57600080fd5b506001600160a01b0381351690602001356107c2565b610201600480360360208110156103c857600080fd5b50356001600160a01b03166107d6565b610410600480360360608110156103ee57600080fd5b506001600160a01b0381358116916020810135821691604090910135166107e8565b005b61041a6109b1565b604080516001600160a01b039092168252519081900360200190f35b610410600480360360e081101561044c57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356109c0565b6102016004803603604081101561049d57600080fd5b506001600160a01b0381358116916020013516610c07565b610201610c32565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105495780601f1061051e57610100808354040283529160200191610549565b820191906000526020600020905b81548152906001019060200180831161052c57829003601f168201915b5050505050905090565b6000610567610560610c37565b8484610c3b565b50600192915050565b60025490565b6000610583848484610d27565b6105f38461058f610c37565b6105ee85604051806060016040528060288152602001611448602891396001600160a01b038a166000908152600160205260408120906105cd610c37565b6001600160a01b031681526020810191909152604001600020549190610e82565b610c3b565b5060019392505050565b603a6020908152600092835260408084209091529082529020546001600160801b0380821691600160801b90041682565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b603d5481565b600061056761066e610c37565b846105ee856001600061067f610c37565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610f19565b6001600160a01b031660009081526020819052604090205490565b604051806040016040528060018152602001603160f81b81525081565b603b6020526000908152604090205481565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105495780601f1061051e57610100808354040283529160200191610549565b6000610567610767610c37565b846105ee856040518060600160405280602581526020016114e76025913960016000610791610c37565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610e82565b60006105676107cf610c37565b8484610d27565b60396020526000908152604090205481565b60006107f2610f7a565b905060065481116108345760405162461bcd60e51b815260040180806020018281038252602e815260200180611470602e913960400191505060405180910390fd5b6006819055604080518082018252600a8082526920b0bb32902a37b5b2b760b11b60209283018190528351808501855260018152603160f81b9084015283517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818501527fc79ca22c0992a4cca3636d52362fc61ce7d8001b81a7b225d701c42fb0636f32818601527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a0808401919091528651808403909101815260c0830180885281519190960120603d5561010082019095529282905260e09092019182526109309160039161133b565b50604080518082019091526004808252634141564560e01b602090920191825261095a918161133b565b506109656012610f7f565b603c80546001600160a01b0319166001600160a01b038516179055610995856a0ac0db698068112d000000610f95565b6109aa846a027b46536c66c8e3000000610f95565b5050505050565b603c546001600160a01b031681565b6001600160a01b038716610a0b576040805162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa7aba722a960991b604482015290519081900360640190fd5b83421115610a55576040805162461bcd60e51b815260206004820152601260248201527124a72b20a624a22fa2ac2824a920aa24a7a760711b604482015290519081900360640190fd5b6001600160a01b03808816600081815260396020908152604080832054603d5482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601835280519084012061190160f01b6101008701526101028601969096526101228086019690965281518086039096018652610142850180835286519684019690962093909552610162840180825283905260ff88166101828501526101a284018790526101c284018690525191926001926101e28083019392601f198301929081900390910190855afa158015610b6a573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b031614610bcd576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b610bd8826001610f19565b6001600160a01b038a16600090815260396020526040902055610bfc898989610c3b565b505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600181565b3390565b6001600160a01b038316610c805760405162461bcd60e51b81526004018080602001828103825260248152602001806114c36024913960400191505060405180910390fd5b6001600160a01b038216610cc55760405162461bcd60e51b81526004018080602001828103825260228152602001806114006022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610d6c5760405162461bcd60e51b815260040180806020018281038252602581526020018061149e6025913960400191505060405180910390fd5b6001600160a01b038216610db15760405162461bcd60e51b81526004018080602001828103825260238152602001806113dd6023913960400191505060405180910390fd5b610dbc838383611085565b610df981604051806060016040528060268152602001611422602691396001600160a01b0386166000908152602081905260409020549190610e82565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610e289082610f19565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610f115760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ed6578181015183820152602001610ebe565b50505050905090810190601f168015610f035780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610f73576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600190565b6005805460ff191660ff92909216919091179055565b6001600160a01b038216610ff0576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610ffc60008383611085565b6002546110099082610f19565b6002556001600160a01b03821660009081526020819052604090205461102f9082610f19565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b816001600160a01b0316836001600160a01b031614156110a457611198565b6001600160a01b038316156110d65760006110be846106af565b90506110d484826110cf818661119d565b6111df565b505b6001600160a01b038216156111035760006110f0836106af565b905061110183826110cf8186610f19565b505b603c546001600160a01b0316801561119657806001600160a01b0316634a3931498585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561117d57600080fd5b505af1158015611191573d6000803e3d6000fd5b505050505b505b505050565b6000610f7383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e82565b6001600160a01b0383166000908152603b6020908152604080832054603a9092529091204391908115801590611233575060001982016000908152602082905260409020546001600160801b038481169116145b15611268576000198201600090815260208290526040902080546001600160801b03808716600160801b0291161790556112e1565b6040805180820182526001600160801b038086168252868116602080840191825260008781528682528581209451855493518516600160801b029085166fffffffffffffffffffffffffffffffff1990941693909317909316919091179092556001600160a01b0389168152603b909152206001830190555b604080516001600160a01b03881681526001600160801b03808816602083015286168183015290517f2cd3c83ddac2953ee75f53265d9ea4463eaf05030e5459a1b7e63819b7ce88f79181900360600190a1505050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261137157600085556113b7565b82601f1061138a57805160ff19168380011785556113b7565b828001600101855582156113b7579182015b828111156113b757825182559160200191906001019061139c565b506113c39291506113c7565b5090565b5b808211156113c357600081556001016113c856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c1493cd58f4876c2a06be8072eb4231a03c6cf000fb20ae62469f58c1eec5ca564736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/AccessControl__factory.ts b/libs/chains/src/eth/types/factories/AccessControl__factory.ts deleted file mode 100644 index 1c780f7acd6..00000000000 --- a/libs/chains/src/eth/types/factories/AccessControl__factory.ts +++ /dev/null @@ -1,225 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { AccessControl } from "../AccessControl"; - -export class AccessControl__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): AccessControl { - return new Contract(address, _abi, signerOrProvider) as AccessControl; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - indexed: true, - internalType: "bytes32", - name: "previousAdminRole", - type: "bytes32", - }, - { - indexed: true, - internalType: "bytes32", - name: "newAdminRole", - type: "bytes32", - }, - ], - name: "RoleAdminChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "RoleGranted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "RoleRevoked", - type: "event", - }, - { - inputs: [], - name: "DEFAULT_ADMIN_ROLE", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - ], - name: "getRoleAdmin", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "grantRole", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasRole", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "renounceRole", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "revokeRole", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/BaseAdminUpgradeabilityProxy__factory.ts b/libs/chains/src/eth/types/factories/BaseAdminUpgradeabilityProxy__factory.ts deleted file mode 100644 index b14d4e63dd0..00000000000 --- a/libs/chains/src/eth/types/factories/BaseAdminUpgradeabilityProxy__factory.ts +++ /dev/null @@ -1,156 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { BaseAdminUpgradeabilityProxy } from "../BaseAdminUpgradeabilityProxy"; - -export class BaseAdminUpgradeabilityProxy__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): BaseAdminUpgradeabilityProxy { - return super.attach(address) as BaseAdminUpgradeabilityProxy; - } - connect(signer: Signer): BaseAdminUpgradeabilityProxy__factory { - return super.connect(signer) as BaseAdminUpgradeabilityProxy__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BaseAdminUpgradeabilityProxy { - return new Contract( - address, - _abi, - signerOrProvider - ) as BaseAdminUpgradeabilityProxy; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "previousAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "AdminChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "changeAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "implementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610652806100206000396000f3fe60806040526004361061004a5760003560e01c80633659cfe6146100545780634f1ef286146100875780635c60da1b146101075780638f28397014610138578063f851a4401461016b575b610052610180565b005b34801561006057600080fd5b506100526004803603602081101561007757600080fd5b50356001600160a01b031661019a565b6100526004803603604081101561009d57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100c857600080fd5b8201836020820111156100da57600080fd5b803590602001918460018302840111640100000000831117156100fc57600080fd5b5090925090506101d4565b34801561011357600080fd5b5061011c610281565b604080516001600160a01b039092168252519081900360200190f35b34801561014457600080fd5b506100526004803603602081101561015b57600080fd5b50356001600160a01b03166102be565b34801561017757600080fd5b5061011c610378565b6101886103a3565b610198610193610403565b610428565b565b6101a261044c565b6001600160a01b0316336001600160a01b031614156101c9576101c481610471565b6101d1565b6101d1610180565b50565b6101dc61044c565b6001600160a01b0316336001600160a01b03161415610274576101fe83610471565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d806000811461025b576040519150601f19603f3d011682016040523d82523d6000602084013e610260565b606091505b505090508061026e57600080fd5b5061027c565b61027c610180565b505050565b600061028b61044c565b6001600160a01b0316336001600160a01b031614156102b3576102ac610403565b90506102bb565b6102bb610180565b90565b6102c661044c565b6001600160a01b0316336001600160a01b031614156101c9576001600160a01b0381166103245760405162461bcd60e51b81526004018080602001828103825260368152602001806105ac6036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61034d61044c565b604080516001600160a01b03928316815291841660208301528051918290030190a16101c4816104b1565b600061038261044c565b6001600160a01b0316336001600160a01b031614156102b3576102ac61044c565b6103ab61044c565b6001600160a01b0316336001600160a01b031614156103fb5760405162461bcd60e51b815260040180806020018281038252603281526020018061057a6032913960400191505060405180910390fd5b610198610198565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015610447573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61047a816104d5565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6104de8161053d565b6105195760405162461bcd60e51b815260040180806020018281038252603b8152602001806105e2603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061057157508115155b94935050505056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a2646970667358221220cfe0ef50db6a668875331bc0482bd8a95b7b16befba4ad6e488800f28191bb9664736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/BaseUpgradeabilityProxy__factory.ts b/libs/chains/src/eth/types/factories/BaseUpgradeabilityProxy__factory.ts deleted file mode 100644 index d9e56aba8cf..00000000000 --- a/libs/chains/src/eth/types/factories/BaseUpgradeabilityProxy__factory.ts +++ /dev/null @@ -1,65 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { BaseUpgradeabilityProxy } from "../BaseUpgradeabilityProxy"; - -export class BaseUpgradeabilityProxy__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): BaseUpgradeabilityProxy { - return super.attach(address) as BaseUpgradeabilityProxy; - } - connect(signer: Signer): BaseUpgradeabilityProxy__factory { - return super.connect(signer) as BaseUpgradeabilityProxy__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): BaseUpgradeabilityProxy { - return new Contract( - address, - _abi, - signerOrProvider - ) as BaseUpgradeabilityProxy; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - stateMutability: "payable", - type: "fallback", - }, -]; - -const _bytecode = - "0x6080604052348015600f57600080fd5b50609e8061001e6000396000f3fe6080604052600a600c565b005b6012601e565b601e601a6020565b6045565b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156063573d6000f35b3d6000fdfea2646970667358221220e4901ea3762a7fb5b5f80384443773d099f4d8473d4418fed0d26a5bdc17d9f564736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/CompInterface__factory.ts b/libs/chains/src/eth/types/factories/CompInterface__factory.ts deleted file mode 100644 index a28eb96d1da..00000000000 --- a/libs/chains/src/eth/types/factories/CompInterface__factory.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { CompInterface } from "../CompInterface"; - -export class CompInterface__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): CompInterface { - return new Contract(address, _abi, signerOrProvider) as CompInterface; - } -} - -const _abi = [ - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPriorVotes", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/Context__factory.ts b/libs/chains/src/eth/types/factories/Context__factory.ts deleted file mode 100644 index 581bb1abca0..00000000000 --- a/libs/chains/src/eth/types/factories/Context__factory.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { Context } from "../Context"; - -export class Context__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Context { - return new Contract(address, _abi, signerOrProvider) as Context; - } -} - -const _abi = [ - { - inputs: [], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ERC1155Mintable__factory.ts b/libs/chains/src/eth/types/factories/ERC1155Mintable__factory.ts deleted file mode 100644 index 95228c91165..00000000000 --- a/libs/chains/src/eth/types/factories/ERC1155Mintable__factory.ts +++ /dev/null @@ -1,388 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Signer, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { ERC1155Mintable } from "../ERC1155Mintable"; - -export class ERC1155Mintable__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): ERC1155Mintable { - return super.attach(address) as ERC1155Mintable; - } - connect(signer: Signer): ERC1155Mintable__factory { - return super.connect(signer) as ERC1155Mintable__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC1155Mintable { - return new Contract(address, _abi, signerOrProvider) as ERC1155Mintable; - } -} - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - ], - name: "TransferBatch", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "TransferSingle", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "value", - type: "string", - }, - { - indexed: true, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "URI", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "accounts", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - ], - name: "balanceOfBatch", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeBatchTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "uri", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060408051808201909152600a8152696377546573742075726960b01b60208201526200003e8162000045565b5062000141565b80516200005a9060029060208401906200005e565b5050565b8280546200006c9062000104565b90600052602060002090601f016020900481019282620000905760008555620000db565b82601f10620000ab57805160ff1916838001178555620000db565b82800160010185558215620000db579182015b82811115620000db578251825591602001919060010190620000be565b50620000e9929150620000ed565b5090565b5b80821115620000e95760008155600101620000ee565b600181811c908216806200011957607f821691505b602082108114156200013b57634e487b7160e01b600052602260045260246000fd5b50919050565b61156380620001516000396000f3fe608060405234801561001057600080fd5b50600436106100925760003560e01c80634e1273f4116100665780634e1273f414610115578063731133e914610135578063a22cb46514610148578063e985e9c51461015b578063f242432a1461019757600080fd5b8062fdd58e1461009757806301ffc9a7146100bd5780630e89341c146100e05780632eb2c2d614610100575b600080fd5b6100aa6100a5366004610f61565b6101aa565b6040519081526020015b60405180910390f35b6100d06100cb3660046110bd565b610241565b60405190151581526020016100b4565b6100f36100ee3660046110fe565b610293565b6040516100b49190611283565b61011361010e366004610e16565b610327565b005b610128610123366004610fec565b6103be565b6040516100b49190611242565b610113610143366004610f8b565b6104e8565b610113610156366004610f25565b6104fa565b6100d0610169366004610de3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101136101a5366004610ec0565b6105d1565b60006001600160a01b03831661021b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061027257506001600160e01b031982166303a24d0760e21b145b8061028d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546102a2906113a9565b80601f01602080910402602001604051908101604052809291908181526020018280546102ce906113a9565b801561031b5780601f106102f05761010080835404028352916020019161031b565b820191906000526020600020905b8154815290600101906020018083116102fe57829003601f168201915b50505050509050919050565b6001600160a01b03851633148061034357506103438533610169565b6103aa5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610212565b6103b78585858585610658565b5050505050565b606081518351146104235760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610212565b6000835167ffffffffffffffff81111561043f5761043f611458565b604051908082528060200260200182016040528015610468578160200160208202803683370190505b50905060005b84518110156104e0576104b385828151811061048c5761048c611442565b60200260200101518583815181106104a6576104a6611442565b60200260200101516101aa565b8282815181106104c5576104c5611442565b60209081029190910101526104d981611411565b905061046e565b509392505050565b6104f484848484610835565b50505050565b336001600160a01b03831614156105655760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610212565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b0385163314806105ed57506105ed8533610169565b61064b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610212565b6103b7858585858561093f565b81518351146106ba5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610212565b6001600160a01b0384166106e05760405162461bcd60e51b8152600401610212906112de565b3360005b84518110156107c757600085828151811061070157610701611442565b60200260200101519050600085838151811061071f5761071f611442565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561076f5760405162461bcd60e51b815260040161021290611323565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906107ac908490611391565b92505081905550505050806107c090611411565b90506106e4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610817929190611255565b60405180910390a461082d818787878787610a5c565b505050505050565b6001600160a01b0384166108955760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610212565b336108af816000876108a688610bc7565b6103b788610bc7565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906108df908490611391565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46103b781600087878787610c12565b6001600160a01b0384166109655760405162461bcd60e51b8152600401610212906112de565b336109758187876108a688610bc7565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156109b65760405162461bcd60e51b815260040161021290611323565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906109f3908490611391565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610a53828888888888610c12565b50505050505050565b6001600160a01b0384163b1561082d5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610aa0908990899088908890889060040161119f565b602060405180830381600087803b158015610aba57600080fd5b505af1925050508015610aea575060408051601f3d908101601f19168201909252610ae7918101906110e1565b60015b610b9757610af661146e565b806308c379a01415610b305750610b0b61148a565b80610b165750610b32565b8060405162461bcd60e51b81526004016102129190611283565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610212565b6001600160e01b0319811663bc197c8160e01b14610a535760405162461bcd60e51b815260040161021290611296565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610c0157610c01611442565b602090810291909101015292915050565b6001600160a01b0384163b1561082d5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610c5690899089908890889088906004016111fd565b602060405180830381600087803b158015610c7057600080fd5b505af1925050508015610ca0575060408051601f3d908101601f19168201909252610c9d918101906110e1565b60015b610cac57610af661146e565b6001600160e01b0319811663f23a6e6160e01b14610a535760405162461bcd60e51b815260040161021290611296565b80356001600160a01b0381168114610cf357600080fd5b919050565b600082601f830112610d0957600080fd5b81356020610d168261136d565b604051610d2382826113e4565b8381528281019150858301600585901b87018401881015610d4357600080fd5b60005b85811015610d6257813584529284019290840190600101610d46565b5090979650505050505050565b600082601f830112610d8057600080fd5b813567ffffffffffffffff811115610d9a57610d9a611458565b604051610db1601f8301601f1916602001826113e4565b818152846020838601011115610dc657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610df657600080fd5b610dff83610cdc565b9150610e0d60208401610cdc565b90509250929050565b600080600080600060a08688031215610e2e57600080fd5b610e3786610cdc565b9450610e4560208701610cdc565b9350604086013567ffffffffffffffff80821115610e6257600080fd5b610e6e89838a01610cf8565b94506060880135915080821115610e8457600080fd5b610e9089838a01610cf8565b93506080880135915080821115610ea657600080fd5b50610eb388828901610d6f565b9150509295509295909350565b600080600080600060a08688031215610ed857600080fd5b610ee186610cdc565b9450610eef60208701610cdc565b93506040860135925060608601359150608086013567ffffffffffffffff811115610f1957600080fd5b610eb388828901610d6f565b60008060408385031215610f3857600080fd5b610f4183610cdc565b915060208301358015158114610f5657600080fd5b809150509250929050565b60008060408385031215610f7457600080fd5b610f7d83610cdc565b946020939093013593505050565b60008060008060808587031215610fa157600080fd5b610faa85610cdc565b93506020850135925060408501359150606085013567ffffffffffffffff811115610fd457600080fd5b610fe087828801610d6f565b91505092959194509250565b60008060408385031215610fff57600080fd5b823567ffffffffffffffff8082111561101757600080fd5b818501915085601f83011261102b57600080fd5b813560206110388261136d565b60405161104582826113e4565b8381528281019150858301600585901b870184018b101561106557600080fd5b600096505b8487101561108f5761107b81610cdc565b83526001969096019591830191830161106a565b50965050860135925050808211156110a657600080fd5b506110b385828601610cf8565b9150509250929050565b6000602082840312156110cf57600080fd5b81356110da81611514565b9392505050565b6000602082840312156110f357600080fd5b81516110da81611514565b60006020828403121561111057600080fd5b5035919050565b600081518084526020808501945080840160005b838110156111475781518752958201959082019060010161112b565b509495945050505050565b6000815180845260005b818110156111785760208185018101518683018201520161115c565b8181111561118a576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a0604082018190526000906111cb90830186611117565b82810360608401526111dd8186611117565b905082810360808401526111f18185611152565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061123790830184611152565b979650505050505050565b6020815260006110da6020830184611117565b6040815260006112686040830185611117565b828103602084015261127a8185611117565b95945050505050565b6020815260006110da6020830184611152565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b600067ffffffffffffffff82111561138757611387611458565b5060051b60200190565b600082198211156113a4576113a461142c565b500190565b600181811c908216806113bd57607f821691505b602082108114156113de57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561140a5761140a611458565b6040525050565b60006000198214156114255761142561142c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156114875760046000803e5060005160e01c5b90565b600060443d10156114985790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156114c857505050505090565b82850191508151818111156114e05750505050505090565b843d87010160208285010111156114fa5750505050505090565b611509602082860101876113e4565b509095945050505050565b6001600160e01b03198116811461152a57600080fd5b5056fea26469706673582212200baa1e8a94de832a8099c00316e2d68a09a1f8441a553a352a1c2aea7cd0377064736f6c63430008070033"; diff --git a/libs/chains/src/eth/types/factories/ERC1155__factory.ts b/libs/chains/src/eth/types/factories/ERC1155__factory.ts deleted file mode 100644 index 1efd262c992..00000000000 --- a/libs/chains/src/eth/types/factories/ERC1155__factory.ts +++ /dev/null @@ -1,368 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Signer, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { ERC1155 } from "../ERC1155"; - -export class ERC1155__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - uri_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(uri_, overrides || {}) as Promise; - } - getDeployTransaction( - uri_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(uri_, overrides || {}); - } - attach(address: string): ERC1155 { - return super.attach(address) as ERC1155; - } - connect(signer: Signer): ERC1155__factory { - return super.connect(signer) as ERC1155__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC1155 { - return new Contract(address, _abi, signerOrProvider) as ERC1155; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "uri_", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - ], - name: "TransferBatch", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "TransferSingle", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "value", - type: "string", - }, - { - indexed: true, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "URI", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "accounts", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - ], - name: "balanceOfBatch", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeBatchTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "uri", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200161538038062001615833981016040819052620000349162000105565b6200003f8162000046565b5062000234565b80516200005b9060029060208401906200005f565b5050565b8280546200006d90620001e1565b90600052602060002090601f016020900481019282620000915760008555620000dc565b82601f10620000ac57805160ff1916838001178555620000dc565b82800160010185558215620000dc579182015b82811115620000dc578251825591602001919060010190620000bf565b50620000ea929150620000ee565b5090565b5b80821115620000ea5760008155600101620000ef565b600060208083850312156200011957600080fd5b82516001600160401b03808211156200013157600080fd5b818501915085601f8301126200014657600080fd5b8151818111156200015b576200015b6200021e565b604051601f8201601f19908116603f011681019083821181831017156200018657620001866200021e565b8160405282815288868487010111156200019f57600080fd5b600093505b82841015620001c35784840186015181850187015292850192620001a4565b82841115620001d55760008684830101525b98975050505050505050565b600181811c90821680620001f657607f821691505b602082108114156200021857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6113d180620002446000396000f3fe608060405234801561001057600080fd5b50600436106100875760003560e01c80634e1273f41161005b5780634e1273f41461010a578063a22cb4651461012a578063e985e9c51461013d578063f242432a1461017957600080fd5b8062fdd58e1461008c57806301ffc9a7146100b25780630e89341c146100d55780632eb2c2d6146100f5575b600080fd5b61009f61009a366004610e30565b61018c565b6040519081526020015b60405180910390f35b6100c56100c0366004610f2b565b610223565b60405190151581526020016100a9565b6100e86100e3366004610f6c565b610275565b6040516100a991906110f1565b610108610103366004610ce5565b610309565b005b61011d610118366004610e5a565b6103a0565b6040516100a991906110b0565b610108610138366004610df4565b6104ca565b6100c561014b366004610cb2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b610108610187366004610d8f565b6105a1565b60006001600160a01b0383166101fd5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061025457506001600160e01b031982166303a24d0760e21b145b8061026f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461028490611217565b80601f01602080910402602001604051908101604052809291908181526020018280546102b090611217565b80156102fd5780601f106102d2576101008083540402835291602001916102fd565b820191906000526020600020905b8154815290600101906020018083116102e057829003601f168201915b50505050509050919050565b6001600160a01b0385163314806103255750610325853361014b565b61038c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016101f4565b6103998585858585610628565b5050505050565b606081518351146104055760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016101f4565b6000835167ffffffffffffffff811115610421576104216112c6565b60405190808252806020026020018201604052801561044a578160200160208202803683370190505b50905060005b84518110156104c25761049585828151811061046e5761046e6112b0565b6020026020010151858381518110610488576104886112b0565b602002602001015161018c565b8282815181106104a7576104a76112b0565b60209081029190910101526104bb8161127f565b9050610450565b509392505050565b336001600160a01b03831614156105355760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016101f4565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b0385163314806105bd57506105bd853361014b565b61061b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016101f4565b6103998585858585610805565b815183511461068a5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016101f4565b6001600160a01b0384166106b05760405162461bcd60e51b81526004016101f49061114c565b3360005b84518110156107975760008582815181106106d1576106d16112b0565b6020026020010151905060008583815181106106ef576106ef6112b0565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561073f5760405162461bcd60e51b81526004016101f490611191565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061077c9084906111ff565b92505081905550505050806107909061127f565b90506106b4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516107e79291906110c3565b60405180910390a46107fd81878787878761092b565b505050505050565b6001600160a01b03841661082b5760405162461bcd60e51b81526004016101f49061114c565b3361084481878761083b88610a96565b61039988610a96565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156108855760405162461bcd60e51b81526004016101f490611191565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906108c29084906111ff565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610922828888888888610ae1565b50505050505050565b6001600160a01b0384163b156107fd5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061096f908990899088908890889060040161100d565b602060405180830381600087803b15801561098957600080fd5b505af19250505080156109b9575060408051601f3d908101601f191682019092526109b691810190610f4f565b60015b610a66576109c56112dc565b806308c379a014156109ff57506109da6112f8565b806109e55750610a01565b8060405162461bcd60e51b81526004016101f491906110f1565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016101f4565b6001600160e01b0319811663bc197c8160e01b146109225760405162461bcd60e51b81526004016101f490611104565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610ad057610ad06112b0565b602090810291909101015292915050565b6001600160a01b0384163b156107fd5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610b25908990899088908890889060040161106b565b602060405180830381600087803b158015610b3f57600080fd5b505af1925050508015610b6f575060408051601f3d908101601f19168201909252610b6c91810190610f4f565b60015b610b7b576109c56112dc565b6001600160e01b0319811663f23a6e6160e01b146109225760405162461bcd60e51b81526004016101f490611104565b80356001600160a01b0381168114610bc257600080fd5b919050565b600082601f830112610bd857600080fd5b81356020610be5826111db565b604051610bf28282611252565b8381528281019150858301600585901b87018401881015610c1257600080fd5b60005b85811015610c3157813584529284019290840190600101610c15565b5090979650505050505050565b600082601f830112610c4f57600080fd5b813567ffffffffffffffff811115610c6957610c696112c6565b604051610c80601f8301601f191660200182611252565b818152846020838601011115610c9557600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610cc557600080fd5b610cce83610bab565b9150610cdc60208401610bab565b90509250929050565b600080600080600060a08688031215610cfd57600080fd5b610d0686610bab565b9450610d1460208701610bab565b9350604086013567ffffffffffffffff80821115610d3157600080fd5b610d3d89838a01610bc7565b94506060880135915080821115610d5357600080fd5b610d5f89838a01610bc7565b93506080880135915080821115610d7557600080fd5b50610d8288828901610c3e565b9150509295509295909350565b600080600080600060a08688031215610da757600080fd5b610db086610bab565b9450610dbe60208701610bab565b93506040860135925060608601359150608086013567ffffffffffffffff811115610de857600080fd5b610d8288828901610c3e565b60008060408385031215610e0757600080fd5b610e1083610bab565b915060208301358015158114610e2557600080fd5b809150509250929050565b60008060408385031215610e4357600080fd5b610e4c83610bab565b946020939093013593505050565b60008060408385031215610e6d57600080fd5b823567ffffffffffffffff80821115610e8557600080fd5b818501915085601f830112610e9957600080fd5b81356020610ea6826111db565b604051610eb38282611252565b8381528281019150858301600585901b870184018b1015610ed357600080fd5b600096505b84871015610efd57610ee981610bab565b835260019690960195918301918301610ed8565b5096505086013592505080821115610f1457600080fd5b50610f2185828601610bc7565b9150509250929050565b600060208284031215610f3d57600080fd5b8135610f4881611382565b9392505050565b600060208284031215610f6157600080fd5b8151610f4881611382565b600060208284031215610f7e57600080fd5b5035919050565b600081518084526020808501945080840160005b83811015610fb557815187529582019590820190600101610f99565b509495945050505050565b6000815180845260005b81811015610fe657602081850181015186830182015201610fca565b81811115610ff8576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061103990830186610f85565b828103606084015261104b8186610f85565b9050828103608084015261105f8185610fc0565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906110a590830184610fc0565b979650505050505050565b602081526000610f486020830184610f85565b6040815260006110d66040830185610f85565b82810360208401526110e88185610f85565b95945050505050565b602081526000610f486020830184610fc0565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b600067ffffffffffffffff8211156111f5576111f56112c6565b5060051b60200190565b600082198211156112125761121261129a565b500190565b600181811c9082168061122b57607f821691505b6020821081141561124c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611278576112786112c6565b6040525050565b60006000198214156112935761129361129a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156112f55760046000803e5060005160e01c5b90565b600060443d10156113065790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561133657505050505090565b828501915081518181111561134e5750505050505090565b843d87010160208285010111156113685750505050505090565b61137760208286010187611252565b509095945050505050565b6001600160e01b03198116811461139857600080fd5b5056fea2646970667358221220e73389f42c653a691ac7ee8ccd5e58660c95618d40722b6c0d4a9ec21802941264736f6c63430008070033"; diff --git a/libs/chains/src/eth/types/factories/ERC165__factory.ts b/libs/chains/src/eth/types/factories/ERC165__factory.ts deleted file mode 100644 index 9bc11dc875b..00000000000 --- a/libs/chains/src/eth/types/factories/ERC165__factory.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { ERC165 } from "../ERC165"; - -export class ERC165__factory { - static connect(address: string, signerOrProvider: Signer | Provider): ERC165 { - return new Contract(address, _abi, signerOrProvider) as ERC165; - } -} - -const _abi = [ - { - inputs: [], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - constant: true, - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ERC20Permit__factory.ts b/libs/chains/src/eth/types/factories/ERC20Permit__factory.ts deleted file mode 100644 index 84bc4b04894..00000000000 --- a/libs/chains/src/eth/types/factories/ERC20Permit__factory.ts +++ /dev/null @@ -1,366 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { ERC20Permit } from "../ERC20Permit"; - -export class ERC20Permit__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC20Permit { - return new Contract(address, _abi, signerOrProvider) as ERC20Permit; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ERC20VotesComp__factory.ts b/libs/chains/src/eth/types/factories/ERC20VotesComp__factory.ts deleted file mode 100644 index 520871a45f6..00000000000 --- a/libs/chains/src/eth/types/factories/ERC20VotesComp__factory.ts +++ /dev/null @@ -1,646 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { ERC20VotesComp } from "../ERC20VotesComp"; - -export class ERC20VotesComp__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC20VotesComp { - return new Contract(address, _abi, signerOrProvider) as ERC20VotesComp; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "fromDelegate", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "toDelegate", - type: "address", - }, - ], - name: "DelegateChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegate", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "previousBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newBalance", - type: "uint256", - }, - ], - name: "DelegateVotesChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint32", - name: "pos", - type: "uint32", - }, - ], - name: "checkpoints", - outputs: [ - { - components: [ - { - internalType: "uint32", - name: "fromBlock", - type: "uint32", - }, - { - internalType: "uint224", - name: "votes", - type: "uint224", - }, - ], - internalType: "struct ERC20Votes.Checkpoint", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - ], - name: "delegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "delegateBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "delegates", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getCurrentVotes", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPastTotalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPastVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPriorVotes", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "numCheckpoints", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ERC20VotesMock__factory.ts b/libs/chains/src/eth/types/factories/ERC20VotesMock__factory.ts deleted file mode 100644 index 1f1c534ead2..00000000000 --- a/libs/chains/src/eth/types/factories/ERC20VotesMock__factory.ts +++ /dev/null @@ -1,699 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { ERC20VotesMock } from "../ERC20VotesMock"; - -export class ERC20VotesMock__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - name: string, - symbol: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - name, - symbol, - overrides || {} - ) as Promise; - } - getDeployTransaction( - name: string, - symbol: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(name, symbol, overrides || {}); - } - attach(address: string): ERC20VotesMock { - return super.attach(address) as ERC20VotesMock; - } - connect(signer: Signer): ERC20VotesMock__factory { - return super.connect(signer) as ERC20VotesMock__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC20VotesMock { - return new Contract(address, _abi, signerOrProvider) as ERC20VotesMock; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name", - type: "string", - }, - { - internalType: "string", - name: "symbol", - type: "string", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "fromDelegate", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "toDelegate", - type: "address", - }, - ], - name: "DelegateChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegate", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "previousBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newBalance", - type: "uint256", - }, - ], - name: "DelegateVotesChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "burn", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint32", - name: "pos", - type: "uint32", - }, - ], - name: "checkpoints", - outputs: [ - { - components: [ - { - internalType: "uint32", - name: "fromBlock", - type: "uint32", - }, - { - internalType: "uint224", - name: "votes", - type: "uint224", - }, - ], - internalType: "struct ERC20Votes.Checkpoint", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - ], - name: "delegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "delegateBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "delegates", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getChainId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPastTotalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPastVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "numCheckpoints", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x6101406040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b5060405162002163380380620021638339810160408190526200005a9162000299565b8180604051806040016040528060018152602001603160f81b81525084848160039080519060200190620000909291906200013c565b508051620000a69060049060208401906200013c565b5050825160209384012082519284019290922060c083815260e08290524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818a0181905281830198909852606081019590955260808086019390935230858301528051808603909201825293909201909252805194019390932090925261010052506200035692505050565b8280546200014a9062000303565b90600052602060002090601f0160209004810192826200016e5760008555620001b9565b82601f106200018957805160ff1916838001178555620001b9565b82800160010185558215620001b9579182015b82811115620001b95782518255916020019190600101906200019c565b50620001c7929150620001cb565b5090565b5b80821115620001c75760008155600101620001cc565b600082601f830112620001f457600080fd5b81516001600160401b038082111562000211576200021162000340565b604051601f8301601f19908116603f011681019082821181831017156200023c576200023c62000340565b816040528381526020925086838588010111156200025957600080fd5b600091505b838210156200027d57858201830151818301840152908201906200025e565b838211156200028f5760008385830101525b9695505050505050565b60008060408385031215620002ad57600080fd5b82516001600160401b0380821115620002c557600080fd5b620002d386838701620001e2565b93506020850151915080821115620002ea57600080fd5b50620002f985828601620001e2565b9150509250929050565b600181811c908216806200031857607f821691505b602082108114156200033a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160e0516101005161012051611dbd620003a6600039600061099d01526000610e8501526000610ed401526000610eaf01526000610e3301526000610e5c0152611dbd6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636fcfff45116100de5780639dc29fac11610097578063c3cda52011610071578063c3cda52014610358578063d505accf1461036b578063dd62ed3e1461037e578063f1127ed8146103b757600080fd5b80639dc29fac1461031f578063a457c2d714610332578063a9059cbb1461034557600080fd5b80636fcfff451461028d57806370a08231146102b55780637ecebe00146102de5780638e539e8c146102f157806395d89b41146103045780639ab24eb01461030c57600080fd5b80633644e515116101305780633644e515146101f357806339509351146101fb5780633a46b1a81461020e57806340c10f1914610221578063587cde1e146102365780635c19a95c1461027a57600080fd5b806306fdde0314610178578063095ea7b31461019657806318160ddd146101b957806323b872dd146101cb578063313ce567146101de5780633408e470146101ed575b600080fd5b6101806103f4565b60405161018d9190611c6a565b60405180910390f35b6101a96101a4366004611b8f565b610486565b604051901515815260200161018d565b6002545b60405190815260200161018d565b6101a96101d9366004611ae9565b61049c565b6040516012815260200161018d565b466101bd565b6101bd61054b565b6101a9610209366004611b8f565b61055a565b6101bd61021c366004611b8f565b610596565b61023461022f366004611b8f565b610610565b005b610262610244366004611a9b565b6001600160a01b039081166000908152600660205260409020541690565b6040516001600160a01b03909116815260200161018d565b610234610288366004611a9b565b61061e565b6102a061029b366004611a9b565b61062b565b60405163ffffffff909116815260200161018d565b6101bd6102c3366004611a9b565b6001600160a01b031660009081526020819052604090205490565b6101bd6102ec366004611a9b565b610653565b6101bd6102ff366004611c51565b610671565b6101806106cd565b6101bd61031a366004611a9b565b6106dc565b61023461032d366004611b8f565b610763565b6101a9610340366004611b8f565b61076d565b6101a9610353366004611b8f565b610806565b610234610366366004611bb9565b610813565b610234610379366004611b25565b610949565b6101bd61038c366004611ab6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6103ca6103c5366004611c11565b610aad565b60408051825163ffffffff1681526020928301516001600160e01b0316928101929092520161018d565b60606003805461040390611d10565b80601f016020809104026020016040519081016040528092919081815260200182805461042f90611d10565b801561047c5780601f106104515761010080835404028352916020019161047c565b820191906000526020600020905b81548152906001019060200180831161045f57829003601f168201915b5050505050905090565b6000610493338484610b31565b50600192915050565b60006104a9848484610c55565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156105335760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6105408533858403610b31565b506001949350505050565b6000610555610e2f565b905090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610493918590610591908690611cbf565b610b31565b60004382106105e75760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161052a565b6001600160a01b03831660009081526007602052604090206106099083610f22565b9392505050565b61061a8282610fdf565b5050565b6106283382611069565b50565b6001600160a01b03811660009081526007602052604081205461064d906110e2565b92915050565b6001600160a01b03811660009081526005602052604081205461064d565b60004382106106c25760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161052a565b61064d600883610f22565b60606004805461040390611d10565b6001600160a01b0381166000908152600760205260408120548015610750576001600160a01b038316600090815260076020526040902061071e600183611cf9565b8154811061072e5761072e611d71565b60009182526020909120015464010000000090046001600160e01b0316610753565b60005b6001600160e01b03169392505050565b61061a828261114b565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156107ef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161052a565b6107fc3385858403610b31565b5060019392505050565b6000610493338484610c55565b834211156108635760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e61747572652065787069726564000000604482015260640161052a565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906108dd906108d59060a00160405160208183030381529060405280519060200120611163565b8585856111b1565b90506108e8816111d9565b86146109365760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000604482015260640161052a565b6109408188611069565b50505050505050565b834211156109995760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161052a565b60007f00000000000000000000000000000000000000000000000000000000000000008888886109c88c6111d9565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610a2382611163565b90506000610a33828787876111b1565b9050896001600160a01b0316816001600160a01b031614610a965760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161052a565b610aa18a8a8a610b31565b50505050505050505050565b60408051808201909152600080825260208201526001600160a01b0383166000908152600760205260409020805463ffffffff8416908110610af157610af1611d71565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6001600160a01b038316610b935760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161052a565b6001600160a01b038216610bf45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161052a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610cb95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161052a565b6001600160a01b038216610d1b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161052a565b6001600160a01b03831660009081526020819052604090205481811015610d935760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161052a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610dca908490611cbf565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e1691815260200190565b60405180910390a3610e29848484611206565b50505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610e7e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8154600090815b81811015610f86576000610f3d8284611238565b905084868281548110610f5257610f52611d71565b60009182526020909120015463ffffffff161115610f7257809250610f80565b610f7d816001611cbf565b91505b50610f29565b8115610fca5784610f98600184611cf9565b81548110610fa857610fa8611d71565b60009182526020909120015464010000000090046001600160e01b0316610fcd565b60005b6001600160e01b031695945050505050565b610fe98282611253565b6002546001600160e01b03101561105b5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b606482015260840161052a565b610e29600861133a83611346565b6001600160a01b038281166000818152600660208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610e298284836114bf565b600063ffffffff8211156111475760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b606482015260840161052a565b5090565b61115582826115fc565b610e29600861175183611346565b600061064d611170610e2f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006111c28787878761175d565b915091506111cf8161184a565b5095945050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b505050565b6001600160a01b03838116600090815260066020526040808220548584168352912054611201929182169116836114bf565b60006112476002848418611cd7565b61060990848416611cbf565b6001600160a01b0382166112a95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b80600260008282546112bb9190611cbf565b90915550506001600160a01b038216600090815260208190526040812080548392906112e8908490611cbf565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361061a60008383611206565b60006106098284611cbf565b825460009081908015611391578561135f600183611cf9565b8154811061136f5761136f611d71565b60009182526020909120015464010000000090046001600160e01b0316611394565b60005b6001600160e01b031692506113ad83858763ffffffff16565b91506000811180156113eb575043866113c7600184611cf9565b815481106113d7576113d7611d71565b60009182526020909120015463ffffffff16145b1561144b576113f982611a05565b86611405600184611cf9565b8154811061141557611415611d71565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b031602179055506114b6565b856040518060400160405280611460436110e2565b63ffffffff16815260200161147485611a05565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b816001600160a01b0316836001600160a01b0316141580156114e15750600081115b15611201576001600160a01b0383161561156f576001600160a01b0383166000908152600760205260408120819061151c9061175185611346565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611564929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611201576001600160a01b038216600090815260076020526040812081906115a59061133a85611346565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516115ed929190918252602082015260400190565b60405180910390a25050505050565b6001600160a01b03821661165c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161052a565b6001600160a01b038216600090815260208190526040902054818110156116d05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161052a565b6001600160a01b03831660009081526020819052604081208383039055600280548492906116ff908490611cf9565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361120183600084611206565b60006106098284611cf9565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117945750600090506003611841565b8460ff16601b141580156117ac57508460ff16601c14155b156117bd5750600090506004611841565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611811573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661183a57600060019250925050611841565b9150600090505b94509492505050565b600081600481111561185e5761185e611d5b565b14156118675750565b600181600481111561187b5761187b611d5b565b14156118c95760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161052a565b60028160048111156118dd576118dd611d5b565b141561192b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161052a565b600381600481111561193f5761193f611d5b565b14156119985760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161052a565b60048160048111156119ac576119ac611d5b565b14156106285760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161052a565b60006001600160e01b038211156111475760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b606482015260840161052a565b80356001600160a01b0381168114611a8557600080fd5b919050565b803560ff81168114611a8557600080fd5b600060208284031215611aad57600080fd5b61060982611a6e565b60008060408385031215611ac957600080fd5b611ad283611a6e565b9150611ae060208401611a6e565b90509250929050565b600080600060608486031215611afe57600080fd5b611b0784611a6e565b9250611b1560208501611a6e565b9150604084013590509250925092565b600080600080600080600060e0888a031215611b4057600080fd5b611b4988611a6e565b9650611b5760208901611a6e565b95506040880135945060608801359350611b7360808901611a8a565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611ba257600080fd5b611bab83611a6e565b946020939093013593505050565b60008060008060008060c08789031215611bd257600080fd5b611bdb87611a6e565b95506020870135945060408701359350611bf760608801611a8a565b92506080870135915060a087013590509295509295509295565b60008060408385031215611c2457600080fd5b611c2d83611a6e565b9150602083013563ffffffff81168114611c4657600080fd5b809150509250929050565b600060208284031215611c6357600080fd5b5035919050565b600060208083528351808285015260005b81811015611c9757858101830151858201604001528201611c7b565b81811115611ca9576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115611cd257611cd2611d45565b500190565b600082611cf457634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611d0b57611d0b611d45565b500390565b600181811c90821680611d2457607f821691505b602082108114156111fb57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220097932f5722829bba0010d22eebfc56215ba68c55daee0644f0bba8ec450d1db64736f6c63430008070033"; diff --git a/libs/chains/src/eth/types/factories/ERC20Votes__factory.ts b/libs/chains/src/eth/types/factories/ERC20Votes__factory.ts deleted file mode 100644 index 10488b58f82..00000000000 --- a/libs/chains/src/eth/types/factories/ERC20Votes__factory.ts +++ /dev/null @@ -1,603 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { ERC20Votes } from "../ERC20Votes"; - -export class ERC20Votes__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC20Votes { - return new Contract(address, _abi, signerOrProvider) as ERC20Votes; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "fromDelegate", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "toDelegate", - type: "address", - }, - ], - name: "DelegateChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegate", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "previousBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newBalance", - type: "uint256", - }, - ], - name: "DelegateVotesChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint32", - name: "pos", - type: "uint32", - }, - ], - name: "checkpoints", - outputs: [ - { - components: [ - { - internalType: "uint32", - name: "fromBlock", - type: "uint32", - }, - { - internalType: "uint224", - name: "votes", - type: "uint224", - }, - ], - internalType: "struct ERC20Votes.Checkpoint", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - ], - name: "delegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "delegateBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "delegates", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPastTotalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPastVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "numCheckpoints", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ERC20__factory.ts b/libs/chains/src/eth/types/factories/ERC20__factory.ts deleted file mode 100644 index cd5ec88acaf..00000000000 --- a/libs/chains/src/eth/types/factories/ERC20__factory.ts +++ /dev/null @@ -1,288 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { ERC20 } from "../ERC20"; - -export class ERC20__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): ERC20 { - return super.attach(address) as ERC20; - } - connect(signer: Signer): ERC20__factory { - return super.connect(signer) as ERC20__factory; - } - static connect(address: string, signerOrProvider: Signer | Provider): ERC20 { - return new Contract(address, _abi, signerOrProvider) as ERC20; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506104e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0823114610149578063a457c2d71461016f578063a9059cbb1461019b578063dd62ed3e146101c757610088565b8063095ea7b31461008d57806318160ddd146100cd57806323b872dd146100e7578063395093511461011d575b600080fd5b6100b9600480360360408110156100a357600080fd5b506001600160a01b0381351690602001356101f5565b604080519115158252519081900360200190f35b6100d561020b565b60408051918252519081900360200190f35b6100b9600480360360608110156100fd57600080fd5b506001600160a01b03813581169160208101359091169060400135610211565b6100b96004803603604081101561013357600080fd5b506001600160a01b038135169060200135610268565b6100d56004803603602081101561015f57600080fd5b50356001600160a01b03166102a4565b6100b96004803603604081101561018557600080fd5b506001600160a01b0381351690602001356102bf565b6100b9600480360360408110156101b157600080fd5b506001600160a01b0381351690602001356102fb565b6100d5600480360360408110156101dd57600080fd5b506001600160a01b0381358116916020013516610308565b6000610202338484610333565b50600192915050565b60025490565b600061021e8484846103bb565b6001600160a01b03841660009081526001602090815260408083203380855292529091205461025e918691610259908663ffffffff61048616565b610333565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610202918590610259908663ffffffff61049b16565b6001600160a01b031660009081526020819052604090205490565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610202918590610259908663ffffffff61048616565b60006102023384846103bb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03821661034657600080fd5b6001600160a01b03831661035957600080fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0382166103ce57600080fd5b6001600160a01b0383166000908152602081905260409020546103f7908263ffffffff61048616565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461042c908263ffffffff61049b16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282111561049557600080fd5b50900390565b6000828201838110156104ad57600080fd5b939250505056fea265627a7a72315820dd4a124a1adb922bcd37081038befba5701b9f01e6ac47842708ecfd2a9fc19364736f6c63430005100032"; diff --git a/libs/chains/src/eth/types/factories/ERC721Mintable__factory.ts b/libs/chains/src/eth/types/factories/ERC721Mintable__factory.ts deleted file mode 100644 index 8df7d8bf3cd..00000000000 --- a/libs/chains/src/eth/types/factories/ERC721Mintable__factory.ts +++ /dev/null @@ -1,392 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { ERC721Mintable } from "../ERC721Mintable"; - -export class ERC721Mintable__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): ERC721Mintable { - return super.attach(address) as ERC721Mintable; - } - connect(signer: Signer): ERC721Mintable__factory { - return super.connect(signer) as ERC721Mintable__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ERC721Mintable { - return new Contract(address, _abi, signerOrProvider) as ERC721Mintable; - } -} - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "approved", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "approve", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "getApproved", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "ownerOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "tokenURI", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b50604080518082018252600681526518ddd5195cdd60d21b60208083019182528351808501909452600384526210d5d560ea1b9084015281519192916200005b916000916200007a565b508051620000719060019060208401906200007a565b5050506200015d565b828054620000889062000120565b90600052602060002090601f016020900481019282620000ac5760008555620000f7565b82601f10620000c757805160ff1916838001178555620000f7565b82800160010185558215620000f7579182015b82811115620000f7578251825591602001919060010190620000da565b506200010592915062000109565b5090565b5b808211156200010557600081556001016200010a565b600181811c908216806200013557607f821691505b602082108114156200015757634e487b7160e01b600052602260045260246000fd5b50919050565b611411806200016d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a22cb46511610066578063a22cb465146101e1578063b88d4fde146101f4578063c87b56dd14610207578063e985e9c51461021a57600080fd5b806370a08231146101a557806395d89b41146101c6578063a0712d68146101ce57600080fd5b8063095ea7b3116100c8578063095ea7b31461015757806323b872dd1461016c57806342842e0e1461017f5780636352211e1461019257600080fd5b806301ffc9a7146100ef57806306fdde0314610117578063081812fc1461012c575b600080fd5b6101026100fd3660046110f3565b610256565b60405190151581526020015b60405180910390f35b61011f6102a8565b60405161010e91906111de565b61013f61013a36600461112d565b61033a565b6040516001600160a01b03909116815260200161010e565b61016a6101653660046110c9565b6103d4565b005b61016a61017a366004610f75565b6104ea565b61016a61018d366004610f75565b61051b565b61013f6101a036600461112d565b610536565b6101b86101b3366004610f27565b6105ad565b60405190815260200161010e565b61011f610634565b61016a6101dc36600461112d565b610643565b61016a6101ef36600461108d565b610650565b61016a610202366004610fb1565b610715565b61011f61021536600461112d565b61074d565b610102610228366004610f42565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061028757506001600160e01b03198216635b5e139f60e01b145b806102a257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546102b790611303565b80601f01602080910402602001604051908101604052809291908181526020018280546102e390611303565b80156103305780601f1061030557610100808354040283529160200191610330565b820191906000526020600020905b81548152906001019060200180831161031357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166103b85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006103df82610536565b9050806001600160a01b0316836001600160a01b0316141561044d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016103af565b336001600160a01b038216148061046957506104698133610228565b6104db5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016103af565b6104e58383610835565b505050565b6104f433826108a3565b6105105760405162461bcd60e51b81526004016103af90611243565b6104e583838361099a565b6104e583838360405180602001604052806000815250610715565b6000818152600260205260408120546001600160a01b0316806102a25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016103af565b60006001600160a01b0382166106185760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016103af565b506001600160a01b031660009081526003602052604090205490565b6060600180546102b790611303565b61064d3382610b3a565b50565b6001600160a01b0382163314156106a95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103af565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61071f33836108a3565b61073b5760405162461bcd60e51b81526004016103af90611243565b61074784848484610b58565b50505050565b6000818152600260205260409020546060906001600160a01b03166107cc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016103af565b60006107e360408051602081019091526000815290565b90506000815111610803576040518060200160405280600081525061082e565b8061080d84610b8b565b60405160200161081e929190611172565b6040516020818303038152906040525b9392505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061086a82610536565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661091c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016103af565b600061092783610536565b9050806001600160a01b0316846001600160a01b031614806109625750836001600160a01b03166109578461033a565b6001600160a01b0316145b8061099257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166109ad82610536565b6001600160a01b031614610a155760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016103af565b6001600160a01b038216610a775760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103af565b610a82600082610835565b6001600160a01b0383166000908152600360205260408120805460019290610aab9084906112c0565b90915550506001600160a01b0382166000908152600360205260408120805460019290610ad9908490611294565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610b54828260405180602001604052806000815250610c89565b5050565b610b6384848461099a565b610b6f84848484610cbc565b6107475760405162461bcd60e51b81526004016103af906111f1565b606081610baf5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610bd95780610bc38161133e565b9150610bd29050600a836112ac565b9150610bb3565b60008167ffffffffffffffff811115610bf457610bf46113af565b6040519080825280601f01601f191660200182016040528015610c1e576020820181803683370190505b5090505b841561099257610c336001836112c0565b9150610c40600a86611359565b610c4b906030611294565b60f81b818381518110610c6057610c60611399565b60200101906001600160f81b031916908160001a905350610c82600a866112ac565b9450610c22565b610c938383610dc9565b610ca06000848484610cbc565b6104e55760405162461bcd60e51b81526004016103af906111f1565b60006001600160a01b0384163b15610dbe57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610d009033908990889088906004016111a1565b602060405180830381600087803b158015610d1a57600080fd5b505af1925050508015610d4a575060408051601f3d908101601f19168201909252610d4791810190611110565b60015b610da4573d808015610d78576040519150601f19603f3d011682016040523d82523d6000602084013e610d7d565b606091505b508051610d9c5760405162461bcd60e51b81526004016103af906111f1565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610992565b506001949350505050565b6001600160a01b038216610e1f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103af565b6000818152600260205260409020546001600160a01b031615610e845760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103af565b6001600160a01b0382166000908152600360205260408120805460019290610ead908490611294565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80356001600160a01b0381168114610f2257600080fd5b919050565b600060208284031215610f3957600080fd5b61082e82610f0b565b60008060408385031215610f5557600080fd5b610f5e83610f0b565b9150610f6c60208401610f0b565b90509250929050565b600080600060608486031215610f8a57600080fd5b610f9384610f0b565b9250610fa160208501610f0b565b9150604084013590509250925092565b60008060008060808587031215610fc757600080fd5b610fd085610f0b565b9350610fde60208601610f0b565b925060408501359150606085013567ffffffffffffffff8082111561100257600080fd5b818701915087601f83011261101657600080fd5b813581811115611028576110286113af565b604051601f8201601f19908116603f01168101908382118183101715611050576110506113af565b816040528281528a602084870101111561106957600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156110a057600080fd5b6110a983610f0b565b9150602083013580151581146110be57600080fd5b809150509250929050565b600080604083850312156110dc57600080fd5b6110e583610f0b565b946020939093013593505050565b60006020828403121561110557600080fd5b813561082e816113c5565b60006020828403121561112257600080fd5b815161082e816113c5565b60006020828403121561113f57600080fd5b5035919050565b6000815180845261115e8160208601602086016112d7565b601f01601f19169290920160200192915050565b600083516111848184602088016112d7565b8351908301906111988183602088016112d7565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906111d490830184611146565b9695505050505050565b60208152600061082e6020830184611146565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156112a7576112a761136d565b500190565b6000826112bb576112bb611383565b500490565b6000828210156112d2576112d261136d565b500390565b60005b838110156112f25781810151838201526020016112da565b838111156107475750506000910152565b600181811c9082168061131757607f821691505b6020821081141561133857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156113525761135261136d565b5060010190565b60008261136857611368611383565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461064d57600080fdfea2646970667358221220b3639af96e039523f78a5c97db8487e898ff0b92384cf272abef6c21317bb7e164736f6c63430008070033"; diff --git a/libs/chains/src/eth/types/factories/ERC721__factory.ts b/libs/chains/src/eth/types/factories/ERC721__factory.ts deleted file mode 100644 index ae06585c50a..00000000000 --- a/libs/chains/src/eth/types/factories/ERC721__factory.ts +++ /dev/null @@ -1,352 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { ERC721 } from "../ERC721"; - -export class ERC721__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): ERC721 { - return super.attach(address) as ERC721; - } - connect(signer: Signer): ERC721__factory { - return super.connect(signer) as ERC721__factory; - } - static connect(address: string, signerOrProvider: Signer | Provider): ERC721 { - return new Contract(address, _abi, signerOrProvider) as ERC721; - } -} - -const _abi = [ - { - inputs: [], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "approved", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "approve", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "getApproved", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "ownerOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "safeTransferFrom", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061002a6301ffc9a760e01b6001600160e01b0361004816565b6100436380ac58cd60e01b6001600160e01b0361004816565b6100cc565b6001600160e01b031980821614156100a7576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b610f94806100db6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80636352211e116100665780636352211e146101b157806370a08231146101ce578063a22cb46514610206578063b88d4fde14610234578063e985e9c5146102fa5761009e565b806301ffc9a7146100a3578063081812fc146100de578063095ea7b31461011757806323b872dd1461014557806342842e0e1461017b575b600080fd5b6100ca600480360360208110156100b957600080fd5b50356001600160e01b031916610328565b604080519115158252519081900360200190f35b6100fb600480360360208110156100f457600080fd5b5035610347565b604080516001600160a01b039092168252519081900360200190f35b6101436004803603604081101561012d57600080fd5b506001600160a01b0381351690602001356103a9565b005b6101436004803603606081101561015b57600080fd5b506001600160a01b038135811691602081013590911690604001356104d1565b6101436004803603606081101561019157600080fd5b506001600160a01b0381358116916020810135909116906040013561052d565b6100fb600480360360208110156101c757600080fd5b5035610548565b6101f4600480360360208110156101e457600080fd5b50356001600160a01b03166105a2565b60408051918252519081900360200190f35b6101436004803603604081101561021c57600080fd5b506001600160a01b038135169060200135151561060a565b6101436004803603608081101561024a57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561028557600080fd5b82018360208201111561029757600080fd5b803590602001918460018302840111640100000000831117156102b957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061070f945050505050565b6100ca6004803603604081101561031057600080fd5b506001600160a01b038135811691602001351661076d565b6001600160e01b03191660009081526020819052604090205460ff1690565b60006103528261079b565b61038d5760405162461bcd60e51b815260040180806020018281038252602c815260200180610eb9602c913960400191505060405180910390fd5b506000908152600260205260409020546001600160a01b031690565b60006103b482610548565b9050806001600160a01b0316836001600160a01b031614156104075760405162461bcd60e51b8152600401808060200182810382526021815260200180610f0e6021913960400191505060405180910390fd5b806001600160a01b03166104196107b8565b6001600160a01b0316148061043a575061043a816104356107b8565b61076d565b6104755760405162461bcd60e51b8152600401808060200182810382526038815260200180610e2e6038913960400191505060405180910390fd5b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6104e26104dc6107b8565b826107bc565b61051d5760405162461bcd60e51b8152600401808060200182810382526031815260200180610f2f6031913960400191505060405180910390fd5b610528838383610860565b505050565b6105288383836040518060200160405280600081525061070f565b6000818152600160205260408120546001600160a01b03168061059c5760405162461bcd60e51b8152600401808060200182810382526029815260200180610e906029913960400191505060405180910390fd5b92915050565b60006001600160a01b0382166105e95760405162461bcd60e51b815260040180806020018281038252602a815260200180610e66602a913960400191505060405180910390fd5b6001600160a01b038216600090815260036020526040902061059c906109a4565b6106126107b8565b6001600160a01b0316826001600160a01b03161415610678576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80600460006106856107b8565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556106c96107b8565b60408051841515815290516001600160a01b0392909216917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b61072061071a6107b8565b836107bc565b61075b5760405162461bcd60e51b8152600401808060200182810382526031815260200180610f2f6031913960400191505060405180910390fd5b610767848484846109a8565b50505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000908152600160205260409020546001600160a01b0316151590565b3390565b60006107c78261079b565b6108025760405162461bcd60e51b815260040180806020018281038252602c815260200180610e02602c913960400191505060405180910390fd5b600061080d83610548565b9050806001600160a01b0316846001600160a01b031614806108485750836001600160a01b031661083d84610347565b6001600160a01b0316145b806108585750610858818561076d565b949350505050565b826001600160a01b031661087382610548565b6001600160a01b0316146108b85760405162461bcd60e51b8152600401808060200182810382526029815260200180610ee56029913960400191505060405180910390fd5b6001600160a01b0382166108fd5760405162461bcd60e51b8152600401808060200182810382526024815260200180610dde6024913960400191505060405180910390fd5b610906816109fa565b6001600160a01b038316600090815260036020526040902061092790610a37565b6001600160a01b038216600090815260036020526040902061094890610a4e565b60008181526001602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5490565b6109b3848484610860565b6109bf84848484610a57565b6107675760405162461bcd60e51b8152600401808060200182810382526032815260200180610dac6032913960400191505060405180910390fd5b6000818152600260205260409020546001600160a01b031615610a3457600081815260026020526040902080546001600160a01b03191690555b50565b8054610a4a90600163ffffffff610c9216565b9055565b80546001019055565b6000610a6b846001600160a01b0316610cdb565b610a7757506001610858565b600060606001600160a01b038616630a85bd0160e11b610a956107b8565b89888860405160240180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b0e578181015183820152602001610af6565b50505050905090810190601f168015610b3b5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909a16999099178952518151919890975087965094509250829150849050835b60208310610ba35780518252601f199092019160209182019101610b84565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c05576040519150601f19603f3d011682016040523d82523d6000602084013e610c0a565b606091505b509150915081610c5b57805115610c245780518082602001fd5b60405162461bcd60e51b8152600401808060200182810382526032815260200180610dac6032913960400191505060405180910390fd5b6000818060200190516020811015610c7257600080fd5b50516001600160e01b031916630a85bd0160e11b14935061085892505050565b6000610cd483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d14565b9392505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610858575050151592915050565b60008184841115610da35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d68578181015183820152602001610d50565b50505050905090810190601f168015610d955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a265627a7a72315820a41618b522e59a66ce8573b2c6222da9fb280fe76333872c4dfe3b0acb38d00864736f6c63430005100032"; diff --git a/libs/chains/src/eth/types/factories/ERC777__factory.ts b/libs/chains/src/eth/types/factories/ERC777__factory.ts deleted file mode 100644 index 78f9ec41947..00000000000 --- a/libs/chains/src/eth/types/factories/ERC777__factory.ts +++ /dev/null @@ -1,670 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { ERC777 } from "../ERC777"; - -export class ERC777__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - name: string, - symbol: string, - defaultOperators: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - name, - symbol, - defaultOperators, - overrides || {} - ) as Promise; - } - getDeployTransaction( - name: string, - symbol: string, - defaultOperators: string[], - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - name, - symbol, - defaultOperators, - overrides || {} - ); - } - attach(address: string): ERC777 { - return super.attach(address) as ERC777; - } - connect(signer: Signer): ERC777__factory { - return super.connect(signer) as ERC777__factory; - } - static connect(address: string, signerOrProvider: Signer | Provider): ERC777 { - return new Contract(address, _abi, signerOrProvider) as ERC777; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name", - type: "string", - }, - { - internalType: "string", - name: "symbol", - type: "string", - }, - { - internalType: "address[]", - name: "defaultOperators", - type: "address[]", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "tokenHolder", - type: "address", - }, - ], - name: "AuthorizedOperator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "Burned", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "Minted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "tokenHolder", - type: "address", - }, - ], - name: "RevokedOperator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "Sent", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "authorizeOperator", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "tokenHolder", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "burn", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - payable: false, - stateMutability: "pure", - type: "function", - }, - { - constant: true, - inputs: [], - name: "defaultOperators", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "granularity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "address", - name: "tokenHolder", - type: "address", - }, - ], - name: "isOperatorFor", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "operatorBurn", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "operatorSend", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "revokeOperator", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "send", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "holder", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200239238038062002392833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001bc57600080fd5b908301906020820185811115620001d257600080fd5b8251866020820283011164010000000082111715620001f057600080fd5b82525081516020918201928201910280838360005b838110156200021f57818101518382015260200162000205565b50505050919091016040525050845162000243925060029150602086019062000406565b5081516200025990600390602085019062000406565b5080516200026f9060049060208401906200048b565b5060005b600454811015620002cf57600160056000600484815481106200029257fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905560010162000273565b50604080516a22a9219b9b9baa37b5b2b760a91b8152815190819003600b0181206329965a1d60e01b82523060048301819052602483019190915260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad24916329965a1d91606480830192600092919082900301818387803b1580156200034e57600080fd5b505af115801562000363573d6000803e3d6000fd5b5050604080516922a92199182a37b5b2b760b11b8152815190819003600a0181206329965a1d60e01b82523060048301819052602483019190915260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad2493506329965a1d9250606480830192600092919082900301818387803b158015620003e457600080fd5b505af1158015620003f9573d6000803e3d6000fd5b5050505050505062000538565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200044957805160ff191683800117855562000479565b8280016001018555821562000479579182015b82811115620004795782518255916020019190600101906200045c565b5062000487929150620004f1565b5090565b828054828255906000526020600020908101928215620004e3579160200282015b82811115620004e357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620004ac565b506200048792915062000511565b6200050e91905b80821115620004875760008155600101620004f8565b90565b6200050e91905b80821115620004875780546001600160a01b031916815560010162000518565b611e4a80620005486000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461052a578063dd62ed3e14610558578063fad8b32a14610586578063fc673c4f146105ac578063fe9d9303146106ea57610116565b8063959b8c3f1461041757806395d89b411461043d5780639bd9bbc614610445578063a9059cbb146104fe57610116565b806323b872dd116100e957806323b872dd1461024a578063313ce56714610280578063556f0dc71461029e57806362ad1b83146102a657806370a08231146103f157610116565b806306e485381461011b57806306fdde0314610173578063095ea7b3146101f057806318160ddd14610230575b600080fd5b610123610795565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561015f578181015183820152602001610147565b505050509050019250505060405180910390f35b61017b6107f7565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101b557818101518382015260200161019d565b50505050905090810190601f1680156101e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61021c6004803603604081101561020657600080fd5b506001600160a01b038135169060200135610881565b604080519115158252519081900360200190f35b6102386108a3565b60408051918252519081900360200190f35b61021c6004803603606081101561026057600080fd5b506001600160a01b038135811691602081013590911690604001356108a9565b610288610a2c565b6040805160ff9092168252519081900360200190f35b610238610a31565b6103ef600480360360a08110156102bc57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156102f657600080fd5b82018360208201111561030857600080fd5b803590602001918460018302840111600160201b8311171561032957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561037b57600080fd5b82018360208201111561038d57600080fd5b803590602001918460018302840111600160201b831117156103ae57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a36945050505050565b005b6102386004803603602081101561040757600080fd5b50356001600160a01b0316610aa0565b6103ef6004803603602081101561042d57600080fd5b50356001600160a01b0316610abb565b61017b610c07565b6103ef6004803603606081101561045b57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561048a57600080fd5b82018360208201111561049c57600080fd5b803590602001918460018302840111600160201b831117156104bd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c68945050505050565b61021c6004803603604081101561051457600080fd5b506001600160a01b038135169060200135610c9a565b61021c6004803603604081101561054057600080fd5b506001600160a01b0381358116916020013516610d73565b6102386004803603604081101561056e57600080fd5b506001600160a01b0381358116916020013516610e15565b6103ef6004803603602081101561059c57600080fd5b50356001600160a01b0316610e40565b6103ef600480360360808110156105c257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156105f157600080fd5b82018360208201111561060357600080fd5b803590602001918460018302840111600160201b8311171561062457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561067657600080fd5b82018360208201111561068857600080fd5b803590602001918460018302840111600160201b831117156106a957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f8c945050505050565b6103ef6004803603604081101561070057600080fd5b81359190810190604081016020820135600160201b81111561072157600080fd5b82018360208201111561073357600080fd5b803590602001918460018302840111600160201b8311171561075457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ff2945050505050565b606060048054806020026020016040519081016040528092919081815260200182805480156107ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107cf575b5050505050905090565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156107ed5780601f10610855576101008083540402835291602001916107ed565b820191906000526020600020905b81548152906001019060200180831161086357509395945050505050565b60008061088c611020565b9050610899818585611024565b5060019392505050565b60015490565b60006001600160a01b0383166108f05760405162461bcd60e51b8152600401808060200182810382526024815260200180611d316024913960400191505060405180910390fd5b6001600160a01b0384166109355760405162461bcd60e51b8152600401808060200182810382526026815260200180611daa6026913960400191505060405180910390fd5b600061093f611020565b905061096d8186868660405180602001604052806000815250604051806020016040528060008152506110cb565b610999818686866040518060200160405280600081525060405180602001604052806000815250611313565b6109f385826109ee86604051806060016040528060298152602001611d81602991396001600160a01b03808c166000908152600860209081526040808320938b1683529290522054919063ffffffff61152c16565b611024565b610a2181868686604051806020016040528060008152506040518060200160405280600081525060006115c3565b506001949350505050565b601290565b600190565b610a47610a41611020565b86610d73565b610a825760405162461bcd60e51b815260040180806020018281038252602c815260200180611d55602c913960400191505060405180910390fd5b610a99610a8d611020565b86868686866001611863565b5050505050565b6001600160a01b031660009081526020819052604090205490565b806001600160a01b0316610acd611020565b6001600160a01b03161415610b135760405162461bcd60e51b8152600401808060200182810382526024815260200180611c9f6024913960400191505060405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615610b765760076000610b40611020565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff19169055610bbd565b600160066000610b84611020565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff19169115159190911790555b610bc5611020565b6001600160a01b0316816001600160a01b03167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107ed5780601f10610855576101008083540402835291602001916107ed565b610c95610c73611020565b610c7b611020565b858585604051806020016040528060008152506001611863565b505050565b60006001600160a01b038316610ce15760405162461bcd60e51b8152600401808060200182810382526024815260200180611d316024913960400191505060405180910390fd5b6000610ceb611020565b9050610d198182868660405180602001604052806000815250604051806020016040528060008152506110cb565b610d45818286866040518060200160405280600081525060405180602001604052806000815250611313565b61089981828686604051806020016040528060008152506040518060200160405280600081525060006115c3565b6000816001600160a01b0316836001600160a01b03161480610dde57506001600160a01b03831660009081526005602052604090205460ff168015610dde57506001600160a01b0380831660009081526007602090815260408083209387168352929052205460ff16155b80610e0e57506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610e48611020565b6001600160a01b0316816001600160a01b03161415610e985760405162461bcd60e51b8152600401808060200182810382526021815260200180611cc36021913960400191505060405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615610f0457600160076000610ec7611020565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff1916911515919091179055610f42565b60066000610f10611020565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff191690555b610f4a611020565b6001600160a01b0316816001600160a01b03167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b610f9d610f97611020565b85610d73565b610fd85760405162461bcd60e51b815260040180806020018281038252602c815260200180611d55602c913960400191505060405180910390fd5b610fec610fe3611020565b8585858561192e565b50505050565b61101c610ffd611020565b611005611020565b84846040518060200160405280600081525061192e565b5050565b3390565b6001600160a01b0382166110695760405162461bcd60e51b8152600401808060200182810382526023815260200180611df36023913960400191505060405180910390fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6040805163555ddc6560e11b81526001600160a01b03871660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe89560248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b15801561114f57600080fd5b505afa158015611163573d6000803e3d6000fd5b505050506040513d602081101561117957600080fd5b505190506001600160a01b0381161561130a57806001600160a01b03166375ab97828888888888886040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561123f578181015183820152602001611227565b50505050905090810190601f16801561126c5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561129f578181015183820152602001611287565b50505050905090810190601f1680156112cc5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156112f157600080fd5b505af1158015611305573d6000803e3d6000fd5b505050505b50505050505050565b61135683604051806060016040528060278152602001611c56602791396001600160a01b038816600090815260208190526040902054919063ffffffff61152c16565b6001600160a01b03808716600090815260208190526040808220939093559086168152205461138b908463ffffffff611b5b16565b600080866001600160a01b03166001600160a01b0316815260200190815260200160002081905550836001600160a01b0316856001600160a01b0316876001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561143c578181015183820152602001611424565b50505050905090810190601f1680156114695780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561149c578181015183820152602001611484565b50505050905090810190601f1680156114c95780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050565b600081848411156115bb5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611580578181015183820152602001611568565b50505050905090810190601f1680156115ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6040805163555ddc6560e11b81526001600160a01b03871660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b15801561164757600080fd5b505afa15801561165b573d6000803e3d6000fd5b505050506040513d602081101561167157600080fd5b505190506001600160a01b0381161561180557806001600160a01b03166223de298989898989896040518763ffffffff1660e01b815260040180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561173657818101518382015260200161171e565b50505050905090810190601f1680156117635780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561179657818101518382015260200161177e565b50505050905090810190601f1680156117c35780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156117e857600080fd5b505af11580156117fc573d6000803e3d6000fd5b50505050611859565b81156118595761181d866001600160a01b0316611bb5565b156118595760405162461bcd60e51b815260040180806020018281038252604d815260200180611ce4604d913960600191505060405180910390fd5b5050505050505050565b6001600160a01b0386166118a85760405162461bcd60e51b8152600401808060200182810382526022815260200180611c346022913960400191505060405180910390fd5b6001600160a01b038516611903576040805162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6119118787878787876110cb565b61191f878787878787611313565b61130a878787878787876115c3565b6001600160a01b0384166119735760405162461bcd60e51b8152600401808060200182810382526022815260200180611c7d6022913960400191505060405180910390fd5b611982858560008686866110cb565b6119c583604051806060016040528060238152602001611dd0602391396001600160a01b038716600090815260208190526040902054919063ffffffff61152c16565b6001600160a01b0385166000908152602081905260409020556001546119f1908463ffffffff611bf116565b600181905550836001600160a01b0316856001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098858585604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611a76578181015183820152602001611a5e565b50505050905090810190601f168015611aa35780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611ad6578181015183820152602001611abe565b50505050905090810190601f168015611b035780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a36040805184815290516000916001600160a01b038716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050505050565b600082820183811015610e0e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611be957508115155b949350505050565b6000610e0e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061152c56fe4552433737373a2073656e642066726f6d20746865207a65726f20616464726573734552433737373a207472616e7366657220616d6f756e7420657863656564732062616c616e63654552433737373a206275726e2066726f6d20746865207a65726f20616464726573734552433737373a20617574686f72697a696e672073656c66206173206f70657261746f724552433737373a207265766f6b696e672073656c66206173206f70657261746f724552433737373a20746f6b656e20726563697069656e7420636f6e747261637420686173206e6f20696d706c656d656e74657220666f7220455243373737546f6b656e73526563697069656e744552433737373a207472616e7366657220746f20746865207a65726f20616464726573734552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f7220666f7220686f6c6465724552433737373a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654552433737373a207472616e736665722066726f6d20746865207a65726f20616464726573734552433737373a206275726e20616d6f756e7420657863656564732062616c616e63654552433737373a20617070726f766520746f20746865207a65726f2061646472657373a265627a7a723158208c1bc4f779f353ddfc0be45b9957abc61149c8055303dc4b68f76adf17816f4664736f6c63430005100032"; diff --git a/libs/chains/src/eth/types/factories/ExecutorWithTimelock__factory.ts b/libs/chains/src/eth/types/factories/ExecutorWithTimelock__factory.ts deleted file mode 100644 index aa1a79b4459..00000000000 --- a/libs/chains/src/eth/types/factories/ExecutorWithTimelock__factory.ts +++ /dev/null @@ -1,591 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { ExecutorWithTimelock } from "../ExecutorWithTimelock"; - -export class ExecutorWithTimelock__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - admin: string, - delay: BigNumberish, - gracePeriod: BigNumberish, - minimumDelay: BigNumberish, - maximumDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - admin, - delay, - gracePeriod, - minimumDelay, - maximumDelay, - overrides || {} - ) as Promise; - } - getDeployTransaction( - admin: string, - delay: BigNumberish, - gracePeriod: BigNumberish, - minimumDelay: BigNumberish, - maximumDelay: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - admin, - delay, - gracePeriod, - minimumDelay, - maximumDelay, - overrides || {} - ); - } - attach(address: string): ExecutorWithTimelock { - return super.attach(address) as ExecutorWithTimelock; - } - connect(signer: Signer): ExecutorWithTimelock__factory { - return super.connect(signer) as ExecutorWithTimelock__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ExecutorWithTimelock { - return new Contract( - address, - _abi, - signerOrProvider - ) as ExecutorWithTimelock; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "admin", - type: "address", - }, - { - internalType: "uint256", - name: "delay", - type: "uint256", - }, - { - internalType: "uint256", - name: "gracePeriod", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumDelay", - type: "uint256", - }, - { - internalType: "uint256", - name: "maximumDelay", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "CancelledAction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - { - indexed: false, - internalType: "bytes", - name: "resultData", - type: "bytes", - }, - ], - name: "ExecutedAction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "delay", - type: "uint256", - }, - ], - name: "NewDelay", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "QueuedAction", - type: "event", - }, - { - inputs: [], - name: "GRACE_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAXIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MINIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "acceptAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "cancelTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "executeTransaction", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "getAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getPendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - ], - name: "isActionQueued", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isProposalOverGracePeriod", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "queueTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "delay", - type: "uint256", - }, - ], - name: "setDelay", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "setPendingAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60e06040523480156200001157600080fd5b506040516200170338038062001703833981016040819052620000349162000130565b81841015620000605760405162461bcd60e51b8152600401620000579062000199565b60405180910390fd5b80841115620000835760405162461bcd60e51b81526004016200005790620001d0565b6002849055600080546001600160a01b0319166001600160a01b038716179055608083905260a082905260c08190526040517f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90620000e490869062000207565b60405180910390a17f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c856040516200011d919062000185565b60405180910390a1505050505062000210565b600080600080600060a0868803121562000148578081fd5b85516001600160a01b03811681146200015f578182fd5b602087015160408801516060890151608090990151929a91995097965090945092505050565b6001600160a01b0391909116815260200190565b6020808252601a908201527f44454c41595f53484f525445525f5448414e5f4d494e494d554d000000000000604082015260600190565b60208082526019908201527f44454c41595f4c4f4e4745525f5448414e5f4d4158494d554d00000000000000604082015260600190565b90815260200190565b60805160a05160c0516114b2620002516000398061046e5280610a6852508061082e5280610a28525080610547528061086a528061099752506114b26000f3fe6080604052600436106100e15760003560e01c8063b1b43ae51161007f578063cebc9a8211610059578063cebc9a8214610228578063d04681561461023d578063e177246e14610252578063f670a5f914610272576100e8565b8063b1b43ae5146101d1578063b1fc8796146101e6578063c1a287e214610213576100e8565b80636e9960c3116100bb5780636e9960c31461015a5780637d645fab1461017c5780638902ab65146101915780638d8fe2e3146101b1576100e8565b80630e18b681146100ed5780631dc40b51146101045780634dd18bf51461013a576100e8565b366100e857005b600080fd5b3480156100f957600080fd5b50610102610292565b005b34801561011057600080fd5b5061012461011f366004610d9f565b61031c565b6040516101319190611111565b60405180910390f35b34801561014657600080fd5b50610102610155366004610d83565b6103e8565b34801561016657600080fd5b5061016f61045d565b604051610131919061109e565b34801561018857600080fd5b5061012461046c565b6101a461019f366004610d9f565b610490565b604051610131919061119a565b3480156101bd57600080fd5b506101246101cc366004610d9f565b610743565b3480156101dd57600080fd5b5061012461082c565b3480156101f257600080fd5b50610206610201366004610e39565b610850565b6040516101319190611106565b34801561021f57600080fd5b50610124610868565b34801561023457600080fd5b5061012461088c565b34801561024957600080fd5b5061016f610892565b34801561025e57600080fd5b5061010261026d366004610e39565b6108a1565b34801561027e57600080fd5b5061020661028d366004610e51565b6108fe565b6001546001600160a01b031633146102c55760405162461bcd60e51b81526004016102bc906111ad565b60405180910390fd5b60008054336001600160a01b031991821681179092556001805490911690556040517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c916103129161109e565b60405180910390a1565b600080546001600160a01b031633146103475760405162461bcd60e51b81526004016102bc90611279565b6000878787878787604051602001610364969594939291906110b2565b60408051601f19818403018152828252805160209182012060008181526003909252919020805460ff1916905591506001600160a01b038916907f87c481aa909c37502caa37394ab791c26b68fa4fa5ae56de104de36444ae9069906103d59084908b908b908b908b908b9061111a565b60405180910390a2979650505050505050565b3330146104075760405162461bcd60e51b81526004016102bc90611396565b600180546001600160a01b0319166001600160a01b0383161790556040517f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a7569061045290839061109e565b60405180910390a150565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546060906001600160a01b031633146104bd5760405162461bcd60e51b81526004016102bc90611279565b60008787878787876040516020016104da969594939291906110b2565b60408051601f1981840301815291815281516020928301206000818152600390935291205490915060ff166105215760405162461bcd60e51b81526004016102bc906112cf565b834210156105415760405162461bcd60e51b81526004016102bc906111dc565b61056b847f00000000000000000000000000000000000000000000000000000000000000006109c5565b42111561058a5760405162461bcd60e51b81526004016102bc906112a0565b6000818152600360205260409020805460ff1916905585516060906105b05750846105dc565b8680519060200120866040516020016105ca929190611051565b60405160208183030381529060405290505b60006060851561066957893410156106065760405162461bcd60e51b81526004016102bc90611368565b8a6001600160a01b03168360405161061e9190611082565b600060405180830381855af49150503d8060008114610659576040519150601f19603f3d011682016040523d82523d6000602084013e61065e565b606091505b5090925090506106cb565b8a6001600160a01b03168a846040516106829190611082565b60006040518083038185875af1925050503d80600081146106bf576040519150601f19603f3d011682016040523d82523d6000602084013e6106c4565b606091505b5090925090505b816106e85760405162461bcd60e51b81526004016102bc906112fa565b8a6001600160a01b03167f97825080b472fa91fe888b62ec128814d60dec546a2dafb955e50923f4a1b7e7858c8c8c8c8c8860405161072d9796959493929190611139565b60405180910390a29a9950505050505050505050565b600080546001600160a01b0316331461076e5760405162461bcd60e51b81526004016102bc90611279565b60025461077c9042906109c5565b83101561079b5760405162461bcd60e51b81526004016102bc9061120b565b60008787878787876040516020016107b8969594939291906110b2565b60408051601f19818403018152828252805160209182012060008181526003909252919020805460ff1916600117905591506001600160a01b038916907f2191aed4c4733c76e08a9e7e1da0b8d87fa98753f22df49231ddc66e0f05f022906103d59084908b908b908b908b908b9061111a565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008181526003602052604090205460ff165b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b6001546001600160a01b031690565b3330146108c05760405162461bcd60e51b81526004016102bc90611396565b6108c981610a26565b60028190556040517f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90610452908390611111565b6000610908610aa9565b604051633656de2160e01b81526001600160a01b03851690633656de2190610934908690600401611111565b60006040518083038186803b15801561094c57600080fd5b505afa158015610960573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109889190810190610e7c565b6101408101519091506109bb907f00000000000000000000000000000000000000000000000000000000000000006109c5565b4211949350505050565b600082820183811015610a1f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b7f0000000000000000000000000000000000000000000000000000000000000000811015610a665760405162461bcd60e51b81526004016102bc90611242565b7f0000000000000000000000000000000000000000000000000000000000000000811115610aa65760405162461bcd60e51b81526004016102bc90611331565b50565b6040518061022001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b03168152602001600080191681525090565b805161086381611459565b600082601f830112610b6a578081fd5b8151610b7d610b78826113e9565b6113c5565b818152915060208083019084810181840286018201871015610b9e57600080fd5b60005b84811015610bc6578151610bb481611459565b84529282019290820190600101610ba1565b505050505092915050565b600082601f830112610be1578081fd5b8151610bef610b78826113e9565b818152915060208083019084810181840286018201871015610c1057600080fd5b60005b84811015610bc6578151610c268161146e565b84529282019290820190600101610c13565b600082601f830112610c48578081fd5b8151610c56610b78826113e9565b818152915060208083019084810160005b84811015610bc6578151870188603f820112610c8257600080fd5b83810151610c92610b7882611407565b81815260408b81848601011115610ca857600080fd5b610cb783888401838701611429565b50865250509282019290820190600101610c67565b600082601f830112610cdc578081fd5b8151610cea610b78826113e9565b818152915060208083019084810181840286018201871015610d0b57600080fd5b60005b84811015610bc657815184529282019290820190600101610d0e565b80516108638161146e565b600082601f830112610d45578081fd5b8135610d53610b7882611407565b9150808252836020828501011115610d6a57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610d94578081fd5b8135610a1f81611459565b60008060008060008060c08789031215610db7578182fd5b8635610dc281611459565b955060208701359450604087013567ffffffffffffffff80821115610de5578384fd5b610df18a838b01610d35565b95506060890135915080821115610e06578384fd5b50610e1389828a01610d35565b9350506080870135915060a0870135610e2b8161146e565b809150509295509295509295565b600060208284031215610e4a578081fd5b5035919050565b60008060408385031215610e63578182fd5b8235610e6e81611459565b946020939093013593505050565b600060208284031215610e8d578081fd5b815167ffffffffffffffff80821115610ea4578283fd5b8184019150610220808387031215610eba578384fd5b610ec3816113c5565b905082518152610ed560208401610b4f565b6020820152610ee660408401610b4f565b6040820152606083015182811115610efc578485fd5b610f0887828601610b5a565b606083015250608083015182811115610f1f578485fd5b610f2b87828601610ccc565b60808301525060a083015182811115610f42578485fd5b610f4e87828601610c38565b60a08301525060c083015182811115610f65578485fd5b610f7187828601610c38565b60c08301525060e083015182811115610f88578485fd5b610f9487828601610bd1565b60e083015250610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a09150610fe1828401610d2a565b828201526101c09150610ff5828401610d2a565b828201526101e09150611009828401610b4f565b9181019190915261020091820151918101919091529392505050565b6000815180845261103d816020860160208601611429565b601f01601f19169290920160200192915050565b6001600160e01b0319831681528151600090611074816004850160208701611429565b919091016004019392505050565b60008251611094818460208701611429565b9190910192915050565b6001600160a01b0391909116815260200190565b600060018060a01b038816825286602083015260c060408301526110d960c0830187611025565b82810360608401526110eb8187611025565b6080840195909552505090151560a090910152949350505050565b901515815260200190565b90815260200190565b600087825286602083015260c060408301526110d960c0830187611025565b600088825287602083015260e0604083015261115860e0830188611025565b828103606084015261116a8188611025565b905085608084015284151560a084015282810360c084015261118c8185611025565b9a9950505050505050505050565b600060208252610a1f6020830184611025565b60208082526015908201527427a7262cafa12cafa822a72224a723afa0a226a4a760591b604082015260600190565b602080825260159082015274151253515313d0d2d7d393d517d192539254d21151605a1b604082015260600190565b6020808252601d908201527f455845435554494f4e5f54494d455f554e444552455354494d41544544000000604082015260600190565b6020808252601a908201527f44454c41595f53484f525445525f5448414e5f4d494e494d554d000000000000604082015260600190565b6020808252600d908201526c27a7262cafa12cafa0a226a4a760991b604082015260600190565b60208082526015908201527411d49050d157d411549253d117d192539254d21151605a1b604082015260600190565b6020808252601190820152701050d51253d397d393d517d45551555151607a1b604082015260600190565b60208082526017908201527f4641494c45445f414354494f4e5f455845435554494f4e000000000000000000604082015260600190565b60208082526019908201527f44454c41595f4c4f4e4745525f5448414e5f4d4158494d554d00000000000000604082015260600190565b6020808252601490820152734e4f545f454e4f5547485f4d53475f56414c554560601b604082015260600190565b6020808252601590820152744f4e4c595f42595f544849535f54494d454c4f434b60581b604082015260600190565b60405181810167ffffffffffffffff811182821017156113e157fe5b604052919050565b600067ffffffffffffffff8211156113fd57fe5b5060209081020190565b600067ffffffffffffffff82111561141b57fe5b50601f01601f191660200190565b60005b8381101561144457818101518382015260200161142c565b83811115611453576000848401525b50505050565b6001600160a01b0381168114610aa657600080fd5b8015158114610aa657600080fdfea264697066735822122015ff897075e4f3908d97363016374ebb8843b977ea00350235d03ccdf81d4b6864736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/Executor__factory.ts b/libs/chains/src/eth/types/factories/Executor__factory.ts deleted file mode 100644 index 41c437dce49..00000000000 --- a/libs/chains/src/eth/types/factories/Executor__factory.ts +++ /dev/null @@ -1,890 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { Executor } from "../Executor"; - -export class Executor__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - admin: string, - delay: BigNumberish, - gracePeriod: BigNumberish, - minimumDelay: BigNumberish, - maximumDelay: BigNumberish, - propositionThreshold: BigNumberish, - voteDuration: BigNumberish, - voteDifferential: BigNumberish, - minimumQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - admin, - delay, - gracePeriod, - minimumDelay, - maximumDelay, - propositionThreshold, - voteDuration, - voteDifferential, - minimumQuorum, - overrides || {} - ) as Promise; - } - getDeployTransaction( - admin: string, - delay: BigNumberish, - gracePeriod: BigNumberish, - minimumDelay: BigNumberish, - maximumDelay: BigNumberish, - propositionThreshold: BigNumberish, - voteDuration: BigNumberish, - voteDifferential: BigNumberish, - minimumQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - admin, - delay, - gracePeriod, - minimumDelay, - maximumDelay, - propositionThreshold, - voteDuration, - voteDifferential, - minimumQuorum, - overrides || {} - ); - } - attach(address: string): Executor { - return super.attach(address) as Executor; - } - connect(signer: Signer): Executor__factory { - return super.connect(signer) as Executor__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Executor { - return new Contract(address, _abi, signerOrProvider) as Executor; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "admin", - type: "address", - }, - { - internalType: "uint256", - name: "delay", - type: "uint256", - }, - { - internalType: "uint256", - name: "gracePeriod", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumDelay", - type: "uint256", - }, - { - internalType: "uint256", - name: "maximumDelay", - type: "uint256", - }, - { - internalType: "uint256", - name: "propositionThreshold", - type: "uint256", - }, - { - internalType: "uint256", - name: "voteDuration", - type: "uint256", - }, - { - internalType: "uint256", - name: "voteDifferential", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumQuorum", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "CancelledAction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - { - indexed: false, - internalType: "bytes", - name: "resultData", - type: "bytes", - }, - ], - name: "ExecutedAction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "delay", - type: "uint256", - }, - ], - name: "NewDelay", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "QueuedAction", - type: "event", - }, - { - inputs: [], - name: "GRACE_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAXIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MINIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MINIMUM_QUORUM", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_HUNDRED_WITH_PRECISION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PROPOSITION_THRESHOLD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "VOTE_DIFFERENTIAL", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "VOTING_DURATION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "acceptAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "cancelTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "executeTransaction", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "getAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getMinimumPropositionPowerNeeded", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "votingSupply", - type: "uint256", - }, - ], - name: "getMinimumVotingPowerNeeded", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getPendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - ], - name: "isActionQueued", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isProposalOverGracePeriod", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isProposalPassed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "isPropositionPowerEnough", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isQuorumValid", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isVoteDifferentialValid", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "queueTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "delay", - type: "uint256", - }, - ], - name: "setDelay", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "setPendingAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "validateCreatorOfProposal", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "validateProposalCancellation", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x6101606040523480156200001257600080fd5b506040516200219a3803806200219a833981016040819052620000359162000159565b838383838c8c8c8c8c818410156200006a5760405162461bcd60e51b81526004016200006190620001ed565b60405180910390fd5b808411156200008d5760405162461bcd60e51b8152600401620000619062000224565b6002849055600080546001600160a01b0319166001600160a01b038716179055608083905260a082905260c08190526040517f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90620000ee9086906200025b565b60405180910390a17f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c85604051620001279190620001d9565b60405180910390a150505060e09590955250610100929092526101205261014052506200026498505050505050505050565b60008060008060008060008060006101208a8c03121562000178578485fd5b89516001600160a01b03811681146200018f578586fd5b8099505060208a0151975060408a0151965060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b6001600160a01b0391909116815260200190565b6020808252601a908201527f44454c41595f53484f525445525f5448414e5f4d494e494d554d000000000000604082015260600190565b60208082526019908201527f44454c41595f4c4f4e4745525f5448414e5f4d4158494d554d00000000000000604082015260600190565b90815260200190565b60805160a05160c05160e051610100516101205161014051611ebf620002db60003980610ea65280610fbd5250806108fa5280610d2d525080610d5152508061106252806111cc52508061096d5280611325525080610eca52806112e5525080610a465280610f06528061119c5250611ebf6000f3fe6080604052600436106101a05760003560e01c8063a438d208116100ec578063d04681561161008a578063e50f840011610064578063e50f840014610445578063f48cb13414610465578063f670a5f914610485578063fd58afd4146104a5576101a7565b8063d0468156146103f0578063d0d9029814610405578063e177246e14610425576101a7565b8063b1b43ae5116100c6578063b1b43ae514610391578063b1fc8796146103a6578063c1a287e2146103c6578063cebc9a82146103db576101a7565b8063a438d20814610347578063ace432091461035c578063b159beac1461037c576101a7565b806366121042116101595780637d645fab116101335780637d645fab146102dd5780638902ab65146102f25780638d8fe2e3146103125780639125fb5814610332576101a7565b8063661210421461027b5780636e9960c31461029b5780637aa50080146102bd576101a7565b806306fbb3ab146101ac5780630e18b681146101e25780631d73fd6d146101f95780631dc40b511461021b57806331a7bc411461023b5780634dd18bf51461025b576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101cc6101c736600461180c565b6104ba565b6040516101d99190611af2565b60405180910390f35b3480156101ee57600080fd5b506101f76104e0565b005b34801561020557600080fd5b5061020e61056a565b6040516101d99190611afd565b34801561022757600080fd5b5061020e61023636600461171a565b610570565b34801561024757600080fd5b506101cc6102563660046117cc565b61063c565b34801561026757600080fd5b506101f76102763660046116e2565b610652565b34801561028757600080fd5b506101cc6102963660046117cc565b6106c7565b3480156102a757600080fd5b506102b06107d0565b6040516101d99190611a71565b3480156102c957600080fd5b506101cc6102d836600461180c565b6107df565b3480156102e957600080fd5b5061020e61096b565b61030561030036600461171a565b61098f565b6040516101d99190611b86565b34801561031e57600080fd5b5061020e61032d36600461171a565b610c42565b34801561033e57600080fd5b5061020e610d2b565b34801561035357600080fd5b5061020e610d4f565b34801561036857600080fd5b506101cc61037736600461180c565b610d73565b34801561038857600080fd5b5061020e610ea4565b34801561039d57600080fd5b5061020e610ec8565b3480156103b257600080fd5b506101cc6103c13660046117b4565b610eec565b3480156103d257600080fd5b5061020e610f04565b3480156103e757600080fd5b5061020e610f28565b3480156103fc57600080fd5b506102b0610f2e565b34801561041157600080fd5b506101cc6104203660046117cc565b610f3d565b34801561043157600080fd5b506101f76104403660046117b4565b610f52565b34801561045157600080fd5b5061020e6104603660046117b4565b610faf565b34801561047157600080fd5b5061020e61048036600461180c565b610fe1565b34801561049157600080fd5b506101cc6104a036600461180c565b611103565b3480156104b157600080fd5b5061020e6111ca565b60006104c68383610d73565b80156104d757506104d783836107df565b90505b92915050565b6001546001600160a01b031633146105135760405162461bcd60e51b815260040161050a90611b99565b60405180910390fd5b60008054336001600160a01b031991821681179092556001805490911690556040517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c9161056091611a71565b60405180910390a1565b61271081565b600080546001600160a01b0316331461059b5760405162461bcd60e51b815260040161050a90611c65565b60008787878787876040516020016105b896959493929190611a9e565b60408051601f19818403018152828252805160209182012060008181526003909252919020805460ff1916905591506001600160a01b038916907f87c481aa909c37502caa37394ab791c26b68fa4fa5ae56de104de36444ae9069906106299084908b908b908b908b908b90611b06565b60405180910390a2979650505050505050565b60006106498484846106c7565b15949350505050565b3330146106715760405162461bcd60e51b815260040161050a90611d82565b600180546001600160a01b0319166001600160a01b0383161790556040517f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a756906106bc908390611a71565b60405180910390a150565b600080846001600160a01b03166306be3e8e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561070357600080fd5b505afa158015610717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073b91906116fe565b90506107478584610fe1565b604051631420edcb60e31b81526001600160a01b0383169063a1076e58906107759088908890600401611a85565b60206040518083038186803b15801561078d57600080fd5b505afa1580156107a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c591906119e0565b101595945050505050565b6000546001600160a01b031690565b60006107e9611408565b604051633656de2160e01b81526001600160a01b03851690633656de2190610815908690600401611afd565b60006040518083038186803b15801561082d57600080fd5b505afa158015610841573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108699190810190611837565b90506000816101e001516001600160a01b0316637a71f9d78361010001516040518263ffffffff1660e01b81526004016108a39190611afd565b60206040518083038186803b1580156108bb57600080fd5b505afa1580156108cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f391906119e0565b90506109437f000000000000000000000000000000000000000000000000000000000000000061093d836109376127108761018001516111ee90919063ffffffff16565b90611247565b90611289565b610961826109376127108661016001516111ee90919063ffffffff16565b1195945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546060906001600160a01b031633146109bc5760405162461bcd60e51b815260040161050a90611c65565b60008787878787876040516020016109d996959493929190611a9e565b60408051601f1981840301815291815281516020928301206000818152600390935291205490915060ff16610a205760405162461bcd60e51b815260040161050a90611cbb565b83421015610a405760405162461bcd60e51b815260040161050a90611bc8565b610a6a847f0000000000000000000000000000000000000000000000000000000000000000611289565b421115610a895760405162461bcd60e51b815260040161050a90611c8c565b6000818152600360205260409020805460ff191690558551606090610aaf575084610adb565b868051906020012086604051602001610ac9929190611a24565b60405160208183030381529060405290505b600060608515610b685789341015610b055760405162461bcd60e51b815260040161050a90611d54565b8a6001600160a01b031683604051610b1d9190611a55565b600060405180830381855af49150503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b509092509050610bca565b8a6001600160a01b03168a84604051610b819190611a55565b60006040518083038185875af1925050503d8060008114610bbe576040519150601f19603f3d011682016040523d82523d6000602084013e610bc3565b606091505b5090925090505b81610be75760405162461bcd60e51b815260040161050a90611ce6565b8a6001600160a01b03167f97825080b472fa91fe888b62ec128814d60dec546a2dafb955e50923f4a1b7e7858c8c8c8c8c88604051610c2c9796959493929190611b25565b60405180910390a29a9950505050505050505050565b600080546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161050a90611c65565b600254610c7b904290611289565b831015610c9a5760405162461bcd60e51b815260040161050a90611bf7565b6000878787878787604051602001610cb796959493929190611a9e565b60408051601f19818403018152828252805160209182012060008181526003909252919020805460ff1916600117905591506001600160a01b038916907f2191aed4c4733c76e08a9e7e1da0b8d87fa98753f22df49231ddc66e0f05f022906106299084908b908b908b908b908b90611b06565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610d7d611408565b604051633656de2160e01b81526001600160a01b03851690633656de2190610da9908690600401611afd565b60006040518083038186803b158015610dc157600080fd5b505afa158015610dd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dfd9190810190611837565b90506000816101e001516001600160a01b0316637a71f9d78361010001516040518263ffffffff1660e01b8152600401610e379190611afd565b60206040518083038186803b158015610e4f57600080fd5b505afa158015610e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8791906119e0565b9050610e9281610faf565b82610160015110159250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008181526003602052604090205460ff165b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b6001546001600160a01b031690565b6000610f4a8484846106c7565b949350505050565b333014610f715760405162461bcd60e51b815260040161050a90611d82565b610f7a816112e3565b60028190556040517f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c906106bc908390611afd565b60006104da612710610937847f00000000000000000000000000000000000000000000000000000000000000006111ee565b600080836001600160a01b03166306be3e8e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561101d57600080fd5b505afa158015611031573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105591906116fe565b9050610f4a6127106109377f0000000000000000000000000000000000000000000000000000000000000000846001600160a01b031663f6b50203886040518263ffffffff1660e01b81526004016110ad9190611afd565b60206040518083038186803b1580156110c557600080fd5b505afa1580156110d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fd91906119e0565b906111ee565b600061110d611408565b604051633656de2160e01b81526001600160a01b03851690633656de2190611139908690600401611afd565b60006040518083038186803b15801561115157600080fd5b505afa158015611165573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261118d9190810190611837565b6101408101519091506111c0907f0000000000000000000000000000000000000000000000000000000000000000611289565b4211949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000826111fd575060006104da565b8282028284828161120a57fe5b04146104d75760405162461bcd60e51b8152600401808060200182810382526021815260200180611e696021913960400191505060405180910390fd5b60006104d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611366565b6000828201838110156104d7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000008110156113235760405162461bcd60e51b815260040161050a90611c2e565b7f00000000000000000000000000000000000000000000000000000000000000008111156113635760405162461bcd60e51b815260040161050a90611d1d565b50565b600081836113f25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113b757818101518382015260200161139f565b50505050905090810190601f1680156113e45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816113fe57fe5b0495945050505050565b6040518061022001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b03168152602001600080191681525090565b8051610eff81611e45565b600082601f8301126114c9578081fd5b81516114dc6114d782611dd5565b611db1565b8181529150602080830190848101818402860182018710156114fd57600080fd5b60005b8481101561152557815161151381611e45565b84529282019290820190600101611500565b505050505092915050565b600082601f830112611540578081fd5b815161154e6114d782611dd5565b81815291506020808301908481018184028601820187101561156f57600080fd5b60005b8481101561152557815161158581611e5a565b84529282019290820190600101611572565b600082601f8301126115a7578081fd5b81516115b56114d782611dd5565b818152915060208083019084810160005b84811015611525578151870188603f8201126115e157600080fd5b838101516115f16114d782611df3565b81815260408b8184860101111561160757600080fd5b61161683888401838701611e15565b508652505092820192908201906001016115c6565b600082601f83011261163b578081fd5b81516116496114d782611dd5565b81815291506020808301908481018184028601820187101561166a57600080fd5b60005b848110156115255781518452928201929082019060010161166d565b8051610eff81611e5a565b600082601f8301126116a4578081fd5b81356116b26114d782611df3565b91508082528360208285010111156116c957600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156116f3578081fd5b81356104d781611e45565b60006020828403121561170f578081fd5b81516104d781611e45565b60008060008060008060c08789031215611732578182fd5b863561173d81611e45565b955060208701359450604087013567ffffffffffffffff80821115611760578384fd5b61176c8a838b01611694565b95506060890135915080821115611781578384fd5b5061178e89828a01611694565b9350506080870135915060a08701356117a681611e5a565b809150509295509295509295565b6000602082840312156117c5578081fd5b5035919050565b6000806000606084860312156117e0578081fd5b83356117eb81611e45565b925060208401356117fb81611e45565b929592945050506040919091013590565b6000806040838503121561181e578182fd5b823561182981611e45565b946020939093013593505050565b600060208284031215611848578081fd5b815167ffffffffffffffff8082111561185f578283fd5b8184019150610220808387031215611875578384fd5b61187e81611db1565b905082518152611890602084016114ae565b60208201526118a1604084016114ae565b60408201526060830151828111156118b7578485fd5b6118c3878286016114b9565b6060830152506080830151828111156118da578485fd5b6118e68782860161162b565b60808301525060a0830151828111156118fd578485fd5b61190987828601611597565b60a08301525060c083015182811115611920578485fd5b61192c87828601611597565b60c08301525060e083015182811115611943578485fd5b61194f87828601611530565b60e083015250610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a0915061199c828401611689565b828201526101c091506119b0828401611689565b828201526101e091506119c48284016114ae565b9181019190915261020091820151918101919091529392505050565b6000602082840312156119f1578081fd5b5051919050565b60008151808452611a10816020860160208601611e15565b601f01601f19169290920160200192915050565b6001600160e01b0319831681528151600090611a47816004850160208701611e15565b919091016004019392505050565b60008251611a67818460208701611e15565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038816825286602083015260c06040830152611ac560c08301876119f8565b8281036060840152611ad781876119f8565b6080840195909552505090151560a090910152949350505050565b901515815260200190565b90815260200190565b600087825286602083015260c06040830152611ac560c08301876119f8565b600088825287602083015260e06040830152611b4460e08301886119f8565b8281036060840152611b5681886119f8565b905085608084015284151560a084015282810360c0840152611b7881856119f8565b9a9950505050505050505050565b6000602082526104d760208301846119f8565b60208082526015908201527427a7262cafa12cafa822a72224a723afa0a226a4a760591b604082015260600190565b602080825260159082015274151253515313d0d2d7d393d517d192539254d21151605a1b604082015260600190565b6020808252601d908201527f455845435554494f4e5f54494d455f554e444552455354494d41544544000000604082015260600190565b6020808252601a908201527f44454c41595f53484f525445525f5448414e5f4d494e494d554d000000000000604082015260600190565b6020808252600d908201526c27a7262cafa12cafa0a226a4a760991b604082015260600190565b60208082526015908201527411d49050d157d411549253d117d192539254d21151605a1b604082015260600190565b6020808252601190820152701050d51253d397d393d517d45551555151607a1b604082015260600190565b60208082526017908201527f4641494c45445f414354494f4e5f455845435554494f4e000000000000000000604082015260600190565b60208082526019908201527f44454c41595f4c4f4e4745525f5448414e5f4d4158494d554d00000000000000604082015260600190565b6020808252601490820152734e4f545f454e4f5547485f4d53475f56414c554560601b604082015260600190565b6020808252601590820152744f4e4c595f42595f544849535f54494d454c4f434b60581b604082015260600190565b60405181810167ffffffffffffffff81118282101715611dcd57fe5b604052919050565b600067ffffffffffffffff821115611de957fe5b5060209081020190565b600067ffffffffffffffff821115611e0757fe5b50601f01601f191660200190565b60005b83811015611e30578181015183820152602001611e18565b83811115611e3f576000848401525b50505050565b6001600160a01b038116811461136357600080fd5b801515811461136357600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220761796ad47c3b100675d0b295fc99b6d99f7e4678d0978e33eceedb0e8d0b4b664736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/FeiDAO__factory.ts b/libs/chains/src/eth/types/factories/FeiDAO__factory.ts deleted file mode 100644 index f93bef66647..00000000000 --- a/libs/chains/src/eth/types/factories/FeiDAO__factory.ts +++ /dev/null @@ -1,1190 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { FeiDAO } from "../FeiDAO"; - -export class FeiDAO__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - tribe: string, - timelock: string, - guardian: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - tribe, - timelock, - guardian, - overrides || {} - ) as Promise; - } - getDeployTransaction( - tribe: string, - timelock: string, - guardian: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - tribe, - timelock, - guardian, - overrides || {} - ); - } - attach(address: string): FeiDAO { - return super.attach(address) as FeiDAO; - } - connect(signer: Signer): FeiDAO__factory { - return super.connect(signer) as FeiDAO__factory; - } - static connect(address: string, signerOrProvider: Signer | Provider): FeiDAO { - return new Contract(address, _abi, signerOrProvider) as FeiDAO; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "contract ERC20VotesComp", - name: "tribe", - type: "address", - }, - { - internalType: "contract ICompoundTimelock", - name: "timelock", - type: "address", - }, - { - internalType: "address", - name: "guardian", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldProposalThreshold", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "ProposalThresholdUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldQuorum", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newQuorum", - type: "uint256", - }, - ], - name: "QuorumUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Rollback", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "RollbackQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldTimelock", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newTimelock", - type: "address", - }, - ], - name: "TimelockChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingDelay", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "VotingDelayUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingPeriod", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "VotingPeriodUpdated", - type: "event", - }, - { - inputs: [], - name: "BACKUP_GOVERNOR", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "ROLLBACK_DEADLINE", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "__acceptAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "__executeRollback", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "__rollback", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getActions", - outputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getReceipt", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - internalType: "struct IGovernorCompatibilityBravo.Receipt", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalEta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposals", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "proposer", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "abstainVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "queue", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "quorumVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "setProposalThreshold", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newQuorum", - type: "uint256", - }, - ], - name: "setQuorum", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "setVotingDelay", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "setVotingPeriod", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract ERC20VotesComp", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ICompoundTimelock", - name: "newTimelock", - type: "address", - }, - ], - name: "updateTimelock", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x61014060405260016005556132c86006556a14adf4b7320334b90000006007556a02116545850052128000006008553480156200003b57600080fd5b50604051620049d9380380620049d98339810160408190526200005e916200029d565b8183604051806040016040528060078152602001664665692044414f60c81b81525080620000916200017360201b60201c565b815160209283012081519183019190912060c082815260e08290524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8189018190528183019790975260608101959095526080808601939093523085830152805180860390920182529390920190925280519084012090526101005281516200012b9160009190840190620001f7565b505060601b6001600160601b0319166101205262000149816200018e565b50600980546001600160a01b0319166001600160a01b039290921691909117905550620003479050565b6040805180820190915260018152603160f81b602082015290565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200020590620002f1565b90600052602060002090601f01602090048101928262000229576000855562000274565b82601f106200024457805160ff191683800117855562000274565b8280016001018555821562000274579182015b828111156200027457825182559160200191906001019062000257565b506200028292915062000286565b5090565b5b8082111562000282576000815560010162000287565b600080600060608486031215620002b357600080fd5b8351620002c0816200032e565b6020850151909350620002d3816200032e565b6040850151909250620002e6816200032e565b809150509250925092565b600181811c908216806200030657607f821691505b602082108114156200032857634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03811681146200034457600080fd5b50565b60805160a05160c05160e051610100516101205160601c614638620003a1600039600081816108db015261280401526000612aad01526000612afc01526000612ad701526000612a5b01526000612a8401526146386000f3fe6080604052600436106102515760003560e01c80637d5e81e211610139578063db90d48d116100b6578063ea0217cf1161007a578063ea0217cf14610847578063eb9019d414610867578063ece40cc114610887578063f8ce560a146108a7578063fc0c546a146108c9578063fe0d94c1146108fd57600080fd5b8063db90d48d146106bb578063dd4e2ba5146106e3578063ddf0b00914610729578063deaaa7cc14610749578063e23a9a521461077d57600080fd5b8063c01f9e37116100fd578063c01f9e3714610609578063c1ba4e5914610629578063c59057e414610649578063d33219b414610669578063da95691a1461069b57600080fd5b80637d5e81e21461057f578063a890c9101461059f578063ab58fb8e146105bf578063b58131b0146105df578063b9a61961146105f457600080fd5b8063328dd982116101d25780634385963211610196578063438596321461048b57806354fd4d50146104d557806356781388146104ff5780636f8dd33d1461051f57806370b0f6601461053f5780637b3c71d31461055f57600080fd5b8063328dd982146103d95780633932abb1146104095780633bccf4fd1461041e5780633e4f49e61461043e57806340e58ee51461046b57600080fd5b8063148e946d11610219578063148e946d1461035a578063160cbed71461037157806324bc1a64146103915780632656227d146103a65780632d63f693146103b957600080fd5b8063013cf08b1461025657806301ffc9a7146102d157806302a251a31461030157806306fdde031461032057806310817f2214610342575b600080fd5b34801561026257600080fd5b50610276610271366004613e8f565b610910565b604080519a8b526001600160a01b0390991660208b0152978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140015b60405180910390f35b3480156102dd57600080fd5b506102f16102ec366004613ddb565b6109b9565b60405190151581526020016102c8565b34801561030d57600080fd5b506006545b6040519081526020016102c8565b34801561032c57600080fd5b506103356109ca565b6040516102c89190614286565b34801561034e57600080fd5b5061031263617f2e0081565b34801561036657600080fd5b5061036f610a5c565b005b34801561037d57600080fd5b5061031261038c366004613b94565b610c01565b34801561039d57600080fd5b50610312610fa8565b6103126103b4366004613b94565b610fbd565b3480156103c557600080fd5b506103126103d4366004613e8f565b611090565b3480156103e557600080fd5b506103f96103f4366004613e8f565b6110c7565b6040516102c89493929190614239565b34801561041557600080fd5b50600554610312565b34801561042a57600080fd5b50610312610439366004613f8a565b611358565b34801561044a57600080fd5b5061045e610459366004613e8f565b6113ec565b6040516102c89190614299565b34801561047757600080fd5b5061036f610486366004613e8f565b6113f7565b34801561049757600080fd5b506102f16104a6366004613ea8565b60008281526002602090815260408083206001600160a01b038516845260080190915290205460ff1692915050565b3480156104e157600080fd5b506040805180820190915260018152603160f81b6020820152610335565b34801561050b57600080fd5b5061031261051a366004613ed8565b61170a565b34801561052b57600080fd5b5061036f61053a366004613e8f565b611733565b34801561054b57600080fd5b5061036f61055a366004613e8f565b611909565b34801561056b57600080fd5b5061031261057a366004613f04565b61197f565b34801561058b57600080fd5b5061031261059a366004613c23565b6119d1565b3480156105ab57600080fd5b5061036f6105ba366004613e72565b6119e8565b3480156105cb57600080fd5b506103126105da366004613e8f565b611a2c565b3480156105eb57600080fd5b50600854610312565b34801561060057600080fd5b5061036f611a58565b34801561061557600080fd5b50610312610624366004613e8f565b611ac2565b34801561063557600080fd5b5061036f610644366004613e8f565b611af1565b34801561065557600080fd5b50610312610664366004613b94565b611b67565b34801561067557600080fd5b506003546001600160a01b03165b6040516001600160a01b0390911681526020016102c8565b3480156106a757600080fd5b506103126106b6366004613ccf565b611ba1565b3480156106c757600080fd5b50610683734c895973334af8e06fd6da4f723ac24a5f259e6b81565b3480156106ef57600080fd5b5060408051808201909152601a81527f737570706f72743d627261766f2671756f72756d3d627261766f0000000000006020820152610335565b34801561073557600080fd5b5061036f610744366004613e8f565b611bc6565b34801561075557600080fd5b506103127f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b34801561078957600080fd5b50610817610798366004613ea8565b60408051606081018252600080825260208201819052918101919091525060009182526002602090815260408084206001600160a01b0393909316845260089092018152918190208151606081018352905460ff8082161515835261010082041693820193909352620100009092046001600160601b03169082015290565b6040805182511515815260208084015160ff1690820152918101516001600160601b0316908201526060016102c8565b34801561085357600080fd5b5061036f610862366004613e8f565b611e34565b34801561087357600080fd5b50610312610882366004613b68565b611eaa565b34801561089357600080fd5b5061036f6108a2366004613e8f565b611ebd565b3480156108b357600080fd5b506103126108c2366004613e8f565b5060075490565b3480156108d557600080fd5b506106837f000000000000000000000000000000000000000000000000000000000000000081565b61036f61090b366004613e8f565b611f33565b80600080808080808080806109248a611a2c565b975061092f8b611090565b965061093a8b611ac2565b60008c815260026020526040812080546005820154600683015460078401546001600160a01b039093169e50949a50985092965091945061097a8d6113ec565b90506002816007811115610990576109906145ab565b14935060078160078111156109a7576109a76145ab565b14925050509193959799509193959799565b60006109c4826121a1565b92915050565b6060600080546109d990614545565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0590614545565b8015610a525780601f10610a2757610100808354040283529160200191610a52565b820191906000526020600020905b815481529060010190602001808311610a3557829003601f168201915b5050505050905090565b42600a541115610aa65760405162461bcd60e51b815260206004820152601060248201526f2332b4a220a79d103a37b79039b7b7b760811b60448201526064015b60405180910390fd5b6009546001600160a01b031615610af25760405162461bcd60e51b815260206004820152601060248201526f46656944414f3a206e6f20717565756560801b6044820152606401610a9d565b6000610b066003546001600160a01b031690565b9050806001600160a01b0316630825f38f610b296003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b60208201526000910160408051601f1981840301815290829052600a546001600160e01b031960e087901b168352610b7e94939260040161414d565b600060405180830381600087803b158015610b9857600080fd5b505af1158015610bac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bd49190810190613e05565b506040517fe7058e1559765746b4820bddac308b97653890ba0be3b171acd5218899b19b2690600090a150565b600080610c1086868686611b67565b90506004610c1d826113ec565b6007811115610c2e57610c2e6145ab565b14610c4b5760405162461bcd60e51b8152600401610a9d90614339565b60035460408051630d48571f60e31b815290516000926001600160a01b031691636a42b8f8916004808301926020929190829003018186803b158015610c9057600080fd5b505afa158015610ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc89190613dc2565b610cd290426144bf565b9050610cf4610ce0826121c6565b600084815260046020526040902090612232565b60005b8751811015610f635760035488516001600160a01b039091169063f2b06537908a9084908110610d2957610d296145c1565b6020026020010151898481518110610d4357610d436145c1565b6020026020010151898581518110610d5d57610d5d6145c1565b602002602001015186604051602001610d7994939291906141b9565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401610dad91815260200190565b60206040518083038186803b158015610dc557600080fd5b505afa158015610dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfd9190613da0565b15610e7b5760405162461bcd60e51b815260206004820152604260248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a206964656e746960448201527f63616c2070726f706f73616c20616374696f6e20616c72656164792071756575606482015261195960f21b608482015260a401610a9d565b60035488516001600160a01b0390911690633a66f901908a9084908110610ea457610ea46145c1565b6020026020010151898481518110610ebe57610ebe6145c1565b6020026020010151898581518110610ed857610ed86145c1565b6020026020010151866040518563ffffffff1660e01b8152600401610f0094939291906141b9565b602060405180830381600087803b158015610f1a57600080fd5b505af1158015610f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f529190613dc2565b50610f5c8161457a565b9050610cf7565b5060408051838152602081018390527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289291015b60405180910390a15095945050505050565b6000610fb86108c2600143614502565b905090565b600080610fcc86868686611b67565b90506000610fd9826113ec565b90506004816007811115610fef57610fef6145ab565b148061100c5750600581600781111561100a5761100a6145ab565b145b6110285760405162461bcd60e51b8152600401610a9d90614339565b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a16110868288888888612250565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b6060806060806000600260008781526020019081526020016000209050806001018160020182600301836004018380548060200260200160405190810160405280929190818152602001828054801561114957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161112b575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561119b57602002820191906000526020600020905b815481526020019060010190808311611187575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561126f5783829060005260206000200180546111e290614545565b80601f016020809104026020016040519081016040528092919081815260200182805461120e90614545565b801561125b5780601f106112305761010080835404028352916020019161125b565b820191906000526020600020905b81548152906001019060200180831161123e57829003601f168201915b5050505050815260200190600101906111c3565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156113425783829060005260206000200180546112b590614545565b80601f01602080910402602001604051908101604052809291908181526020018280546112e190614545565b801561132e5780601f106113035761010080835404028352916020019161132e565b820191906000526020600020905b81548152906001019060200180831161131157829003601f168201915b505050505081526020019060010190611296565b5050505090509450945094509450509193509193565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff8516606082015260009081906113c4906113bc9060800160405160208183030381529060405280519060200120612264565b8686866122b2565b90506113e1878288604051806020016040528060008152506122d0565b979650505050505050565b60006109c4826123db565b600081815260026020526040902080546001600160a01b0316336001600160a01b031614806114405750600854815461143e906001600160a01b0316610882600143614502565b105b61149c5760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72427261766f3a2070726f706f7365722061626f76652074686044820152661c995cda1bdb1960ca1b6064820152608401610a9d565b611705816001018054806020026020016040519081016040528092919081815260200182805480156114f757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114d9575b50505050508260020180548060200260200160405190810160405280929190818152602001828054801561154a57602002820191906000526020600020905b815481526020019060010190808311611536575b50505050506116fb84600301805480602002602001604051908101604052809291908181526020016000905b8282101561162257838290600052602060002001805461159590614545565b80601f01602080910402602001604051908101604052809291908181526020018280546115c190614545565b801561160e5780601f106115e35761010080835404028352916020019161160e565b820191906000526020600020905b8154815290600101906020018083116115f157829003601f168201915b505050505081526020019060010190611576565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116f257838290600052602060002001805461166590614545565b80601f016020809104026020016040519081016040528092919081815260200182805461169190614545565b80156116de5780601f106116b3576101008083540402835291602001916116de565b820191906000526020600020905b8154815290600101906020018083116116c157829003601f168201915b505050505081526020019060010190611646565b505050506124cb565b846009015461262b565b505050565b60008033905061172b848285604051806020016040528060008152506122d0565b949350505050565b6009546001600160a01b0316331461178d5760405162461bcd60e51b815260206004820152601b60248201527f46656944414f3a2063616c6c6572206e6f7420677561726469616e00000000006044820152606401610a9d565b600980546001600160a01b031916905563617f2e008111156117f15760405162461bcd60e51b815260206004820152601860248201527f46656944414f3a20726f6c6c6261636b206578706972656400000000000000006044820152606401610a9d565b600a819055600061180a6003546001600160a01b031690565b9050806001600160a01b0316633a66f90161182d6003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b602082015260009101604051602081830303815290604052866040518563ffffffff1660e01b815260040161187e949392919061414d565b602060405180830381600087803b15801561189857600080fd5b505af11580156118ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d09190613dc2565b506040518281527fdb51ef15d5bea4363daa5cb7691e73d2b53e2addace8cc5bef3b85c4f4489af5906020015b60405180910390a15050565b611911612639565b6001600160a01b0316336001600160a01b0316146119415760405162461bcd60e51b8152600401610a9d906142c1565b600580549082905560408051828152602081018490527f16569b50c8812bb18e4b5c46b0fee4a9acbb3a9dca1e1badce427e8d75b5652d91016118fd565b6000803390506119c786828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122d092505050565b9695505050505050565b60006119df8585858561264d565b95945050505050565b6119f0612639565b6001600160a01b0316336001600160a01b031614611a205760405162461bcd60e51b8152600401610a9d906142c1565b611a29816126b5565b50565b60008181526004602090815260408083208151928301909152546001600160401b0316908190526110b8565b600360009054906101000a90046001600160a01b03166001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611aa857600080fd5b505af1158015611abc573d6000803e3d6000fd5b50505050565b60008181526001602081815260408084208151928301909152909101546001600160401b0316908190526110b8565b611af9612639565b6001600160a01b0316336001600160a01b031614611b295760405162461bcd60e51b8152600401610a9d906142c1565b600780549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb091016118fd565b600084848484604051602001611b8094939291906141ee565b60408051601f19818403018152919052805160209091012095945050505050565b6000611bb133878787878761271e565b6119c78686611bc087876124cb565b856119d1565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170593909290830182828015611c2f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c11575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611c8257602002820191906000526020600020905b815481526020019060010190808311611c6e575b5050505050611e2a84600301805480602002602001604051908101604052809291908181526020016000905b82821015611d5a578382906000526020600020018054611ccd90614545565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf990614545565b8015611d465780601f10611d1b57610100808354040283529160200191611d46565b820191906000526020600020905b815481529060010190602001808311611d2957829003601f168201915b505050505081526020019060010190611cae565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116f2578382906000526020600020018054611d9d90614545565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc990614545565b8015611e165780601f10611deb57610100808354040283529160200191611e16565b820191906000526020600020905b815481529060010190602001808311611df957829003601f168201915b505050505081526020019060010190611d7e565b8460090154610c01565b611e3c612639565b6001600160a01b0316336001600160a01b031614611e6c5760405162461bcd60e51b8152600401610a9d906142c1565b600680549082905560408051828152602081018490527fffc708f072ca56e3d45ef0cb288b96cb9378f5f63e1646868bfbc9c38f4263a191016118fd565b6000611eb683836127db565b9392505050565b611ec5612639565b6001600160a01b0316336001600160a01b031614611ef55760405162461bcd60e51b8152600401610a9d906142c1565b600880549082905560408051828152602081018490527fe92242fc3efcad407a677132b517977331a6e5b65abab69fd757cc02e99c9c4e91016118fd565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170593909290830182828015611f9c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f7e575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611fef57602002820191906000526020600020905b815481526020019060010190808311611fdb575b505050505061219784600301805480602002602001604051908101604052809291908181526020016000905b828210156120c757838290600052602060002001805461203a90614545565b80601f016020809104026020016040519081016040528092919081815260200182805461206690614545565b80156120b35780601f10612088576101008083540402835291602001916120b3565b820191906000526020600020905b81548152906001019060200180831161209657829003601f168201915b50505050508152602001906001019061201b565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116f257838290600052602060002001805461210a90614545565b80601f016020809104026020016040519081016040528092919081815260200182805461213690614545565b80156121835780601f1061215857610100808354040283529160200191612183565b820191906000526020600020905b81548152906001019060200180831161216657829003601f168201915b5050505050815260200190600101906120eb565b8460090154610fbd565b60006001600160e01b03198216636e665ced60e01b14806109c457506109c482612890565b60006001600160401b0382111561222e5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610a9d565b5090565b815467ffffffffffffffff19166001600160401b0391909116179055565b61225d85858585856128c5565b5050505050565b60006109c4612271612a57565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006122c387878787612b4a565b9150915061108681612c37565b60008481526001602081905260408220906122ea876113ec565b60078111156122fb576122fb6145ab565b146123545760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610a9d565b604080516020810190915281546001600160401b03169081905260009061237c908790611eaa565b905061238a87878784612df2565b856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4888784886040516123c9949392919061441d565b60405180910390a29695505050505050565b6000806123e783612f97565b905060048160078111156123fd576123fd6145ab565b146124085792915050565b600061241384611a2c565b905080612421575092915050565b600360009054906101000a90046001600160a01b03166001600160a01b031663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b15801561246f57600080fd5b505afa158015612483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a79190613dc2565b6124b190826144bf565b42106124c1575060069392505050565b5060059392505050565b6060600082516001600160401b038111156124e8576124e86145d7565b60405190808252806020026020018201604052801561251b57816020015b60608152602001906001900390816125065790505b50905060005b84518110156126235784818151811061253c5761253c6145c1565b6020026020010151516000146125da5784818151811061255e5761255e6145c1565b6020026020010151848281518110612578576125786145c1565b60200260200101516040516024016125909190614286565b60408051601f1981840301815290829052916125ab91614131565b6040519081900390206020820180516001600160e01b03166001600160e01b03199092169190911790526125f5565b8381815181106125ec576125ec6145c1565b60200260200101515b828281518110612607576126076145c1565b60200260200101819052508061261c9061457a565b9050612521565b509392505050565b60006119df858585856130fd565b6000610fb86003546001600160a01b031690565b60006126a933868686516001600160401b0381111561266e5761266e6145d7565b6040519080825280602002602001820160405280156126a157816020015b606081526020019060019003908161268c5790505b50878761271e565b6119df85858585613218565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80516020820120600061273c878761273688886124cb565b85611b67565b60008181526002602052604090206009810154919250906127d05780546001600160a01b0319166001600160a01b038a16178155875161278590600183019060208b01906136ac565b50865161279b90600283019060208a019061370d565b5085516127b19060038301906020890190613748565b5084516127c790600483019060208801906137a1565b50600981018390555b505050505050505050565b60405163782d6fe160e01b81526001600160a01b038381166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063782d6fe19060440160206040518083038186803b15801561284857600080fd5b505afa15801561285c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128809190613fd8565b6001600160601b03169392505050565b60006001600160e01b0319821663bf26d89760e01b14806109c457506301ffc9a760e01b6001600160e01b03198316146109c4565b60006128d086611a2c565b90506000811161293c5760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a2070726f706f73604482015270185b081b9bdd081e595d081c5d595d5959607a1b6064820152608401610a9d565b60005b8551811015612a4e5760035485516001600160a01b0390911690630825f38f90879084908110612971576129716145c1565b602002602001015188848151811061298b5761298b6145c1565b60200260200101518885815181106129a5576129a56145c1565b60200260200101518886815181106129bf576129bf6145c1565b6020026020010151876040518663ffffffff1660e01b81526004016129e794939291906141b9565b6000604051808303818588803b158015612a0057600080fd5b505af1158015612a14573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612a3d9190810190613e05565b50612a478161457a565b905061293f565b50505050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612aa657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612b815750600090506003612c2e565b8460ff16601b14158015612b9957508460ff16601c14155b15612baa5750600090506004612c2e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612bfe573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612c2757600060019250925050612c2e565b9150600090505b94509492505050565b6000816004811115612c4b57612c4b6145ab565b1415612c545750565b6001816004811115612c6857612c686145ab565b1415612cb65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a9d565b6002816004811115612cca57612cca6145ab565b1415612d185760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a9d565b6003816004811115612d2c57612d2c6145ab565b1415612d855760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a9d565b6004816004811115612d9957612d996145ab565b1415611a295760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610a9d565b60008481526002602090815260408083206001600160a01b038716845260088101909252909120805460ff1615612e815760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20766f746560448201526c08185b1c9958591e4818d85cdd609a1b6064820152608401610a9d565b805460ff85166101000261ffff19909116176001178155612ea1836132be565b81546001600160601b039190911662010000026dffffffffffffffffffffffff00001990911617815560ff8416612ef15782826006016000828254612ee691906144bf565b90915550612f8f9050565b60ff841660011415612f115782826005016000828254612ee691906144bf565b60ff841660021415612f315782826007016000828254612ee691906144bf565b60405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20696e766160448201526c6c696420766f7465207479706560981b6064820152608401610a9d565b505050505050565b6000818152600160208181526040808420815160a08101835281546001600160401b0390811660808301908152825283518086018552958301541685529283019390935260029092015460ff8082161580159484019490945261010090910416151560608201529061300c5750600792915050565b80606001511561301f5750600292915050565b805151436001600160401b03909116111561303d5750600092915050565b602081015151436001600160401b03909116111561305e5750600192915050565b61306b8160200151613326565b156130af5761307983613355565b801561309b575060008381526002602052604090206006810154600590910154115b6130a6576003611eb6565b60049392505050565b60405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610a9d565b50919050565b60008061310c8686868661337c565b9050600061311982611a2c565b905080156110865760005b87518110156131f55760035488516001600160a01b039091169063591fcdfe908a9084908110613156576131566145c1565b6020026020010151898481518110613170576131706145c1565b602002602001015189858151811061318a5761318a6145c1565b6020026020010151866040518563ffffffff1660e01b81526004016131b294939291906141b9565b600060405180830381600087803b1580156131cc57600080fd5b505af11580156131e0573d6000803e3d6000fd5b50505050806131ee9061457a565b9050613124565b506000828152600460205260409020805467ffffffffffffffff19169055611086565b600061322360085490565b61323233610882600143614502565b10156132b25760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a2070726f7060448201527f6f73657220766f7465732062656c6f772070726f706f73616c207468726573686064820152621bdb1960ea1b608482015260a401610a9d565b6119df85858585613488565b60006001600160601b0382111561222e5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610a9d565b600061333b82516001600160401b0316151590565b80156109c457505051436001600160401b03909116111590565b600081815260026020526040812060058101546133746108c285611090565b109392505050565b60008061338b86868686611b67565b90506000613398826113ec565b905060028160078111156133ae576133ae6145ab565b141580156133ce575060068160078111156133cb576133cb6145ab565b14155b80156133ec575060078160078111156133e9576133e96145ab565b14155b6134385760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f74206163746976650000006044820152606401610a9d565b60008281526001602052604090819020600201805461ff001916610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90610f969084815260200190565b60008061349e8686868680519060200120611b67565b905084518651146134c15760405162461bcd60e51b8152600401610a9d906142f8565b83518651146134e25760405162461bcd60e51b8152600401610a9d906142f8565b60008651116135335760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c00000000000000006044820152606401610a9d565b600081815260016020908152604091829020825191820190925281546001600160401b031690819052156135b35760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610a9d565b60006135c66135c160055490565b6121c6565b6135cf436121c6565b6135d991906144d7565b905060006135e96135c160065490565b6135f390836144d7565b90506135ff8383612232565b61360c6001840182612232565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b0381111561364a5761364a6145d7565b60405190808252806020026020018201604052801561367d57816020015b60608152602001906001900390816136685790505b508c88888e6040516136979998979695949392919061437a565b60405180910390a15091979650505050505050565b828054828255906000526020600020908101928215613701579160200282015b8281111561370157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906136cc565b5061222e9291506137fa565b828054828255906000526020600020908101928215613701579160200282015b8281111561370157825182559160200191906001019061372d565b828054828255906000526020600020908101928215613795579160200282015b82811115613795578251805161378591849160209091019061380f565b5091602001919060010190613768565b5061222e929150613882565b8280548282559060005260206000209081019282156137ee579160200282015b828111156137ee57825180516137de91849160209091019061380f565b50916020019190600101906137c1565b5061222e92915061389f565b5b8082111561222e57600081556001016137fb565b82805461381b90614545565b90600052602060002090601f01602090048101928261383d5760008555613701565b82601f1061385657805160ff1916838001178555613701565b82800160010185558215613701579182018281111561370157825182559160200191906001019061372d565b8082111561222e57600061389682826138bc565b50600101613882565b8082111561222e5760006138b382826138bc565b5060010161389f565b5080546138c890614545565b6000825580601f106138d8575050565b601f016020900490600052602060002090810190611a2991906137fa565b600061390961390484614498565b614445565b905082815283838301111561391d57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261394557600080fd5b8135602061395561390483614475565b80838252828201915082860187848660051b890101111561397557600080fd5b60005b8581101561399d57813561398b816145ed565b84529284019290840190600101613978565b5090979650505050505050565b600082601f8301126139bb57600080fd5b813560206139cb61390483614475565b80838252828201915082860187848660051b89010111156139eb57600080fd5b60005b8581101561399d5781356001600160401b03811115613a0c57600080fd5b8801603f81018a13613a1d57600080fd5b613a2e8a87830135604084016138f6565b85525092840192908401906001016139ee565b600082601f830112613a5257600080fd5b81356020613a6261390483614475565b80838252828201915082860187848660051b8901011115613a8257600080fd5b6000805b86811015613ac45782356001600160401b03811115613aa3578283fd5b613ab18b88838d0101613b32565b8652509385019391850191600101613a86565b509198975050505050505050565b600082601f830112613ae357600080fd5b81356020613af361390483614475565b80838252828201915082860187848660051b8901011115613b1357600080fd5b60005b8581101561399d57813584529284019290840190600101613b16565b600082601f830112613b4357600080fd5b611eb6838335602085016138f6565b803560ff81168114613b6357600080fd5b919050565b60008060408385031215613b7b57600080fd5b8235613b86816145ed565b946020939093013593505050565b60008060008060808587031215613baa57600080fd5b84356001600160401b0380821115613bc157600080fd5b613bcd88838901613934565b95506020870135915080821115613be357600080fd5b613bef88838901613ad2565b94506040870135915080821115613c0557600080fd5b50613c12878288016139aa565b949793965093946060013593505050565b60008060008060808587031215613c3957600080fd5b84356001600160401b0380821115613c5057600080fd5b613c5c88838901613934565b95506020870135915080821115613c7257600080fd5b613c7e88838901613ad2565b94506040870135915080821115613c9457600080fd5b613ca0888389016139aa565b93506060870135915080821115613cb657600080fd5b50613cc387828801613b32565b91505092959194509250565b600080600080600060a08688031215613ce757600080fd5b85356001600160401b0380821115613cfe57600080fd5b613d0a89838a01613934565b96506020880135915080821115613d2057600080fd5b613d2c89838a01613ad2565b95506040880135915080821115613d4257600080fd5b613d4e89838a01613a41565b94506060880135915080821115613d6457600080fd5b613d7089838a016139aa565b93506080880135915080821115613d8657600080fd5b50613d9388828901613b32565b9150509295509295909350565b600060208284031215613db257600080fd5b81518015158114611eb657600080fd5b600060208284031215613dd457600080fd5b5051919050565b600060208284031215613ded57600080fd5b81356001600160e01b031981168114611eb657600080fd5b600060208284031215613e1757600080fd5b81516001600160401b03811115613e2d57600080fd5b8201601f81018413613e3e57600080fd5b8051613e4c61390482614498565b818152856020838501011115613e6157600080fd5b6119df826020830160208601614519565b600060208284031215613e8457600080fd5b8135611eb6816145ed565b600060208284031215613ea157600080fd5b5035919050565b60008060408385031215613ebb57600080fd5b823591506020830135613ecd816145ed565b809150509250929050565b60008060408385031215613eeb57600080fd5b82359150613efb60208401613b52565b90509250929050565b60008060008060608587031215613f1a57600080fd5b84359350613f2a60208601613b52565b925060408501356001600160401b0380821115613f4657600080fd5b818701915087601f830112613f5a57600080fd5b813581811115613f6957600080fd5b886020828501011115613f7b57600080fd5b95989497505060200194505050565b600080600080600060a08688031215613fa257600080fd5b85359450613fb260208701613b52565b9350613fc060408701613b52565b94979396509394606081013594506080013592915050565b600060208284031215613fea57600080fd5b81516001600160601b0381168114611eb657600080fd5b600081518084526020808501945080840160005b8381101561403a5781516001600160a01b031687529582019590820190600101614015565b509495945050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561399d57601f1986840301895261407e838351614105565b98840198925090830190600101614062565b6000815180845260208085019450848260051b860182860160005b8581101561399d5783830389526140c3838351614105565b988501989250908401906001016140ab565b600081518084526020808501945080840160005b8381101561403a578151875295820195908201906001016140e9565b6000815180845261411d816020860160208601614519565b601f01601f19169290920160200192915050565b60008251614143818460208701614519565b9190910192915050565b60018060a01b038516815283602082015260a06040820152601860a08201527f73657450656e64696e6741646d696e286164647265737329000000000000000060c082015260e0606082015260006141a860e0830185614105565b905082608083015295945050505050565b60018060a01b038516815283602082015260a06040820152600060a082015260c0606082015260006141a860c0830185614105565b6080815260006142016080830187614001565b828103602084015261421381876140d5565b905082810360408401526142278186614045565b91505082606083015295945050505050565b60808152600061424c6080830187614001565b828103602084015261425e81876140d5565b905082810360408401526142728186614090565b905082810360608401526113e18185614045565b602081526000611eb66020830184614105565b60208101600883106142bb57634e487b7160e01b600052602160045260246000fd5b91905290565b60208082526018908201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604082015260600190565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b8981526001600160a01b0389166020820152610120604082018190526000906143a58382018b614001565b905082810360608401526143b9818a6140d5565b905082810360808401526143cd8189614090565b905082810360a08401526143e18188614045565b6001600160401b0387811660c0860152861660e0850152838103610100850152905061440d8185614105565b9c9b505050505050505050505050565b84815260ff841660208201528260408201526080606082015260006119c76080830184614105565b604051601f8201601f191681016001600160401b038111828210171561446d5761446d6145d7565b604052919050565b60006001600160401b0382111561448e5761448e6145d7565b5060051b60200190565b60006001600160401b038211156144b1576144b16145d7565b50601f01601f191660200190565b600082198211156144d2576144d2614595565b500190565b60006001600160401b038083168185168083038211156144f9576144f9614595565b01949350505050565b60008282101561451457614514614595565b500390565b60005b8381101561453457818101518382015260200161451c565b83811115611abc5750506000910152565b600181811c9082168061455957607f821691505b602082108114156130f757634e487b7160e01b600052602260045260246000fd5b600060001982141561458e5761458e614595565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611a2957600080fdfea264697066735822122031a007b52c99cf96292d8ac4ff8b8e70bb46118f78b0652d7f6755c2c6f4632164736f6c63430008070033"; diff --git a/libs/chains/src/eth/types/factories/FlashAttacks__factory.ts b/libs/chains/src/eth/types/factories/FlashAttacks__factory.ts deleted file mode 100644 index 17b08cd45f4..00000000000 --- a/libs/chains/src/eth/types/factories/FlashAttacks__factory.ts +++ /dev/null @@ -1,190 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { FlashAttacks } from "../FlashAttacks"; - -export class FlashAttacks__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - _token: string, - _MINTER: string, - _governance: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _token, - _MINTER, - _governance, - overrides || {} - ) as Promise; - } - getDeployTransaction( - _token: string, - _MINTER: string, - _governance: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - _token, - _MINTER, - _governance, - overrides || {} - ); - } - attach(address: string): FlashAttacks { - return super.attach(address) as FlashAttacks; - } - connect(signer: Signer): FlashAttacks__factory { - return super.connect(signer) as FlashAttacks__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): FlashAttacks { - return new Contract(address, _abi, signerOrProvider) as FlashAttacks; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_token", - type: "address", - }, - { - internalType: "address", - name: "_MINTER", - type: "address", - }, - { - internalType: "address", - name: "_governance", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalPower", - type: "uint256", - }, - { - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - ], - name: "flashProposal", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "votePower", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - ], - name: "flashVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "votePower", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "flashVotePermit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60e060405234801561001057600080fd5b50604051610e82380380610e8283398101604081905261002f91610072565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c0526100b4565b80516001600160a01b038116811461006d57600080fd5b919050565b600080600060608486031215610086578283fd5b61008f84610056565b925061009d60208501610056565b91506100ab60408501610056565b90509250925092565b60805160601c60a05160601c60c05160601c610d5f6101236000398061015b528061036d52806105a652508060c5528061020e52806102d7528061044552806105105280610653525080609852806101df52806102aa528061041852806104e352806106245250610d5f6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806302564fb8146100465780633b5c12b21461005b578063c56686ae1461006e575b600080fd5b610059610054366004610a3f565b610081565b005b610059610069366004610917565b610293565b61005961007c366004610a07565b6104cc565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906100f1907f00000000000000000000000000000000000000000000000000000000000000009030908b90600401610b97565b602060405180830381600087803b15801561010b57600080fd5b505af115801561011f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014391906108dc565b5060405163af1e0bd360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063af1e0bd3906101989088908890889088908890600401610c9b565b600060405180830381600087803b1580156101b257600080fd5b505af11580156101c6573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063a9059cbb9150610238907f0000000000000000000000000000000000000000000000000000000000000000908a90600401610bbb565b602060405180830381600087803b15801561025257600080fd5b505af1158015610266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028a91906108dc565b50505050505050565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610303907f00000000000000000000000000000000000000000000000000000000000000009030908d90600401610b97565b602060405180830381600087803b15801561031d57600080fd5b505af1158015610331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035591906108dc565b50604051633e1d06a760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f8741a9c906103ae908a908a908a908a908a908a908a90600401610bd4565b602060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040091906108ff565b5060405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061046f907f0000000000000000000000000000000000000000000000000000000000000000908c90600401610bbb565b602060405180830381600087803b15801561048957600080fd5b505af115801561049d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c191906108dc565b505050505050505050565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061053c907f00000000000000000000000000000000000000000000000000000000000000009030908890600401610b97565b602060405180830381600087803b15801561055657600080fd5b505af115801561056a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058e91906108dc565b506040516330962b7d60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063612c56fa906105dd9085908590600401610c8b565b600060405180830381600087803b1580156105f757600080fd5b505af115801561060b573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063a9059cbb915061067d907f0000000000000000000000000000000000000000000000000000000000000000908790600401610bbb565b602060405180830381600087803b15801561069757600080fd5b505af11580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf91906108dc565b50505050565b600082601f8301126106e5578081fd5b81356106f86106f382610ce5565b610cc1565b81815291506020808301908481018184028601820187101561071957600080fd5b60005b8481101561074157813561072f81610d03565b8452928201929082019060010161071c565b505050505092915050565b600082601f83011261075c578081fd5b813561076a6106f382610ce5565b81815291506020808301908481018184028601820187101561078b57600080fd5b60005b848110156107415781356107a181610d1b565b8452928201929082019060010161078e565b6000601f83818401126107c4578182fd5b82356107d26106f382610ce5565b818152925060208084019085810160005b84811015610862578135880189603f8201126107fe57600080fd5b8381013567ffffffffffffffff81111561081457fe5b610825818901601f19168601610cc1565b81815260408c8184860101111561083b57600080fd5b828185018884013750600091810186019190915285525092820192908201906001016107e3565b50505050505092915050565b600082601f83011261087e578081fd5b813561088c6106f382610ce5565b8181529150602080830190848101818402860182018710156108ad57600080fd5b60005b84811015610741578135845292820192908201906001016108b0565b80356108d781610d03565b919050565b6000602082840312156108ed578081fd5b81516108f881610d1b565b9392505050565b600060208284031215610910578081fd5b5051919050565b600080600080600080600080610100898b031215610933578384fd5b8835975061094360208a016108cc565b9650604089013567ffffffffffffffff8082111561095f578586fd5b61096b8c838d016106d5565b975060608b0135915080821115610980578586fd5b61098c8c838d0161086e565b965060808b01359150808211156109a1578586fd5b6109ad8c838d016107b3565b955060a08b01359150808211156109c2578485fd5b6109ce8c838d016107b3565b945060c08b01359150808211156109e3578384fd5b506109f08b828c0161074c565b92505060e089013590509295985092959890939650565b600080600060608486031215610a1b578283fd5b83359250602084013591506040840135610a3481610d1b565b809150509250925092565b60008060008060008060c08789031215610a57578182fd5b86359550602087013594506040870135610a7081610d1b565b9350606087013560ff81168114610a85578283fd5b9598949750929560808101359460a0909101359350915050565b6000815180845260208085019450808401835b83811015610ad0578151151587529582019590820190600101610ab2565b509495945050505050565b60008282518085526020808601955080818302840101818601855b84811015610b5b57601f1980878503018a5282518051808652895b81811015610b2c578281018801518782018901528701610b11565b81811115610b3c578a8883890101525b509a86019a601f01909116939093018401925090830190600101610af6565b5090979650505050505050565b6000815180845260208085019450808401835b83811015610ad057815187529582019590820190600101610b7b565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03888116825260e0602080840182905289519184018290526000928a820192909190610100860190855b81811015610c23578551851683529483019491830191600101610c05565b50508581036040870152610c37818c610b68565b93505050508281036060840152610c4e8188610adb565b90508281036080840152610c628187610adb565b905082810360a0840152610c768186610a9f565b9150508260c083015298975050505050505050565b9182521515602082015260400190565b948552921515602085015260ff9190911660408401526060830152608082015260a00190565b60405181810167ffffffffffffffff81118282101715610cdd57fe5b604052919050565b600067ffffffffffffffff821115610cf957fe5b5060209081020190565b6001600160a01b0381168114610d1857600080fd5b50565b8015158114610d1857600080fdfea2646970667358221220509def0ab238f8d545da76b86ed5fc1425195308d39720b66797889342cf939c64736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/GovernancePowerDelegationERC20__factory.ts b/libs/chains/src/eth/types/factories/GovernancePowerDelegationERC20__factory.ts deleted file mode 100644 index a9a8218d9d0..00000000000 --- a/libs/chains/src/eth/types/factories/GovernancePowerDelegationERC20__factory.ts +++ /dev/null @@ -1,498 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { GovernancePowerDelegationERC20 } from "../GovernancePowerDelegationERC20"; - -export class GovernancePowerDelegationERC20__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernancePowerDelegationERC20 { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernancePowerDelegationERC20; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "delegatee", - type: "address", - }, - { - indexed: false, - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "DelegateChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "user", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "DelegatedPowerChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DELEGATE_BY_TYPE_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "DELEGATE_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - ], - name: "delegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "delegateByType", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegator", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getDelegateeByType", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getPowerAtBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getPowerCurrent", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "totalSupplyAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/GovernanceStrategy__factory.ts b/libs/chains/src/eth/types/factories/GovernanceStrategy__factory.ts deleted file mode 100644 index 58fd4f2d099..00000000000 --- a/libs/chains/src/eth/types/factories/GovernanceStrategy__factory.ts +++ /dev/null @@ -1,180 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernanceStrategy } from "../GovernanceStrategy"; - -export class GovernanceStrategy__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - aave: string, - stkAave: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - aave, - stkAave, - overrides || {} - ) as Promise; - } - getDeployTransaction( - aave: string, - stkAave: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(aave, stkAave, overrides || {}); - } - attach(address: string): GovernanceStrategy { - return super.attach(address) as GovernanceStrategy; - } - connect(signer: Signer): GovernanceStrategy__factory { - return super.connect(signer) as GovernanceStrategy__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernanceStrategy { - return new Contract(address, _abi, signerOrProvider) as GovernanceStrategy; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "aave", - type: "address", - }, - { - internalType: "address", - name: "stkAave", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "AAVE", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "STK_AAVE", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPropositionPowerAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getTotalPropositionSupplyAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getTotalVotingSupplyAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotingPowerAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60c060405234801561001057600080fd5b5060405161050738038061050783398101604081905261002f91610069565b6001600160601b0319606092831b8116608052911b1660a05261009b565b80516001600160a01b038116811461006457600080fd5b919050565b6000806040838503121561007b578182fd5b6100848361004d565b91506100926020840161004d565b90509250929050565b60805160601c60a05160601c6104356100d260003980610132528061021b52508060e8528061017c52806102bb52506104356000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806348ccda3c146100675780637a71f9d714610085578063a1076e58146100a5578063bdf2878d146100b8578063eaeded5f146100c0578063f6b50203146100d3575b600080fd5b61006f6100e6565b60405161007c91906103b3565b60405180910390f35b610098610093366004610383565b61010a565b60405161007c91906103f6565b6100986100b336600461034d565b61011b565b61006f610130565b6100986100ce36600461034d565b610154565b6100986100e1366004610383565b610162565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061011582610162565b92915050565b600061012983836001610201565b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061012983836000610201565b604051630981b24d60e41b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063981b24d0906101b19085906004016103f6565b60206040518083038186803b1580156101c957600080fd5b505afa1580156101dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610115919061039b565b60405163c2ffbb9160e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c2ffbb9190610254908790879087906004016103c7565b60206040518083038186803b15801561026c57600080fd5b505afa158015610280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a4919061039b565b60405163c2ffbb9160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c2ffbb91906102f4908890889088906004016103c7565b60206040518083038186803b15801561030c57600080fd5b505afa158015610320573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610344919061039b565b01949350505050565b6000806040838503121561035f578182fd5b82356001600160a01b0381168114610375578283fd5b946020939093013593505050565b600060208284031215610394578081fd5b5035919050565b6000602082840312156103ac578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03841681526020810183905260608101600283106103e857fe5b826040830152949350505050565b9081526020019056fea26469706673582212200b3c1c6efd0da91caec4d0e1cb4bad53708d49150e4645a05e6c634acb3e29eb64736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/GovernanceV2Helper__factory.ts b/libs/chains/src/eth/types/factories/GovernanceV2Helper__factory.ts deleted file mode 100644 index f45b2603879..00000000000 --- a/libs/chains/src/eth/types/factories/GovernanceV2Helper__factory.ts +++ /dev/null @@ -1,389 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Signer, Contract, ContractFactory, Overrides } from "ethers"; -import { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernanceV2Helper } from "../GovernanceV2Helper"; - -export class GovernanceV2Helper__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): GovernanceV2Helper { - return super.attach(address) as GovernanceV2Helper; - } - connect(signer: Signer): GovernanceV2Helper__factory { - return super.connect(signer) as GovernanceV2Helper__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernanceV2Helper { - return new Contract(address, _abi, signerOrProvider) as GovernanceV2Helper; - } -} - -const _abi = [ - { - inputs: [], - name: "ONE_HUNDRED_WITH_PRECISION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - ], - name: "getProposal", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "totalVotingSupply", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumQuorum", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumDiff", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTimeWithGracePeriod", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalCreated", - type: "uint256", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "creator", - type: "address", - }, - { - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "address", - name: "strategy", - type: "address", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - { - internalType: "enum IAaveGovernanceV2.ProposalState", - name: "proposalState", - type: "uint8", - }, - ], - internalType: "struct IGovernanceV2Helper.ProposalStats", - name: "proposalStats", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "skip", - type: "uint256", - }, - { - internalType: "uint256", - name: "limit", - type: "uint256", - }, - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - ], - name: "getProposals", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "totalVotingSupply", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumQuorum", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumDiff", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTimeWithGracePeriod", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalCreated", - type: "uint256", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "creator", - type: "address", - }, - { - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "address", - name: "strategy", - type: "address", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - { - internalType: "enum IAaveGovernanceV2.ProposalState", - name: "proposalState", - type: "uint8", - }, - ], - internalType: "struct IGovernanceV2Helper.ProposalStats[]", - name: "proposalsStats", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "address[]", - name: "tokens", - type: "address[]", - }, - ], - name: "getTokensPower", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "votingPower", - type: "uint256", - }, - { - internalType: "address", - name: "delegatedAddressVotingPower", - type: "address", - }, - { - internalType: "uint256", - name: "propositionPower", - type: "uint256", - }, - { - internalType: "address", - name: "delegatedAddressPropositionPower", - type: "address", - }, - ], - internalType: "struct IGovernanceV2Helper.Power[]", - name: "power", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b5061162f806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631d73fd6d14610051578063a3cc31d51461006f578063a72b63251461008f578063e3726115146100af575b600080fd5b6100596100cf565b6040516100669190611566565b60405180910390f35b61008261007d366004610eb7565b6100d5565b6040516100669190611490565b6100a261009d366004611145565b6103bf565b6040516100669190611553565b6100c26100bd366004611174565b61086b565b60405161006691906114f3565b61271081565b6060815167ffffffffffffffff811180156100ef57600080fd5b5060405190808252806020026020018201604052801561012957816020015b610116610acf565b81526020019060019003908161010e5790505b50905060005b82518110156103b857600083828151811061014657fe5b602002602001015190506000816001600160a01b031663b2f4201d8760006040518363ffffffff1660e01b8152600401610181929190611469565b60206040518083038186803b15801561019957600080fd5b505afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d1919061112d565b90506000826001600160a01b031663b2f4201d8860016040518363ffffffff1660e01b8152600401610204929190611469565b60206040518083038186803b15801561021c57600080fd5b505afa158015610230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610254919061112d565b90506000836001600160a01b0316636f50458d8960006040518363ffffffff1660e01b8152600401610287929190611469565b60206040518083038186803b15801561029f57600080fd5b505afa1580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d79190610e9b565b90506000846001600160a01b0316636f50458d8a60016040518363ffffffff1660e01b815260040161030a929190611469565b60206040518083038186803b15801561032257600080fd5b505afa158015610336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035a9190610e9b565b90506040518060800160405280858152602001836001600160a01b03168152602001848152602001826001600160a01b031681525087878151811061039b57fe5b60200260200101819052505050505050808060010191505061012f565b5092915050565b6103c7610b09565b6103cf610be3565b604051633656de2160e01b81526001600160a01b03841690633656de21906103fb908790600401611566565b60006040518083038186803b15801561041357600080fd5b505afa158015610427573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261044f9190810190610f84565b90506000816101e001516001600160a01b0316637a71f9d78361010001516040518263ffffffff1660e01b81526004016104899190611566565b60206040518083038186803b1580156104a157600080fd5b505afa1580156104b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d9919061112d565b9050604051806102e0016040528082815260200183604001516001600160a01b031663b159beac6040518163ffffffff1660e01b815260040160206040518083038186803b15801561052a57600080fd5b505afa15801561053e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610562919061112d565b815260200183604001516001600160a01b0316639125fb586040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a457600080fd5b505afa1580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc919061112d565b81526020016000846101400151116105f95783610140015161067d565b61067d84610140015185604001516001600160a01b031663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b15801561063f57600080fd5b505afa158015610653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610677919061112d565b9061099a565b8152602001610702866001600160a01b031663a2b170b06040518163ffffffff1660e01b815260040160206040518083038186803b1580156106be57600080fd5b505afa1580156106d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f6919061112d565b610100860151906109fb565b81526020018360000151815260200183602001516001600160a01b0316815260200183604001516001600160a01b0316815260200183606001518152602001836080015181526020018360a0015181526020018360c0015181526020018360e00151815260200183610100015181526020018361012001518152602001836101400151815260200183610160015181526020018361018001518152602001836101a0015115158152602001836101c0015115158152602001836101e001516001600160a01b031681526020018361020001518152602001856001600160a01b0316639080936f886040518263ffffffff1660e01b81526004016108059190611566565b60206040518083038186803b15801561081d57600080fd5b505afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108559190610f65565b600781111561086057fe5b905295945050505050565b606060006108ea85846001600160a01b03166398e527d36040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ac57600080fd5b505afa1580156108c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e4919061112d565b906109fb565b905060008185116108fb57846108fd565b815b90508067ffffffffffffffff8111801561091657600080fd5b5060405190808252806020026020018201604052801561095057816020015b61093d610b09565b8152602001906001900390816109355790505b50925060005b818110156109905761097161096b828961099a565b866103bf565b84828151811061097d57fe5b6020908102919091010152600101610956565b5050509392505050565b6000828201838110156109f4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006109f483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060008184841115610ac75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a8c578181015183820152602001610a74565b50505050905090810190601f168015610ab95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60405180608001604052806000815260200160006001600160a01b031681526020016000815260200160006001600160a01b031681525090565b604051806102e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b031681526020016000801916815260200160006007811115610bde57fe5b905290565b6040518061022001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b03168152602001600080191681525090565b8051610c94816115e1565b919050565b600082601f830112610ca9578081fd5b8151610cbc610cb782611593565b61156f565b818152915060208083019084810181840286018201871015610cdd57600080fd5b60005b84811015610d05578151610cf3816115e1565b84529282019290820190600101610ce0565b505050505092915050565b600082601f830112610d20578081fd5b8151610d2e610cb782611593565b818152915060208083019084810181840286018201871015610d4f57600080fd5b60005b84811015610d0557610d6382610e8b565b84529282019290820190600101610d52565b6000601f8381840112610d86578182fd5b8251610d94610cb782611593565b818152925060208084019085810160005b84811015610e21578151880189603f820112610dc057600080fd5b8381015167ffffffffffffffff811115610dd657fe5b610de7818901601f1916860161156f565b81815260408c81848601011115610dfd57600080fd5b610e0c838884018387016115b1565b50865250509282019290820190600101610da5565b50505050505092915050565b600082601f830112610e3d578081fd5b8151610e4b610cb782611593565b818152915060208083019084810181840286018201871015610e6c57600080fd5b60005b84811015610d0557815184529282019290820190600101610e6f565b80518015158114610c9457600080fd5b600060208284031215610eac578081fd5b81516109f4816115e1565b60008060408385031215610ec9578081fd5b8235610ed4816115e1565b915060208381013567ffffffffffffffff811115610ef0578283fd5b8401601f81018613610f00578283fd5b8035610f0e610cb782611593565b81815283810190838501858402850186018a1015610f2a578687fd5b8694505b83851015610f55578035610f41816115e1565b835260019490940193918501918501610f2e565b5080955050505050509250929050565b600060208284031215610f76578081fd5b8151600881106109f4578182fd5b600060208284031215610f95578081fd5b815167ffffffffffffffff80821115610fac578283fd5b8184019150610220808387031215610fc2578384fd5b610fcb8161156f565b905082518152610fdd60208401610c89565b6020820152610fee60408401610c89565b6040820152606083015182811115611004578485fd5b61101087828601610c99565b606083015250608083015182811115611027578485fd5b61103387828601610e2d565b60808301525060a08301518281111561104a578485fd5b61105687828601610d75565b60a08301525060c08301518281111561106d578485fd5b61107987828601610d75565b60c08301525060e083015182811115611090578485fd5b61109c87828601610d10565b60e083015250610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a091506110e9828401610e8b565b828201526101c091506110fd828401610e8b565b828201526101e09150611111828401610c89565b9181019190915261020091820151918101919091529392505050565b60006020828403121561113e578081fd5b5051919050565b60008060408385031215611157578182fd5b823591506020830135611169816115e1565b809150509250929050565b600080600060608486031215611188578081fd5b833592506020840135915060408401356111a1816115e1565b809150509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156111f15781516001600160a01b0316875295820195908201906001016111cc565b509495945050505050565b6000815180845260208085019450808401835b838110156111f157815115158752958201959082019060010161120f565b6000815180845260208085018081965082840281019150828601855b8581101561128b5782840389528151805180865261126c818888018985016115b1565b99860199601f01601f1916949094018501935090840190600101611249565b5091979650505050505050565b6000815180845260208085019450808401835b838110156111f1578151875295820195908201906001016112ab565b15159052565b600881106112d757fe5b9052565b60006102e0825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c083015161132860c08601826111ac565b5060e083015161133b60e08601826111ac565b50610100808401518282870152611354838701826111b9565b9250505061012080840151858303828701526113708382611298565b92505050610140808401518583038287015261138c838261122d565b9250505061016080840151858303828701526113a8838261122d565b9250505061018080840151858303828701526113c483826111fc565b6101a086810151908801526101c080870151908801526101e08087015190880152610200808701519088015261022080870151908801526102408087015191945092509050611415828701826112c7565b50506102608084015161142a828701826112c7565b50506102808084015161143f828701826111ac565b50506102a083810151908501526102c08084015161145f828701826112cd565b5090949350505050565b6001600160a01b0383168152604081016002831061148357fe5b8260208301529392505050565b602080825282518282018190526000919060409081850190868401855b8281101561128b57815180518552868101516001600160a01b039081168887015286820151878701526060918201511690850152608090930192908501906001016114ad565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561154657603f198886030184526115348583516112db565b94509285019290850190600101611518565b5092979650505050505050565b6000602082526109f460208301846112db565b90815260200190565b60405181810167ffffffffffffffff8111828210171561158b57fe5b604052919050565b600067ffffffffffffffff8211156115a757fe5b5060209081020190565b60005b838110156115cc5781810151838201526020016115b4565b838111156115db576000848401525b50505050565b6001600160a01b03811681146115f657600080fd5b5056fea2646970667358221220386a074856eebdfb492fe2097af10dcc6c9b3087f8ee329dc8041c3330715f8464736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/GovernorAlphaMock__factory.ts b/libs/chains/src/eth/types/factories/GovernorAlphaMock__factory.ts deleted file mode 100644 index 600144086c2..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorAlphaMock__factory.ts +++ /dev/null @@ -1,725 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorAlphaMock } from "../GovernorAlphaMock"; - -export class GovernorAlphaMock__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - timelock_: string, - comp_: string, - guardian_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - timelock_, - comp_, - guardian_, - overrides || {} - ) as Promise; - } - getDeployTransaction( - timelock_: string, - comp_: string, - guardian_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - timelock_, - comp_, - guardian_, - overrides || {} - ); - } - attach(address: string): GovernorAlphaMock { - return super.attach(address) as GovernorAlphaMock; - } - connect(signer: Signer): GovernorAlphaMock__factory { - return super.connect(signer) as GovernorAlphaMock__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorAlphaMock { - return new Contract(address, _abi, signerOrProvider) as GovernorAlphaMock; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "timelock_", - type: "address", - }, - { - internalType: "address", - name: "comp_", - type: "address", - }, - { - internalType: "address", - name: "guardian_", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "support", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "votes", - type: "uint256", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "DOMAIN_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "__abdicate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "__acceptAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "__executeSetTimelockPendingAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "__queueSetTimelockPendingAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "comp", - outputs: [ - { - internalType: "contract MPondInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getActions", - outputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getReceipt", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - internalType: "struct GovernorAlphaMock.Receipt", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "guardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "latestProposalIds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalMaxOperations", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "proposals", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "proposer", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "quorumVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum GovernorAlphaMock.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "contract TimelockInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200331738038062003317833981016040819052620000349162000077565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560028054919093169116179055620000e3565b6000806000606084860312156200008c578283fd5b83516200009981620000ca565b6020850151909350620000ac81620000ca565b6040850151909250620000bf81620000ca565b809150509250925092565b6001600160a01b0381168114620000e057600080fd5b50565b61322480620000f36000396000f3fe60806040526004361061019c5760003560e01c8063452a9320116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b00914610456578063deaaa7cc14610476578063e23a9a521461048b578063fe0d94c1146104b85761019c565b8063d33219b41461040c578063da35c66414610421578063da95691a146104365761019c565b80637bdbe4d0116100c65780637bdbe4d0146103ad57806391500671146103c2578063b58131b0146103e2578063b9a61961146103f75761019c565b8063452a9320146103635780634634c61f14610378578063760fbc13146103985761019c565b806320606b7011610159578063328dd98211610133578063328dd982146102d15780633932abb1146103015780633e4f49e61461031657806340e58ee5146103435761019c565b806320606b701461028757806321f43e421461029c57806324bc1a64146102bc5761019c565b8063013cf08b146101a157806302a251a3146101df57806306fdde0314610201578063109d0af81461022357806315373e3d1461024557806317977c6114610267575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046123bc565b6104cb565b6040516101d6999897969594939291906130e3565b60405180910390f35b3480156101eb57600080fd5b506101f4610524565b6040516101d691906127e2565b34801561020d57600080fd5b50610216610529565b6040516101d69190612859565b34801561022f57600080fd5b5061023861055a565b6040516101d6919061263b565b34801561025157600080fd5b50610265610260366004612400565b610569565b005b34801561027357600080fd5b506101f4610282366004612204565b610578565b34801561029357600080fd5b506101f461058a565b3480156102a857600080fd5b506102656102b736600461221f565b6105ae565b3480156102c857600080fd5b506101f4610695565b3480156102dd57600080fd5b506102f16102ec3660046123bc565b6106a1565b6040516101d6949392919061278a565b34801561030d57600080fd5b506101f4610930565b34801561032257600080fd5b506103366103313660046123bc565b610935565b6040516101d69190612845565b34801561034f57600080fd5b5061026561035e3660046123bc565b610abf565b34801561036f57600080fd5b50610238610d28565b34801561038457600080fd5b5061026561039336600461242f565b610d37565b3480156103a457600080fd5b50610265610ee8565b3480156103b957600080fd5b506101f4610f24565b3480156103ce57600080fd5b506102656103dd36600461221f565b610f29565b3480156103ee57600080fd5b506101f4610ffe565b34801561040357600080fd5b5061026561100a565b34801561041857600080fd5b5061023861108f565b34801561042d57600080fd5b506101f461109e565b34801561044257600080fd5b506101f4610451366004612249565b6110a4565b34801561046257600080fd5b506102656104713660046123bc565b6114c4565b34801561048257600080fd5b506101f461172e565b34801561049757600080fd5b506104ab6104a63660046123d4565b611752565b6040516101d6919061301d565b6102656104c63660046123bc565b6117c1565b6004602052600090815260409020805460018201546002830154600784015460088501546009860154600a870154600b9097015495966001600160a01b0390951695939492939192909160ff8082169161010090041689565b600c90565b604051806040016040528060158152602001744d61726c696e20476f7665726e6f7220416c70686160581b81525081565b6001546001600160a01b031681565b610574338383611986565b5050565b60056020526000908152604090205481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6002546001600160a01b031633146105e15760405162461bcd60e51b81526004016105d890612b66565b60405180910390fd5b600080546040516001600160a01b0390911691630825f38f9183919061060b90879060200161263b565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161063a9493929190612668565b600060405180830381600087803b15801561065457600080fd5b505af1158015610668573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106909190810190612349565b505050565b671bc16d674ec8000090565b6060806060806000600460008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561072357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610705575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561077557602002820191906000526020600020905b815481526020019060010190808311610761575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156108485760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108345780601f1061080957610100808354040283529160200191610834565b820191906000526020600020905b81548152906001019060200180831161081757829003601f168201915b50505050508152602001906001019061079d565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561091a5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156109065780601f106108db57610100808354040283529160200191610906565b820191906000526020600020905b8154815290600101906020018083116108e957829003601f168201915b50505050508152602001906001019061086f565b5050505090509450945094509450509193509193565b600190565b600081600354101580156109495750600082115b6109655760405162461bcd60e51b81526004016105d890612c2c565b6000828152600460205260409020600b81015460ff161561098a576002915050610aba565b8060070154431161099f576000915050610aba565b806008015443116109b4576001915050610aba565b80600a015481600901541115806109d557506109ce610695565b8160090154105b156109e4576003915050610aba565b60028101546109f7576004915050610aba565b600b810154610100900460ff1615610a13576007915050610aba565b610aa4816002015460008054906101000a90046001600160a01b03166001600160a01b031663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6757600080fd5b505afa158015610a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9f9190612331565b611b4f565b4210610ab4576006915050610aba565b60059150505b919050565b6000610aca82610935565b90506007816007811115610ada57fe5b1415610af85760405162461bcd60e51b81526004016105d890612c79565b60008281526004602052604090206002546001600160a01b0316331480610bc35750610b22610ffe565b60018054838201546001600160a01b039182169263782d6fe19290911690610b4b904390611b7b565b6040518363ffffffff1660e01b8152600401610b6892919061264f565b60206040518083038186803b158015610b8057600080fd5b505afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb89190612485565b6001600160601b0316105b610bdf5760405162461bcd60e51b81526004016105d890612d01565b600b8101805460ff1916600117905560005b6003820154811015610ceb576000546003830180546001600160a01b039092169163591fcdfe919084908110610c2357fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610c4b57fe5b9060005260206000200154856005018581548110610c6557fe5b90600052602060002001866006018681548110610c7e57fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610cad959493929190612751565b600060405180830381600087803b158015610cc757600080fd5b505af1158015610cdb573d6000803e3d6000fd5b505060019092019150610bf19050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610d1b91906127e2565b60405180910390a1505050565b6002546001600160a01b031681565b6040805180820190915260158152744d61726c696e20476f7665726e6f7220416c70686160581b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f37bc407a8c335d268e200f7c1e5054743f95a56373a8a102b4142e8aa2546b48610db0611ba3565b30604051602001610dc494939291906127eb565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee8787604051602001610e139392919061280f565b60405160208183030381529060405280519060200120905060008282604051602001610e40929190612620565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e7d9493929190612827565b6020604051602081039080840390855afa158015610e9f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ed25760405162461bcd60e51b81526004016105d8906129a9565b610edd818a8a611986565b505050505050505050565b6002546001600160a01b03163314610f125760405162461bcd60e51b81526004016105d890612f91565b600280546001600160a01b0319169055565b600a90565b6002546001600160a01b03163314610f535760405162461bcd60e51b81526004016105d890612e46565b600080546040516001600160a01b0390911691633a66f90191839190610f7d90879060200161263b565b604051602081830303815290604052856040518563ffffffff1660e01b8152600401610fac9493929190612668565b602060405180830381600087803b158015610fc657600080fd5b505af1158015610fda573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106909190612331565b670de0b6b3a764000090565b6002546001600160a01b031633146110345760405162461bcd60e51b81526004016105d890612ab8565b6000805460408051630e18b68160e01b815290516001600160a01b0390921692630e18b6819260048084019382900301818387803b15801561107557600080fd5b505af1158015611089573d6000803e3d6000fd5b50505050565b6000546001600160a01b031681565b60035481565b60006110ae610ffe565b600180546001600160a01b03169063782d6fe19033906110cf904390611b7b565b6040518363ffffffff1660e01b81526004016110ec92919061264f565b60206040518083038186803b15801561110457600080fd5b505afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190612485565b6001600160601b0316116111625760405162461bcd60e51b81526004016105d890612eba565b84518651148015611174575083518651145b8015611181575082518651145b61119d5760405162461bcd60e51b81526004016105d890612f23565b85516111bb5760405162461bcd60e51b81526004016105d890612bdc565b6111c3610f24565b865111156111e35760405162461bcd60e51b81526004016105d8906128da565b33600090815260056020526040902054801561126057600061120482610935565b9050600181600781111561121457fe5b14156112325760405162461bcd60e51b81526004016105d890612d54565b600081600781111561124057fe5b141561125e5760405162461bcd60e51b81526004016105d890612926565b505b600061126e43610a9f610930565b9050600061127e82610a9f610524565b6003805460010190559050611291611d06565b604051806101a001604052806003548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060046000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611374929190611d7b565b5060808201518051611390916004840191602090910190611de0565b5060a082015180516113ac916005840191602090910190611e27565b5060c082015180516113c8916006840191602090910190611e80565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff02191690831515021790555090505080600001516005600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516114ae9998979695949392919061304b565b60405180910390a1519998505050505050505050565b60046114cf82610935565b60078111156114da57fe5b146114f75760405162461bcd60e51b81526004016105d890612a4a565b600081815260046020818152604080842084548251630d48571f60e31b8152925191959461154c9442946001600160a01b0390931693636a42b8f8938084019390829003018186803b158015610a6757600080fd5b905060005b60038301548110156116f4576116ec83600301828154811061156f57fe5b6000918252602090912001546004850180546001600160a01b03909216918490811061159757fe5b90600052602060002001548560050184815481106115b157fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561163f5780601f106116145761010080835404028352916020019161163f565b820191906000526020600020905b81548152906001019060200180831161162257829003601f168201915b505050505086600601858154811061165357fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116e15780601f106116b6576101008083540402835291602001916116e1565b820191906000526020600020905b8154815290600101906020018083116116c457829003601f168201915b505050505086611ba7565b600101611551565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290610d1b908590849061312f565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b61175a611ed9565b5060008281526004602090815260408083206001600160a01b0385168452600c018252918290208251606081018452905460ff80821615158352610100820416151592820192909252620100009091046001600160601b0316918101919091525b92915050565b60056117cc82610935565b60078111156117d757fe5b146117f45760405162461bcd60e51b81526004016105d890612dd7565b6000818152600460205260408120600b8101805461ff001916610100179055905b600382015481101561194a576000546004830180546001600160a01b0390921691630825f38f91908490811061184757fe5b906000526020600020015484600301848154811061186157fe5b6000918252602090912001546004860180546001600160a01b03909216918690811061188957fe5b90600052602060002001548660050186815481106118a357fe5b906000526020600020018760060187815481106118bc57fe5b9060005260206000200188600201546040518763ffffffff1660e01b81526004016118eb959493929190612751565b6000604051808303818588803b15801561190457600080fd5b505af1158015611918573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526119419190810190612349565b50600101611815565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f8260405161197a91906127e2565b60405180910390a15050565b600161199183610935565b600781111561199c57fe5b146119b95760405162461bcd60e51b81526004016105d8906129fc565b60008281526004602090815260408083206001600160a01b0387168452600c8101909252909120805460ff1615611a025760405162461bcd60e51b81526004016105d890612b15565b600154600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191611a38918a9160040161264f565b60206040518083038186803b158015611a5057600080fd5b505afa158015611a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a889190612485565b90508315611ab157611aa78360090154826001600160601b0316611b4f565b6009840155611ace565b611ac883600a0154826001600160601b0316611b4f565b600a8401555b8154600160ff199091161761ff00191661010085151502176dffffffffffffffffffffffff00001916620100006001600160601b038316021782556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690611b3f9088908890889086906126d4565b60405180910390a1505050505050565b600082820183811015611b745760405162461bcd60e51b81526004016105d890612cd6565b9392505050565b600082821115611b9d5760405162461bcd60e51b81526004016105d890612fee565b50900390565b4690565b6000546040516001600160a01b039091169063f2b0653790611bd59088908890889088908890602001612705565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611c0791906127e2565b60206040518083038186803b158015611c1f57600080fd5b505afa158015611c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c579190612315565b15611c745760405162461bcd60e51b81526004016105d89061286c565b600054604051633a66f90160e01b81526001600160a01b0390911690633a66f90190611cac9088908890889088908890600401612705565b602060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfe9190612331565b505050505050565b604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215611dd0579160200282015b82811115611dd057825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611d9b565b50611ddc929150611ef9565b5090565b828054828255906000526020600020908101928215611e1b579160200282015b82811115611e1b578251825591602001919060010190611e00565b50611ddc929150611f18565b828054828255906000526020600020908101928215611e74579160200282015b82811115611e745782518051611e64918491602090910190611f2d565b5091602001919060010190611e47565b50611ddc929150611f9a565b828054828255906000526020600020908101928215611ecd579160200282015b82811115611ecd5782518051611ebd918491602090910190611f2d565b5091602001919060010190611ea0565b50611ddc929150611fb7565b604080516060810182526000808252602082018190529181019190915290565b5b80821115611ddc5780546001600160a01b0319168155600101611efa565b5b80821115611ddc5760008155600101611f19565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611f6e57805160ff1916838001178555611e1b565b82800160010185558215611e1b5791820182811115611e1b578251825591602001919060010190611e00565b80821115611ddc576000611fae8282611fd4565b50600101611f9a565b80821115611ddc576000611fcb8282611fd4565b50600101611fb7565b50805460018160011615610100020316600290046000825580601f10611ffa5750612018565b601f0160209004906000526020600020908101906120189190611f18565b50565b80356001600160a01b03811681146117bb57600080fd5b600082601f830112612042578081fd5b813561205561205082613164565b61313d565b81815291506020808301908481018184028601820187101561207657600080fd5b60005b8481101561209d5761208b888361201b565b84529282019290820190600101612079565b505050505092915050565b600082601f8301126120b8578081fd5b81356120c661205082613164565b818152915060208083019084810160005b8481101561209d576120ee888484358a01016121b6565b845292820192908201906001016120d7565b600082601f830112612110578081fd5b813561211e61205082613164565b818152915060208083019084810160005b8481101561209d57612146888484358a01016121b6565b8452928201929082019060010161212f565b600082601f830112612168578081fd5b813561217661205082613164565b81815291506020808301908481018184028601820187101561219757600080fd5b60005b8481101561209d5781358452928201929082019060010161219a565b600082601f8301126121c6578081fd5b81356121d461205082613184565b91508082528360208285010111156121eb57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215612215578081fd5b611b74838361201b565b60008060408385031215612231578081fd5b61223b848461201b565b946020939093013593505050565b600080600080600060a08688031215612260578081fd5b853567ffffffffffffffff80821115612277578283fd5b61228389838a01612032565b96506020880135915080821115612298578283fd5b6122a489838a01612158565b955060408801359150808211156122b9578283fd5b6122c589838a01612100565b945060608801359150808211156122da578283fd5b6122e689838a016120a8565b935060808801359150808211156122fb578283fd5b50612308888289016121b6565b9150509295509295909350565b600060208284031215612326578081fd5b8151611b74816131e0565b600060208284031215612342578081fd5b5051919050565b60006020828403121561235a578081fd5b815167ffffffffffffffff811115612370578182fd5b8201601f81018413612380578182fd5b805161238e61205082613184565b8181528560208385010111156123a2578384fd5b6123b38260208301602086016131b4565b95945050505050565b6000602082840312156123cd578081fd5b5035919050565b600080604083850312156123e6578182fd5b823591506123f7846020850161201b565b90509250929050565b60008060408385031215612412578182fd5b823591506020830135612424816131e0565b809150509250929050565b600080600080600060a08688031215612446578283fd5b853594506020860135612458816131e0565b9350604086013560ff8116811461246d578384fd5b94979396509394606081013594506080013592915050565b600060208284031215612496578081fd5b81516001600160601b0381168114611b74578182fd5b6000815180845260208085019450808401835b838110156124e45781516001600160a01b0316875295820195908201906001016124bf565b509495945050505050565b6000815180845260208085018081965082840281019150828601855b85811015612535578284038952612523848351612571565b9885019893509084019060010161250b565b5091979650505050505050565b6000815180845260208085019450808401835b838110156124e457815187529582019590820190600101612555565b600081518084526125898160208601602086016131b4565b601f01601f19169290920160200192915050565b600081546001808216600081146125bb57600181146125d957612617565b60028304607f16865260ff1983166020870152604086019350612617565b600283048087526125e9866131a8565b60005b8281101561260d5781546020828b01015284820191506020810190506125ec565b8801602001955050505b50505092915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038616825284602083015260a06040830152601860a08301527f73657450656e64696e6741646d696e286164647265737329000000000000000060c083015260e060608301526126c360e0830185612571565b905082608083015295945050505050565b6001600160a01b039490941684526020840192909252151560408301526001600160601b0316606082015260800190565b600060018060a01b038716825285602083015260a0604083015261272c60a0830186612571565b828103606084015261273e8186612571565b9150508260808301529695505050505050565b600060018060a01b038716825285602083015260a0604083015261277860a083018661259d565b828103606084015261273e818661259d565b60006080825261279d60808301876124ac565b82810360208401526127af8187612542565b905082810360408401526127c381866124ef565b905082810360608401526127d781856124ef565b979650505050505050565b90815260200190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b602081016008831061285357fe5b91905290565b600060208252611b746020830184612571565b60208082526048908201527f476f7665726e6f72416c7068614d6f636b3a3a5f71756575654f72526576657260408201527f743a2070726f706f73616c20616374696f6e20616c7265616479207175657565606082015267642061742065746160c01b608082015260a00190565b6020808252602c908201527f476f7665726e6f72416c7068614d6f636b3a3a70726f706f73653a20746f6f2060408201526b6d616e7920616374696f6e7360a01b606082015260800190565b6020808252605d908201527f476f7665726e6f72416c7068614d6f636b3a3a70726f706f73653a206f6e652060408201527f6c6976652070726f706f73616c207065722070726f706f7365722c20666f756e60608201527f6420616e20616c72656164792070656e64696e672070726f706f73616c000000608082015260a00190565b60208082526033908201527f476f7665726e6f72416c7068614d6f636b3a3a63617374566f746542795369676040820152723a20696e76616c6964207369676e617475726560681b606082015260800190565b6020808252602e908201527f476f7665726e6f72416c7068614d6f636b3a3a5f63617374566f74653a20766f60408201526d1d1a5b99c81a5cc818db1bdcd95960921b606082015260800190565b60208082526048908201527f476f7665726e6f72416c7068614d6f636b3a3a71756575653a2070726f706f7360408201527f616c2063616e206f6e6c792062652071756575656420696620697420697320736060820152671d58d8d95959195960c21b608082015260a00190565b6020808252603d908201527f476f7665726e6f72416c7068614d6f636b3a3a5f5f61636365707441646d696e60408201527f3a2073656e646572206d75737420626520676f7620677561726469616e000000606082015260800190565b60208082526031908201527f476f7665726e6f72416c7068614d6f636b3a3a5f63617374566f74653a20766f6040820152701d195c88185b1c9958591e481d9bdd1959607a1b606082015260800190565b60208082526050908201527f476f7665726e6f72416c7068614d6f636b3a3a5f5f657865637574655365745460408201527f696d656c6f636b50656e64696e6741646d696e3a2073656e646572206d75737460608201526f1031329033b7bb1033bab0b93234b0b760811b608082015260a00190565b60208082526030908201527f476f7665726e6f72416c7068614d6f636b3a3a70726f706f73653a206d75737460408201526f2070726f7669646520616374696f6e7360801b606082015260800190565b6020808252602d908201527f476f7665726e6f72416c7068614d6f636b3a3a73746174653a20696e76616c6960408201526c19081c1c9bdc1bdcd85b081a59609a1b606082015260800190565b6020808252603a908201527f476f7665726e6f72416c7068614d6f636b3a3a63616e63656c3a2063616e6e6f60408201527f742063616e63656c2065786563757465642070726f706f73616c000000000000606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526033908201527f476f7665726e6f72416c7068614d6f636b3a3a63616e63656c3a2070726f706f6040820152721cd95c8818589bdd99481d1a1c995cda1bdb19606a1b606082015260800190565b6020808252605c908201527f476f7665726e6f72416c7068614d6f636b3a3a70726f706f73653a206f6e652060408201527f6c6976652070726f706f73616c207065722070726f706f7365722c20666f756e60608201527f6420616e20616c7265616479206163746976652070726f706f73616c00000000608082015260a00190565b60208082526049908201527f476f7665726e6f72416c7068614d6f636b3a3a657865637574653a2070726f7060408201527f6f73616c2063616e206f6e6c79206265206578656375746564206966206974206060820152681a5cc81c5d595d595960ba1b608082015260a00190565b6020808252604e908201527f476f7665726e6f72416c7068614d6f636b3a3a5f5f717565756553657454696d60408201527f656c6f636b50656e64696e6741646d696e3a2073656e646572206d757374206260608201526d329033b7bb1033bab0b93234b0b760911b608082015260a00190565b60208082526043908201527f476f7665726e6f72416c7068614d6f636b3a3a70726f706f73653a2070726f7060408201527f6f73657220766f7465732062656c6f772070726f706f73616c207468726573686060820152621bdb1960ea1b608082015260a00190565b60208082526048908201527f476f7665726e6f72416c7068614d6f636b3a3a70726f706f73653a2070726f7060408201527f6f73616c2066756e6374696f6e20696e666f726d6174696f6e206172697479206060820152670dad2e6dac2e8c6d60c31b608082015260a00190565b6020808252603a908201527f476f7665726e6f72416c7068614d6f636b3a3a5f5f61626469636174653a207360408201527f656e646572206d75737420626520676f7620677561726469616e000000000000606082015260800190565b6020808252601590820152747375627472616374696f6e20756e646572666c6f7760581b604082015260600190565b8151151581526020808301511515908201526040918201516001600160601b03169181019190915260600190565b8981526001600160a01b0389166020820152610120604082018190526000906130768382018b6124ac565b9050828103606084015261308a818a612542565b9050828103608084015261309e81896124ef565b905082810360a08401526130b281886124ef565b90508560c08401528460e08401528281036101008401526130d38185612571565b9c9b505050505050505050505050565b9889526001600160a01b0397909716602089015260408801959095526060870193909352608086019190915260a085015260c0840152151560e083015215156101008201526101200190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561315c57600080fd5b604052919050565b600067ffffffffffffffff82111561317a578081fd5b5060209081020190565b600067ffffffffffffffff82111561319a578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b838110156131cf5781810151838201526020016131b7565b838111156110895750506000910152565b801515811461201857600080fdfea26469706673582212205e60f1c0c1967cdcb6c78fc487baa84d16ab6919ec69251bde68192f7c5b473864736f6c634300060c0033"; diff --git a/libs/chains/src/eth/types/factories/GovernorAlpha__factory.ts b/libs/chains/src/eth/types/factories/GovernorAlpha__factory.ts deleted file mode 100644 index 6137ec3666b..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorAlpha__factory.ts +++ /dev/null @@ -1,725 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorAlpha } from "../GovernorAlpha"; - -export class GovernorAlpha__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - timelock_: string, - MPond_: string, - guardian_: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - timelock_, - MPond_, - guardian_, - overrides || {} - ) as Promise; - } - getDeployTransaction( - timelock_: string, - MPond_: string, - guardian_: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - timelock_, - MPond_, - guardian_, - overrides || {} - ); - } - attach(address: string): GovernorAlpha { - return super.attach(address) as GovernorAlpha; - } - connect(signer: Signer): GovernorAlpha__factory { - return super.connect(signer) as GovernorAlpha__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorAlpha { - return new Contract(address, _abi, signerOrProvider) as GovernorAlpha; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "timelock_", - type: "address", - }, - { - internalType: "address", - name: "MPond_", - type: "address", - }, - { - internalType: "address", - name: "guardian_", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "support", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "votes", - type: "uint256", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "DOMAIN_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MPond", - outputs: [ - { - internalType: "contract MPondInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "__abdicate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "__acceptAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "__executeSetTimelockPendingAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "__queueSetTimelockPendingAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - ], - name: "castVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getActions", - outputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getReceipt", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - internalType: "struct GovernorAlpha.Receipt", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "guardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "latestProposalIds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalMaxOperations", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "proposals", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "proposer", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "quorumVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum GovernorAlpha.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "contract TimelockInterface", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b50604051620032c9380380620032c9833981016040819052620000349162000077565b600080546001600160a01b039485166001600160a01b031991821617909155600180549385169382169390931790925560028054919093169116179055620000e3565b6000806000606084860312156200008c578283fd5b83516200009981620000ca565b6020850151909350620000ac81620000ca565b6040850151909250620000bf81620000ca565b809150509250925092565b6001600160a01b0381168114620000e057600080fd5b50565b6131d680620000f36000396000f3fe60806040526004361061019c5760003560e01c80634634c61f116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b00914610456578063deaaa7cc14610476578063e23a9a521461048b578063fe0d94c1146104b85761019c565b8063d33219b41461040c578063da35c66414610421578063da95691a146104365761019c565b806391500671116100c657806391500671146103ad578063ad0d7f7d146103cd578063b58131b0146103e2578063b9a61961146103f75761019c565b80634634c61f14610363578063760fbc13146103835780637bdbe4d0146103985761019c565b806321f43e42116101595780633932abb1116101335780633932abb1146102df5780633e4f49e6146102f457806340e58ee514610321578063452a9320146103415761019c565b806321f43e421461027a57806324bc1a641461029a578063328dd982146102af5761019c565b8063013cf08b146101a157806302a251a3146101df57806306fdde031461020157806315373e3d1461022357806317977c611461024557806320606b7014610265575b600080fd5b3480156101ad57600080fd5b506101c16101bc3660046123bf565b6104cb565b6040516101d699989796959493929190613095565b60405180910390f35b3480156101eb57600080fd5b506101f4610524565b6040516101d691906127e2565b34801561020d57600080fd5b5061021661052a565b6040516101d69190612859565b34801561022f57600080fd5b5061024361023e366004612403565b61055b565b005b34801561025157600080fd5b506101f4610260366004612207565b61056a565b34801561027157600080fd5b506101f461057c565b34801561028657600080fd5b50610243610295366004612222565b6105a0565b3480156102a657600080fd5b506101f4610687565b3480156102bb57600080fd5b506102cf6102ca3660046123bf565b610695565b6040516101d6949392919061278a565b3480156102eb57600080fd5b506101f4610924565b34801561030057600080fd5b5061031461030f3660046123bf565b610929565b6040516101d69190612845565b34801561032d57600080fd5b5061024361033c3660046123bf565b610ab3565b34801561034d57600080fd5b50610356610d1c565b6040516101d6919061263b565b34801561036f57600080fd5b5061024361037e366004612432565b610d2b565b34801561038f57600080fd5b50610243610edc565b3480156103a457600080fd5b506101f4610f18565b3480156103b957600080fd5b506102436103c8366004612222565b610f1d565b3480156103d957600080fd5b50610356610ff2565b3480156103ee57600080fd5b506101f4611001565b34801561040357600080fd5b5061024361100d565b34801561041857600080fd5b50610356611092565b34801561042d57600080fd5b506101f46110a1565b34801561044257600080fd5b506101f461045136600461224c565b6110a7565b34801561046257600080fd5b506102436104713660046123bf565b6114c7565b34801561048257600080fd5b506101f4611731565b34801561049757600080fd5b506104ab6104a63660046123d7565b611755565b6040516101d69190612fcf565b6102436104c63660046123bf565b6117c4565b6004602052600090815260409020805460018201546002830154600784015460088501546009860154600a870154600b9097015495966001600160a01b0390951695939492939192909160ff8082169161010090041689565b61433090565b604051806040016040528060158152602001744d61726c696e20476f7665726e6f7220416c70686160581b81525081565b610566338383611989565b5050565b60056020526000908152604090205481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6002546001600160a01b031633146105d35760405162461bcd60e51b81526004016105ca9061299e565b60405180910390fd5b600080546040516001600160a01b0390911691630825f38f918391906105fd90879060200161263b565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161062c9493929190612668565b600060405180830381600087803b15801561064657600080fd5b505af115801561065a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610682919081019061234c565b505050565b6901b1ae4d6e2ef500000090565b6060806060806000600460008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561071757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106f9575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561076957602002820191906000526020600020905b815481526020019060010190808311610755575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561083c5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108285780601f106107fd57610100808354040283529160200191610828565b820191906000526020600020905b81548152906001019060200180831161080b57829003601f168201915b505050505081526020019060010190610791565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561090e5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108fa5780601f106108cf576101008083540402835291602001916108fa565b820191906000526020600020905b8154815290600101906020018083116108dd57829003601f168201915b505050505081526020019060010190610863565b5050505090509450945094509450509193509193565b600190565b6000816003541015801561093d5750600082115b6109595760405162461bcd60e51b81526004016105ca90612a10565b6000828152600460205260409020600b81015460ff161561097e576002915050610aae565b80600701544311610993576000915050610aae565b806008015443116109a8576001915050610aae565b80600a015481600901541115806109c957506109c2610687565b8160090154105b156109d8576003915050610aae565b60028101546109eb576004915050610aae565b600b810154610100900460ff1615610a07576007915050610aae565b610a98816002015460008054906101000a90046001600160a01b03166001600160a01b031663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5b57600080fd5b505afa158015610a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a939190612334565b611b52565b4210610aa8576006915050610aae565b60059150505b919050565b6000610abe82610929565b90506007816007811115610ace57fe5b1415610aec5760405162461bcd60e51b81526004016105ca90612eaa565b60008281526004602052604090206002546001600160a01b0316331480610bb75750610b16611001565b60018054838201546001600160a01b039182169263782d6fe19290911690610b3f904390611b7e565b6040518363ffffffff1660e01b8152600401610b5c92919061264f565b60206040518083038186803b158015610b7457600080fd5b505afa158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac9190612488565b6001600160601b0316105b610bd35760405162461bcd60e51b81526004016105ca90612c76565b600b8101805460ff1916600117905560005b6003820154811015610cdf576000546003830180546001600160a01b039092169163591fcdfe919084908110610c1757fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610c3f57fe5b9060005260206000200154856005018581548110610c5957fe5b90600052602060002001866006018681548110610c7257fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610ca1959493929190612751565b600060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b505060019092019150610be59050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610d0f91906127e2565b60405180910390a1505050565b6002546001600160a01b031681565b6040805180820190915260158152744d61726c696e20476f7665726e6f7220416c70686160581b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f37bc407a8c335d268e200f7c1e5054743f95a56373a8a102b4142e8aa2546b48610da4611ba6565b30604051602001610db894939291906127eb565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee8787604051602001610e079392919061280f565b60405160208183030381529060405280519060200120905060008282604051602001610e34929190612620565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e719493929190612827565b6020604051602081039080840390855afa158015610e93573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ec65760405162461bcd60e51b81526004016105ca90612dd8565b610ed1818a8a611989565b505050505050505050565b6002546001600160a01b03163314610f065760405162461bcd60e51b81526004016105ca90612f79565b600280546001600160a01b0319169055565b600a90565b6002546001600160a01b03163314610f475760405162461bcd60e51b81526004016105ca90612b29565b600080546040516001600160a01b0390911691633a66f90191839190610f7190879060200161263b565b604051602081830303815290604052856040518563ffffffff1660e01b8152600401610fa09493929190612668565b602060405180830381600087803b158015610fba57600080fd5b505af1158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106829190612334565b6001546001600160a01b031681565b670de0b6b3a764000090565b6002546001600160a01b031633146110375760405162461bcd60e51b81526004016105ca9061286c565b6000805460408051630e18b68160e01b815290516001600160a01b0390921692630e18b6819260048084019382900301818387803b15801561107857600080fd5b505af115801561108c573d6000803e3d6000fd5b50505050565b6000546001600160a01b031681565b60035481565b60006110b1611001565b600180546001600160a01b03169063782d6fe19033906110d2904390611b7e565b6040518363ffffffff1660e01b81526004016110ef92919061264f565b60206040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190612488565b6001600160601b0316116111655760405162461bcd60e51b81526004016105ca90612d7b565b84518651148015611177575083518651145b8015611184575082518651145b6111a05760405162461bcd60e51b81526004016105ca90612c0c565b85516111be5760405162461bcd60e51b81526004016105ca90612d2f565b6111c6610f18565b865111156111e65760405162461bcd60e51b81526004016105ca90612b99565b33600090815260056020526040902054801561126357600061120782610929565b9050600181600781111561121757fe5b14156112355760405162461bcd60e51b81526004016105ca90612e27565b600081600781111561124357fe5b14156112615760405162461bcd60e51b81526004016105ca90612aa6565b505b600061127143610a93610924565b9050600061128182610a93610524565b6003805460010190559050611294611d09565b604051806101a001604052806003548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060046000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611377929190611d7e565b5060808201518051611393916004840191602090910190611de3565b5060a082015180516113af916005840191602090910190611e2a565b5060c082015180516113cb916006840191602090910190611e83565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff02191690831515021790555090505080600001516005600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516114b199989796959493929190612ffd565b60405180910390a1519998505050505050505050565b60046114d282610929565b60078111156114dd57fe5b146114fa5760405162461bcd60e51b81526004016105ca906128c9565b600081815260046020818152604080842084548251630d48571f60e31b8152925191959461154f9442946001600160a01b0390931693636a42b8f8938084019390829003018186803b158015610a5b57600080fd5b905060005b60038301548110156116f7576116ef83600301828154811061157257fe5b6000918252602090912001546004850180546001600160a01b03909216918490811061159a57fe5b90600052602060002001548560050184815481106115b457fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116425780601f1061161757610100808354040283529160200191611642565b820191906000526020600020905b81548152906001019060200180831161162557829003601f168201915b505050505086600601858154811061165657fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116e45780601f106116b9576101008083540402835291602001916116e4565b820191906000526020600020905b8154815290600101906020018083116116c757829003601f168201915b505050505086611baa565b600101611554565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290610d0f90859084906130e1565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b61175d611edc565b5060008281526004602090815260408083206001600160a01b0385168452600c018252918290208251606081018452905460ff80821615158352610100820416151592820192909252620100009091046001600160601b0316918101919091525b92915050565b60056117cf82610929565b60078111156117da57fe5b146117f75760405162461bcd60e51b81526004016105ca90612933565b6000818152600460205260408120600b8101805461ff001916610100179055905b600382015481101561194d576000546004830180546001600160a01b0390921691630825f38f91908490811061184a57fe5b906000526020600020015484600301848154811061186457fe5b6000918252602090912001546004860180546001600160a01b03909216918690811061188c57fe5b90600052602060002001548660050186815481106118a657fe5b906000526020600020018760060187815481106118bf57fe5b9060005260206000200188600201546040518763ffffffff1660e01b81526004016118ee959493929190612751565b6000604051808303818588803b15801561190757600080fd5b505af115801561191b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611944919081019061234c565b50600101611818565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f8260405161197d91906127e2565b60405180910390a15050565b600161199483610929565b600781111561199f57fe5b146119bc5760405162461bcd60e51b81526004016105ca90612f00565b60008281526004602090815260408083206001600160a01b0387168452600c8101909252909120805460ff1615611a055760405162461bcd60e51b81526004016105ca90612a59565b600154600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191611a3b918a9160040161264f565b60206040518083038186803b158015611a5357600080fd5b505afa158015611a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8b9190612488565b90508315611ab457611aaa8360090154826001600160601b0316611b52565b6009840155611ad1565b611acb83600a0154826001600160601b0316611b52565b600a8401555b8154600160ff199091161761ff00191661010085151502176dffffffffffffffffffffffff00001916620100006001600160601b038316021782556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690611b429088908890889086906126d4565b60405180910390a1505050505050565b600082820183811015611b775760405162461bcd60e51b81526004016105ca90612be1565b9392505050565b600082821115611ba05760405162461bcd60e51b81526004016105ca90612f4a565b50900390565b4690565b6000546040516001600160a01b039091169063f2b0653790611bd89088908890889088908890602001612705565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611c0a91906127e2565b60206040518083038186803b158015611c2257600080fd5b505afa158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a9190612318565b15611c775760405162461bcd60e51b81526004016105ca90612cc5565b600054604051633a66f90160e01b81526001600160a01b0390911690633a66f90190611caf9088908890889088908890600401612705565b602060405180830381600087803b158015611cc957600080fd5b505af1158015611cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d019190612334565b505050505050565b604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215611dd3579160200282015b82811115611dd357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611d9e565b50611ddf929150611efc565b5090565b828054828255906000526020600020908101928215611e1e579160200282015b82811115611e1e578251825591602001919060010190611e03565b50611ddf929150611f1b565b828054828255906000526020600020908101928215611e77579160200282015b82811115611e775782518051611e67918491602090910190611f30565b5091602001919060010190611e4a565b50611ddf929150611f9d565b828054828255906000526020600020908101928215611ed0579160200282015b82811115611ed05782518051611ec0918491602090910190611f30565b5091602001919060010190611ea3565b50611ddf929150611fba565b604080516060810182526000808252602082018190529181019190915290565b5b80821115611ddf5780546001600160a01b0319168155600101611efd565b5b80821115611ddf5760008155600101611f1c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611f7157805160ff1916838001178555611e1e565b82800160010185558215611e1e5791820182811115611e1e578251825591602001919060010190611e03565b80821115611ddf576000611fb18282611fd7565b50600101611f9d565b80821115611ddf576000611fce8282611fd7565b50600101611fba565b50805460018160011615610100020316600290046000825580601f10611ffd575061201b565b601f01602090049060005260206000209081019061201b9190611f1b565b50565b80356001600160a01b03811681146117be57600080fd5b600082601f830112612045578081fd5b813561205861205382613116565b6130ef565b81815291506020808301908481018184028601820187101561207957600080fd5b60005b848110156120a05761208e888361201e565b8452928201929082019060010161207c565b505050505092915050565b600082601f8301126120bb578081fd5b81356120c961205382613116565b818152915060208083019084810160005b848110156120a0576120f1888484358a01016121b9565b845292820192908201906001016120da565b600082601f830112612113578081fd5b813561212161205382613116565b818152915060208083019084810160005b848110156120a057612149888484358a01016121b9565b84529282019290820190600101612132565b600082601f83011261216b578081fd5b813561217961205382613116565b81815291506020808301908481018184028601820187101561219a57600080fd5b60005b848110156120a05781358452928201929082019060010161219d565b600082601f8301126121c9578081fd5b81356121d761205382613136565b91508082528360208285010111156121ee57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215612218578081fd5b611b77838361201e565b60008060408385031215612234578081fd5b61223e848461201e565b946020939093013593505050565b600080600080600060a08688031215612263578081fd5b853567ffffffffffffffff8082111561227a578283fd5b61228689838a01612035565b9650602088013591508082111561229b578283fd5b6122a789838a0161215b565b955060408801359150808211156122bc578283fd5b6122c889838a01612103565b945060608801359150808211156122dd578283fd5b6122e989838a016120ab565b935060808801359150808211156122fe578283fd5b5061230b888289016121b9565b9150509295509295909350565b600060208284031215612329578081fd5b8151611b7781613192565b600060208284031215612345578081fd5b5051919050565b60006020828403121561235d578081fd5b815167ffffffffffffffff811115612373578182fd5b8201601f81018413612383578182fd5b805161239161205382613136565b8181528560208385010111156123a5578384fd5b6123b6826020830160208601613166565b95945050505050565b6000602082840312156123d0578081fd5b5035919050565b600080604083850312156123e9578182fd5b823591506123fa846020850161201e565b90509250929050565b60008060408385031215612415578182fd5b82359150602083013561242781613192565b809150509250929050565b600080600080600060a08688031215612449578283fd5b85359450602086013561245b81613192565b9350604086013560ff81168114612470578384fd5b94979396509394606081013594506080013592915050565b600060208284031215612499578081fd5b81516001600160601b0381168114611b77578182fd5b6000815180845260208085019450808401835b838110156124e75781516001600160a01b0316875295820195908201906001016124c2565b509495945050505050565b6000815180845260208085019450848183028601828601855b85811015612535578383038952612523838351612571565b9885019892509084019060010161250b565b5090979650505050505050565b6000815180845260208085019450808401835b838110156124e757815187529582019590820190600101612555565b60008151808452612589816020860160208601613166565b601f01601f19169290920160200192915050565b600081546001808216600081146125bb57600181146125d957612617565b60028304607f16865260ff1983166020870152604086019350612617565b600283048087526125e98661315a565b60005b8281101561260d5781546020828b01015284820191506020810190506125ec565b8801602001955050505b50505092915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038616825284602083015260a06040830152601860a08301527f73657450656e64696e6741646d696e286164647265737329000000000000000060c083015260e060608301526126c360e0830185612571565b905082608083015295945050505050565b6001600160a01b039490941684526020840192909252151560408301526001600160601b0316606082015260800190565b600060018060a01b038716825285602083015260a0604083015261272c60a0830186612571565b828103606084015261273e8186612571565b9150508260808301529695505050505050565b600060018060a01b038716825285602083015260a0604083015261277860a083018661259d565b828103606084015261273e818661259d565b60006080825261279d60808301876124af565b82810360208401526127af8187612542565b905082810360408401526127c381866124f2565b905082810360608401526127d781856124f2565b979650505050505050565b90815260200190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b602081016008831061285357fe5b91905290565b600060208252611b776020830184612571565b60208082526039908201527f476f7665726e6f72416c7068613a3a5f5f61636365707441646d696e3a20736560408201527f6e646572206d75737420626520676f7620677561726469616e00000000000000606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206360408201527f616e206f6e6c79206265207175657565642069662069742069732073756363656060820152631959195960e21b608082015260a00190565b60208082526045908201527f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c60408201527f2063616e206f6e6c7920626520657865637574656420696620697420697320716060820152641d595d595960da1b608082015260a00190565b6020808252604c908201527f476f7665726e6f72416c7068613a3a5f5f6578656375746553657454696d656c60408201527f6f636b50656e64696e6741646d696e3a2073656e646572206d7573742062652060608201526b33b7bb1033bab0b93234b0b760a11b608082015260a00190565b60208082526029908201527f476f7665726e6f72416c7068613a3a73746174653a20696e76616c69642070726040820152681bdc1bdcd85b081a5960ba1b606082015260800190565b6020808252602d908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722060408201526c185b1c9958591e481d9bdd1959609a1b606082015260800190565b60208082526059908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560408201527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60608201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000608082015260a00190565b6020808252604a908201527f476f7665726e6f72416c7068613a3a5f5f717565756553657454696d656c6f6360408201527f6b50656e64696e6741646d696e3a2073656e646572206d75737420626520676f6060820152693b1033bab0b93234b0b760b11b608082015260a00190565b60208082526028908201527f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7960408201526720616374696f6e7360c01b606082015260800190565b6020808252601190820152706164646974696f6e206f766572666c6f7760781b604082015260600190565b60208082526044908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c60408201527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6060820152630c2e8c6d60e31b608082015260a00190565b6020808252602f908201527f476f7665726e6f72416c7068613a3a63616e63656c3a2070726f706f7365722060408201526e18589bdd99481d1a1c995cda1bdb19608a1b606082015260800190565b60208082526044908201527f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207060408201527f726f706f73616c20616374696f6e20616c7265616479207175657565642061746060820152632065746160e01b608082015260a00190565b6020808252602c908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f60408201526b7669646520616374696f6e7360a01b606082015260800190565b6020808252603f908201527f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657260408201527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400606082015260800190565b6020808252602f908201527f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e60408201526e76616c6964207369676e617475726560881b606082015260800190565b60208082526058908201527f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560408201527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60608201527f20616c7265616479206163746976652070726f706f73616c0000000000000000608082015260a00190565b60208082526036908201527f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f742063616040820152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b606082015260800190565b6020808252602a908201527f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e67604082015269081a5cc818db1bdcd95960b21b606082015260800190565b6020808252601590820152747375627472616374696f6e20756e646572666c6f7760581b604082015260600190565b60208082526036908201527f476f7665726e6f72416c7068613a3a5f5f61626469636174653a2073656e6465604082015275391036bab9ba1031329033b7bb1033bab0b93234b0b760511b606082015260800190565b8151151581526020808301511515908201526040918201516001600160601b03169181019190915260600190565b8981526001600160a01b0389166020820152610120604082018190526000906130288382018b6124af565b9050828103606084015261303c818a612542565b9050828103608084015261305081896124f2565b905082810360a084015261306481886124f2565b90508560c08401528460e08401528281036101008401526130858185612571565b9c9b505050505050505050505050565b9889526001600160a01b0397909716602089015260408801959095526060870193909352608086019190915260a085015260c0840152151560e083015215156101008201526101200190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561310e57600080fd5b604052919050565b600067ffffffffffffffff82111561312c578081fd5b5060209081020190565b600067ffffffffffffffff82111561314c578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b83811015613181578181015183820152602001613169565b8381111561108c5750506000910152565b801515811461201b57600080fdfea264697066735822122046383ede9e6eb5ff9ef166b10de9722f76f823458ef1096feb045429b132e4cf64736f6c634300060c0033"; diff --git a/libs/chains/src/eth/types/factories/GovernorBravoDelegateMock__factory.ts b/libs/chains/src/eth/types/factories/GovernorBravoDelegateMock__factory.ts deleted file mode 100644 index 4799da8e99c..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorBravoDelegateMock__factory.ts +++ /dev/null @@ -1,1077 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorBravoDelegateMock } from "../GovernorBravoDelegateMock"; - -export class GovernorBravoDelegateMock__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): GovernorBravoDelegateMock { - return super.attach(address) as GovernorBravoDelegateMock; - } - connect(signer: Signer): GovernorBravoDelegateMock__factory { - return super.connect(signer) as GovernorBravoDelegateMock__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorBravoDelegateMock { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorBravoDelegateMock; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldImplementation", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "NewImplementation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldPendingAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldProposalThreshold", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "ProposalThresholdSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "votes", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingDelay", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "VotingDelaySet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingPeriod", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "VotingPeriodSet", - type: "event", - }, - { - constant: true, - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "DOMAIN_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAX_PROPOSAL_THRESHOLD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAX_VOTING_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAX_VOTING_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MIN_PROPOSAL_THRESHOLD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MIN_VOTING_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MIN_VOTING_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [], - name: "_acceptAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "_setPendingAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "_setProposalThreshold", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "_setVotingDelay", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "_setVotingPeriod", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "comp", - outputs: [ - { - internalType: "contract CompInterface", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - payable: true, - stateMutability: "payable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getActions", - outputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getReceipt", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - internalType: "struct GovernorBravoDelegateStorageV1.Receipt", - name: "", - type: "tuple", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "implementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "initialProposalId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "timelock_", - type: "address", - }, - { - internalType: "address", - name: "comp_", - type: "address", - }, - { - internalType: "uint256", - name: "votingPeriod_", - type: "uint256", - }, - { - internalType: "uint256", - name: "votingDelay_", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalThreshold_", - type: "uint256", - }, - ], - name: "initialize", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "latestProposalIds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "pendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalMaxOperations", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "proposals", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "proposer", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "abstainVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "quorumVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum GovernorBravoDelegateStorageV1.ProposalState", - name: "", - type: "uint8", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "contract TimelockInterface", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506142dd806100206000396000f3fe6080604052600436106102305760003560e01c80635c60da1b1161012e578063da35c664116100ab578063e48083fe1161006f578063e48083fe14610386578063e9c714f214610619578063f851a4401461062e578063fc4eee4214610643578063fe0d94c11461065857610230565b8063da35c66414610582578063da95691a14610597578063ddf0b009146105b7578063deaaa7cc146105d7578063e23a9a52146105ec57610230565b8063b1126263116100f2578063b112626314610503578063b58131b014610518578063b71d1a0c1461052d578063d13f90b41461054d578063d33219b41461056d57610230565b80635c60da1b146104a4578063791f5d23146103865780637b3c71d3146104b95780637bdbe4d0146104d9578063a64e024a146104ee57610230565b8063215809ca116101bc5780633932abb1116101805780633932abb1146104025780633bccf4fd146104175780633e4f49e61461043757806340e58ee514610464578063567813881461048457610230565b8063215809ca1461037157806324bc1a641461038657806325fd935a1461039b57806326782247146103b0578063328dd982146103d257610230565b8063109d0af811610203578063109d0af8146102da57806317977c61146102fc57806317ba1b8b1461031c5780631dfb1b5a1461033c57806320606b701461035c57610230565b8063013cf08b1461023557806302a251a31461027457806306fdde03146102965780630ea2d98c146102b8575b600080fd5b34801561024157600080fd5b506102556102503660046129dd565b61066b565b60405161026b9a99989796959493929190613ff4565b60405180910390f35b34801561028057600080fd5b506102896106ce565b60405161026b9190613c41565b3480156102a257600080fd5b506102ab6106d4565b60405161026b9190613cfd565b3480156102c457600080fd5b506102d86102d33660046129dd565b610707565b005b3480156102e657600080fd5b506102ef6107b1565b60405161026b9190613ce1565b34801561030857600080fd5b506102896103173660046127f2565b6107c0565b34801561032857600080fd5b506102d86103373660046129dd565b6107d2565b34801561034857600080fd5b506102d86103573660046129dd565b61086d565b34801561036857600080fd5b50610289610900565b34801561037d57600080fd5b50610289610917565b34801561039257600080fd5b5061028961091d565b3480156103a757600080fd5b50610289610922565b3480156103bc57600080fd5b506103c5610930565b60405161026b9190613b07565b3480156103de57600080fd5b506103f26103ed3660046129dd565b61093f565b60405161026b9493929190613bf4565b34801561040e57600080fd5b50610289610bce565b34801561042357600080fd5b506102d8610432366004612acd565b610bd4565b34801561044357600080fd5b506104576104523660046129dd565b610daf565b60405161026b9190613cef565b34801561047057600080fd5b506102d861047f3660046129dd565b610f2c565b34801561049057600080fd5b506102d861049f366004612a35565b611180565b3480156104b057600080fd5b506103c56111ca565b3480156104c557600080fd5b506102d86104d4366004612a65565b6111d9565b3480156104e557600080fd5b50610289611229565b3480156104fa57600080fd5b5061028961122e565b34801561050f57600080fd5b50610289611235565b34801561052457600080fd5b5061028961123b565b34801561053957600080fd5b506102d86105483660046127f2565b611241565b34801561055957600080fd5b506102d8610568366004612818565b6112be565b34801561057957600080fd5b506102ef611432565b34801561058e57600080fd5b50610289611441565b3480156105a357600080fd5b506102896105b236600461288d565b611447565b3480156105c357600080fd5b506102d86105d23660046129dd565b6118b4565b3480156105e357600080fd5b50610289611b30565b3480156105f857600080fd5b5061060c6106073660046129fb565b611b3c565b60405161026b9190613f3e565b34801561062557600080fd5b506102d8611ba9565b34801561063a57600080fd5b506103c5611c87565b34801561064f57600080fd5b50610289611c96565b6102d86106663660046129dd565b611c9c565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b60405180604001604052806017815260200176436f6d706f756e6420476f7665726e6f7220427261766f60481b81525081565b6000546001600160a01b0316331461073a5760405162461bcd60e51b815260040161073190613d4e565b60405180910390fd5b611680811015801561074f575062013b008111155b61076b5760405162461bcd60e51b815260040161073190613d8e565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828906107a5908390859061407a565b60405180910390a15050565b6009546001600160a01b031681565b600b6020526000908152604090205481565b6000546001600160a01b031633146107fc5760405162461bcd60e51b815260040161073190613efe565b60018110158015610817575069152d02c7e14af68000008111155b6108335760405162461bcd60e51b815260040161073190613e2e565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461906107a5908390859061407a565b6000546001600160a01b031633146108975760405162461bcd60e51b815260040161073190613d6e565b600181101580156108aa5750619d808111155b6108c65760405162461bcd60e51b815260040161073190613dbe565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93906107a5908390859061407a565b60405161090c90613afc565b604051809103902081565b61168081565b600181565b69152d02c7e14af680000081565b6001546001600160a01b031681565b6060806060806000600a6000878152602001908152602001600020905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156109c157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109a3575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610a1357602002820191906000526020600020905b8154815260200190600101908083116109ff575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610ae65760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610ad25780601f10610aa757610100808354040283529160200191610ad2565b820191906000526020600020905b815481529060010190602001808311610ab557829003601f168201915b505050505081526020019060010190610a3b565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610bb85760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610ba45780601f10610b7957610100808354040283529160200191610ba4565b820191906000526020600020905b815481529060010190602001808311610b8757829003601f168201915b505050505081526020019060010190610b0d565b5050505090509450945094509450509193509193565b60035481565b6000604051610be290613afc565b604080519182900382208282019091526017825276436f6d706f756e6420476f7665726e6f7220427261766f60481b6020909201919091527f3d9e905142ff365fb68ce863f26a44f5583cf7ec11bcde450555f50b7e1b5614610c43611e55565b30604051602001610c579493929190613c4f565b6040516020818303038152906040528051906020012090506000604051610c7d90613ac0565b604051908190038120610c969189908990602001613c84565b60405160208183030381529060405280519060200120905060008282604051602001610cc3929190613acb565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610d009493929190613cac565b6020604051602081039080840390855afa158015610d22573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d555760405162461bcd60e51b815260040161073190613dee565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a610d8d858e8e611e5a565b604051610d9c939291906140ce565b60405180910390a2505050505050505050565b60008160075410158015610dc4575060065482115b610de05760405162461bcd60e51b815260040161073190613f0e565b6000828152600a60205260409020600c81015460ff1615610e05576002915050610f27565b80600701544311610e1a576000915050610f27565b80600801544311610e2f576001915050610f27565b80600a01548160090154111580610e4a575060018160090154105b15610e59576003915050610f27565b6002810154610e6c576004915050610f27565b600c810154610100900460ff1615610e88576007915050610f27565b6002810154600854604080516360d143f160e11b81529051610f1193926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610ed457600080fd5b505afa158015610ee8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f0c919081019061298a565b61204b565b4210610f21576006915050610f27565b60059150505b919050565b6007610f3782610daf565b6007811115610f4257fe5b1415610f605760405162461bcd60e51b815260040161073190613eee565b6000818152600a6020526040902060018101546001600160a01b031633148061102857506005546009546001838101546001600160a01b039283169263782d6fe192911690610fb0904390612070565b6040518363ffffffff1660e01b8152600401610fcd929190613b4b565b60206040518083038186803b158015610fe557600080fd5b505afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061101d9190810190612b13565b6001600160601b0316105b6110445760405162461bcd60e51b815260040161073190613e9e565b600c8101805460ff1916600117905560005b6003820154811015611150576008546003830180546001600160a01b039092169163591fcdfe91908490811061108857fe5b6000918252602090912001546004850180546001600160a01b0390921691859081106110b057fe5b90600052602060002001548560050185815481106110ca57fe5b906000526020600020018660060186815481106110e357fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401611112959493929190613bb3565b600060405180830381600087803b15801561112c57600080fd5b505af1158015611140573d6000803e3d6000fd5b5050600190920191506110569050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516107a59190613c41565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836111af848383611e5a565b6040516111be939291906140ce565b60405180910390a25050565b6002546001600160a01b031681565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48585611208848383611e5a565b868660405161121b959493929190614088565b60405180910390a250505050565b600a81565b62013b0081565b619d8081565b60055481565b6000546001600160a01b0316331461126b5760405162461bcd60e51b815260040161073190613d2e565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9906107a59083908590613b30565b6008546001600160a01b0316156112e75760405162461bcd60e51b815260040161073190613d1e565b6000546001600160a01b031633146113115760405162461bcd60e51b815260040161073190613e1e565b6001600160a01b0385166113375760405162461bcd60e51b815260040161073190613d5e565b6001600160a01b03841661135d5760405162461bcd60e51b815260040161073190613e8e565b6116808310158015611372575062013b008311155b61138e5760405162461bcd60e51b815260040161073190613f1e565b600182101580156113a15750619d808211155b6113bd5760405162461bcd60e51b815260040161073190613dfe565b600181101580156113d8575069152d02c7e14af68000008111155b6113f45760405162461bcd60e51b815260040161073190613dce565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b6008546001600160a01b031681565b60075481565b6009546000906001600160a01b03166114725760405162461bcd60e51b815260040161073190613e3e565b6006546114915760405162461bcd60e51b815260040161073190613d7e565b6005546009546001600160a01b031663782d6fe1336114b1436001612070565b6040518363ffffffff1660e01b81526004016114ce929190613b15565b60206040518083038186803b1580156114e657600080fd5b505afa1580156114fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061151e9190810190612b13565b6001600160601b0316116115445760405162461bcd60e51b815260040161073190613ede565b84518651148015611556575083518651145b8015611563575082518651145b61157f5760405162461bcd60e51b815260040161073190613e0e565b855161159d5760405162461bcd60e51b815260040161073190613e6e565b600a865111156115bf5760405162461bcd60e51b815260040161073190613eae565b336000908152600b6020526040902054801561163c5760006115e082610daf565b905060018160078111156115f057fe5b141561160e5760405162461bcd60e51b815260040161073190613ece565b600081600781111561161c57fe5b141561163a5760405162461bcd60e51b815260040161073190613ebe565b505b600061164a4360035461204b565b9050600061165a8260045461204b565b600780546001019055905061166d6121f7565b604051806101c001604052806007548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611757929190612273565b50608082015180516117739160048401916020909101906122d8565b5060a0820151805161178f91600584019160209091019061231f565b5060c082015180516117ab916006840191602090910190612378565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e60405161189c99989796959493929190613f4c565b60405180910390a15193505050505b95945050505050565b60046118bf82610daf565b60078111156118ca57fe5b146118e75760405162461bcd60e51b815260040161073190613e4e565b6000818152600a602090815260408083206008548251630d48571f60e31b815292519194936119419342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b158015610ed457600080fd5b905060005b6003830154811015611ae957611ae183600301828154811061196457fe5b6000918252602090912001546004850180546001600160a01b03909216918490811061198c57fe5b90600052602060002001548560050184815481106119a657fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611a345780601f10611a0957610100808354040283529160200191611a34565b820191906000526020600020905b815481529060010190602001808311611a1757829003601f168201915b5050505050866006018581548110611a4857fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611ad65780601f10611aab57610100808354040283529160200191611ad6565b820191906000526020600020905b815481529060010190602001808311611ab957829003601f168201915b505050505086612098565b600101611946565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611b23908590849061407a565b60405180910390a1505050565b60405161090c90613ac0565b611b446123d1565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b6001546001600160a01b031633148015611bc257503315155b611bde5760405162461bcd60e51b815260040161073190613e7e565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611c42928692911690613b30565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916107a59184916001600160a01b031690613b30565b6000546001600160a01b031681565b60065481565b6005611ca782610daf565b6007811115611cb257fe5b14611ccf5760405162461bcd60e51b815260040161073190613dde565b6000818152600a60205260408120600c8101805461ff001916610100179055905b6003820154811015611e25576008546004830180546001600160a01b0390921691630825f38f919084908110611d2257fe5b9060005260206000200154846003018481548110611d3c57fe5b6000918252602090912001546004860180546001600160a01b039092169186908110611d6457fe5b9060005260206000200154866005018681548110611d7e57fe5b90600052602060002001876006018781548110611d9757fe5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611dc6959493929190613bb3565b6000604051808303818588803b158015611ddf57600080fd5b505af1158015611df3573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611e1c91908101906129a8565b50600101611cf0565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516107a59190613c41565b465b90565b60006001611e6784610daf565b6007811115611e7257fe5b14611e8f5760405162461bcd60e51b815260040161073190613d9e565b60028260ff161115611eb35760405162461bcd60e51b815260040161073190613d0e565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff1615611efc5760405162461bcd60e51b815260040161073190613dae565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191611f32918b91600401613b4b565b60206040518083038186803b158015611f4a57600080fd5b505afa158015611f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f829190810190612b13565b905060ff8516611fad57611fa383600a0154826001600160601b031661204b565b600a840155612003565b8460ff1660011415611fda57611fd08360090154826001600160601b031661204b565b6009840155612003565b8460ff166002141561200357611ffd83600b0154826001600160601b031661204b565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b6000828201838110156120445760405162461bcd60e51b815260040161073190613e5e565b6000828211156120925760405162461bcd60e51b815260040161073190613f2e565b50900390565b6008546040516001600160a01b039091169063f2b06537906120c69088908890889088908890602001613b59565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016120f89190613c41565b60206040518083038186803b15801561211057600080fd5b505afa158015612124573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612148919081019061296c565b156121655760405162461bcd60e51b815260040161073190613d3e565b600854604051633a66f90160e01b81526001600160a01b0390911690633a66f9019061219d9088908890889088908890600401613b59565b602060405180830381600087803b1580156121b757600080fd5b505af11580156121cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121ef919081019061298a565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b8280548282559060005260206000209081019282156122c8579160200282015b828111156122c857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612293565b506122d49291506123f1565b5090565b828054828255906000526020600020908101928215612313579160200282015b828111156123135782518255916020019190600101906122f8565b506122d4929150612415565b82805482825590600052602060002090810192821561236c579160200282015b8281111561236c578251805161235c91849160209091019061242f565b509160200191906001019061233f565b506122d492915061249c565b8280548282559060005260206000209081019282156123c5579160200282015b828111156123c557825180516123b591849160209091019061242f565b5091602001919060010190612398565b506122d49291506124bf565b604080516060810182526000808252602082018190529181019190915290565b611e5791905b808211156122d45780546001600160a01b03191681556001016123f7565b611e5791905b808211156122d4576000815560010161241b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061247057805160ff1916838001178555612313565b8280016001018555821561231357918201828111156123135782518255916020019190600101906122f8565b611e5791905b808211156122d45760006124b682826124e2565b506001016124a2565b611e5791905b808211156122d45760006124d982826124e2565b506001016124c5565b50805460018160011615610100020316600290046000825580601f106125085750612526565b601f0160209004906000526020600020908101906125269190612415565b50565b8035611ba381614242565b600082601f83011261254557600080fd5b81356125586125538261412e565b614107565b9150818183526020840193506020810190508385602084028201111561257d57600080fd5b60005b838110156125a957816125938882612529565b8452506020928301929190910190600101612580565b5050505092915050565b600082601f8301126125c457600080fd5b81356125d26125538261412e565b81815260209384019390925082018360005b838110156125a957813586016125fa88826126fe565b84525060209283019291909101906001016125e4565b600082601f83011261262157600080fd5b813561262f6125538261412e565b81815260209384019390925082018360005b838110156125a9578135860161265788826126fe565b8452506020928301929190910190600101612641565b600082601f83011261267e57600080fd5b813561268c6125538261412e565b915081818352602084019350602081019050838560208402820111156126b157600080fd5b60005b838110156125a957816126c788826126e8565b84525060209283019291909101906001016126b4565b8051611ba381614256565b8035611ba38161425f565b8051611ba38161425f565b600082601f83011261270f57600080fd5b813561271d6125538261414f565b9150808252602083016020830185838301111561273957600080fd5b6127448382846141f6565b50505092915050565b600082601f83011261275e57600080fd5b815161276c6125538261414f565b9150808252602083016020830185838301111561278857600080fd5b612744838284614202565b60008083601f8401126127a557600080fd5b50813567ffffffffffffffff8111156127bd57600080fd5b6020830191508360018202830111156127d557600080fd5b9250929050565b8035611ba381614268565b8051611ba381614271565b60006020828403121561280457600080fd5b60006128108484612529565b949350505050565b600080600080600060a0868803121561283057600080fd5b600061283c8888612529565b955050602061284d88828901612529565b945050604061285e888289016126e8565b935050606061286f888289016126e8565b9250506080612880888289016126e8565b9150509295509295909350565b600080600080600060a086880312156128a557600080fd5b853567ffffffffffffffff8111156128bc57600080fd5b6128c888828901612534565b955050602086013567ffffffffffffffff8111156128e557600080fd5b6128f18882890161266d565b945050604086013567ffffffffffffffff81111561290e57600080fd5b61291a88828901612610565b935050606086013567ffffffffffffffff81111561293757600080fd5b612943888289016125b3565b925050608086013567ffffffffffffffff81111561296057600080fd5b612880888289016126fe565b60006020828403121561297e57600080fd5b600061281084846126dd565b60006020828403121561299c57600080fd5b600061281084846126f3565b6000602082840312156129ba57600080fd5b815167ffffffffffffffff8111156129d157600080fd5b6128108482850161274d565b6000602082840312156129ef57600080fd5b600061281084846126e8565b60008060408385031215612a0e57600080fd5b6000612a1a85856126e8565b9250506020612a2b85828601612529565b9150509250929050565b60008060408385031215612a4857600080fd5b6000612a5485856126e8565b9250506020612a2b858286016127dc565b60008060008060608587031215612a7b57600080fd5b6000612a8787876126e8565b9450506020612a98878288016127dc565b935050604085013567ffffffffffffffff811115612ab557600080fd5b612ac187828801612793565b95989497509550505050565b600080600080600060a08688031215612ae557600080fd5b6000612af188886126e8565b9550506020612b02888289016127dc565b945050604061285e888289016127dc565b600060208284031215612b2557600080fd5b600061281084846127e7565b6000612b3d8383612b6c565b505060200190565b60006120448383612d0e565b6000612b3d8383612cf4565b612b66816141ce565b82525050565b612b6681614196565b6000612b8082614189565b612b8a818561418d565b9350612b9583614177565b8060005b83811015612bc3578151612bad8882612b31565b9750612bb883614177565b925050600101612b99565b509495945050505050565b6000612bd982614189565b612be3818561418d565b935083602082028501612bf585614177565b8060005b85811015612c2f5784840389528151612c128582612b45565b9450612c1d83614177565b60209a909a0199925050600101612bf9565b5091979650505050505050565b6000612c4782614189565b612c51818561418d565b935083602082028501612c6385614177565b8060005b85811015612c2f5784840389528151612c808582612b45565b9450612c8b83614177565b60209a909a0199925050600101612c67565b6000612ca882614189565b612cb2818561418d565b9350612cbd83614177565b8060005b83811015612bc3578151612cd58882612b51565b9750612ce083614177565b925050600101612cc1565b612b66816141a1565b612b6681611e57565b612b66612d0982611e57565b611e57565b6000612d1982614189565b612d23818561418d565b9350612d33818560208601614202565b612d3c8161422e565b9093019392505050565b600081546001811660008114612d635760018114612d8957612dc8565b607f6002830416612d74818761418d565b60ff1984168152955050602085019250612dc8565b60028204612d97818761418d565b9550612da28561417d565b60005b82811015612dc157815488820152600190910190602001612da5565b8701945050505b505092915050565b612b66816141d5565b612b66816141e0565b6000612dee838561418d565b9350612dfb8385846141f6565b612d3c8361422e565b6000612e1160328361418d565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b6000612e65602883610f27565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b6000612eaf60338361418d565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b6000612f04602a8361418d565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b6000612f5060558361418d565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b6000612fcd602b8361418d565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b600061301a60338361418d565b60008051602061427b83398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b600061305d602a8361418d565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006130a960318361418d565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b60006130fc600283610f27565b61190160f01b815260020192915050565b600061311a60368361418d565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a815275081a5b9d985b1a59081d9bdd1a5b99c81c195c9a5bd960521b602082015260400192915050565b600061317260318361418d565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006131c560348361418d565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b600061321b60348361418d565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a20815273696e76616c696420766f74696e672064656c617960601b602082015260400192915050565b600061327160358361418d565b60008051602061427b8339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b60006132b660458361418d565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b6000613323602f8361418d565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b6000613374602f8361418d565b60008051602061427b83398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b60006133b360448361418d565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b600061341f60258361418d565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b600061346660408361418d565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b60006134c560368361418d565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527508109c985d9bc81b9bdd081a5b9a5d1a585b1a5e995960521b602082015260400192915050565b600061351d60448361418d565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b600061358960118361418d565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b60006135b6604383610f27565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613621602c8361418d565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b600061366f602e8361418d565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b60006136bf602f8361418d565b60008051602061427b83398151915281526e696420636f6d70206164647265737360881b602082015260400192915050565b60006136fe602f8361418d565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b600061374f60288361418d565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b600061379960598361418d565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b600061381e60588361418d565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611ba360008361418d565b60006138b0603f8361418d565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b600061390f60368361418d565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b600061396760308361418d565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381526f686f6c643a2061646d696e206f6e6c7960801b602082015260400192915050565b60006139b960298361418d565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613a0460308361418d565b60008051602061427b83398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b6000613a4460158361418d565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b80516060830190613a798482612ceb565b506020820151613a8c6020850182613aa5565b506040820151613a9f6040850182613ab7565b50505050565b612b66816141bc565b612b66816141eb565b612b66816141c2565b6000611ba382612e58565b6000613ad6826130ef565b9150613ae28285612cfd565b602082019150613af28284612cfd565b5060200192915050565b6000611ba3826135a9565b60208101611ba38284612b6c565b60408101613b238285612b5d565b6120446020830184612cf4565b60408101613b3e8285612b6c565b6120446020830184612b6c565b60408101613b238285612b6c565b60a08101613b678288612b6c565b613b746020830187612cf4565b8181036040830152613b868186612d0e565b90508181036060830152613b9a8185612d0e565b9050613ba96080830184612cf4565b9695505050505050565b60a08101613bc18288612b6c565b613bce6020830187612cf4565b8181036040830152613be08186612d46565b90508181036060830152613b9a8185612d46565b60808082528101613c058187612b75565b90508181036020830152613c198186612c9d565b90508181036040830152613c2d8185612c3c565b90508181036060830152613ba98184612bce565b60208101611ba38284612cf4565b60808101613c5d8287612cf4565b613c6a6020830186612cf4565b613c776040830185612cf4565b6118ab6060830184612b6c565b60608101613c928286612cf4565b613c9f6020830185612cf4565b6128106040830184613aa5565b60808101613cba8287612cf4565b613cc76020830186613aa5565b613cd46040830185612cf4565b6118ab6060830184612cf4565b60208101611ba38284612dd0565b60208101611ba38284612dd9565b602080825281016120448184612d0e565b60208082528101611ba381612e04565b60208082528101611ba381612ea2565b60208082528101611ba381612ef7565b60208082528101611ba381612f43565b60208082528101611ba381612fc0565b60208082528101611ba38161300d565b60208082528101611ba381613050565b60208082528101611ba38161309c565b60208082528101611ba38161310d565b60208082528101611ba381613165565b60208082528101611ba3816131b8565b60208082528101611ba38161320e565b60208082528101611ba381613264565b60208082528101611ba3816132a9565b60208082528101611ba381613316565b60208082528101611ba381613367565b60208082528101611ba3816133a6565b60208082528101611ba381613412565b60208082528101611ba381613459565b60208082528101611ba3816134b8565b60208082528101611ba381613510565b60208082528101611ba38161357c565b60208082528101611ba381613614565b60208082528101611ba381613662565b60208082528101611ba3816136b2565b60208082528101611ba3816136f1565b60208082528101611ba381613742565b60208082528101611ba38161378c565b60208082528101611ba381613811565b60208082528101611ba3816138a3565b60208082528101611ba381613902565b60208082528101611ba38161395a565b60208082528101611ba3816139ac565b60208082528101611ba3816139f7565b60208082528101611ba381613a37565b60608101611ba38284613a68565b6101208101613f5b828c612cf4565b613f68602083018b612b5d565b8181036040830152613f7a818a612b75565b90508181036060830152613f8e8189612c9d565b90508181036080830152613fa28188612c3c565b905081810360a0830152613fb68187612bce565b9050613fc560c0830186612cf4565b613fd260e0830185612cf4565b818103610100830152613fe58184612d0e565b9b9a5050505050505050505050565b6101408101614003828d612cf4565b614010602083018c612b6c565b61401d604083018b612cf4565b61402a606083018a612cf4565b6140376080830189612cf4565b61404460a0830188612cf4565b61405160c0830187612cf4565b61405e60e0830186612cf4565b61406c610100830185612ceb565b613fe5610120830184612ceb565b60408101613b238285612cf4565b608081016140968288612cf4565b6140a36020830187613aa5565b6140b06040830186613aae565b81810360608301526140c3818486612de2565b979650505050505050565b608081016140dc8286612cf4565b6140e96020830185613aa5565b6140f66040830184613aae565b81810360608301526118ab81613896565b60405181810167ffffffffffffffff8111828210171561412657600080fd5b604052919050565b600067ffffffffffffffff82111561414557600080fd5b5060209081020190565b600067ffffffffffffffff82111561416657600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611ba3826141b0565b151590565b80610f2781614238565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611ba3825b6000611ba382614196565b6000611ba3826141a6565b6000611ba3826141c2565b82818337506000910152565b60005b8381101561421d578181015183820152602001614205565b83811115613a9f5750506000910152565b601f01601f191690565b6008811061252657fe5b61424b81614196565b811461252657600080fd5b61424b816141a1565b61424b81611e57565b61424b816141bc565b61424b816141c256fe476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616ca365627a7a723158207d362c4c25f8e10e2fe3d5905f1e3e45b6dc3903329d1c8f3ce8f58e12029bb86c6578706572696d656e74616cf564736f6c63430005100040"; diff --git a/libs/chains/src/eth/types/factories/GovernorBravoDelegateStorageV1__factory.ts b/libs/chains/src/eth/types/factories/GovernorBravoDelegateStorageV1__factory.ts deleted file mode 100644 index 99f77491a48..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorBravoDelegateStorageV1__factory.ts +++ /dev/null @@ -1,287 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorBravoDelegateStorageV1 } from "../GovernorBravoDelegateStorageV1"; - -export class GovernorBravoDelegateStorageV1__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): GovernorBravoDelegateStorageV1 { - return super.attach(address) as GovernorBravoDelegateStorageV1; - } - connect(signer: Signer): GovernorBravoDelegateStorageV1__factory { - return super.connect(signer) as GovernorBravoDelegateStorageV1__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorBravoDelegateStorageV1 { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorBravoDelegateStorageV1; - } -} - -const _abi = [ - { - constant: true, - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "comp", - outputs: [ - { - internalType: "contract CompInterface", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "implementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "initialProposalId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "latestProposalIds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "pendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "proposals", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "proposer", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "abstainVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "contract TimelockInterface", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610429806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635c60da1b116100715780635c60da1b14610145578063b58131b01461014d578063d33219b414610155578063da35c6641461015d578063f851a44014610165578063fc4eee421461016d576100b4565b8063013cf08b146100b957806302a251a3146100eb578063109d0af81461010057806317977c611461011557806326782247146101285780633932abb11461013d575b600080fd5b6100cc6100c7366004610295565b610175565b6040516100e29a99989796959493929190610307565b60405180910390f35b6100f36101d8565b6040516100e291906102f9565b6101086101de565b6040516100e291906102eb565b6100f361012336600461026f565b6101ed565b6101306101ff565b6040516100e291906102dd565b6100f361020e565b610130610214565b6100f3610223565b610108610229565b6100f3610238565b61013061023e565b6100f361024d565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b6009546001600160a01b031681565b600b6020526000908152604090205481565b6001546001600160a01b031681565b60035481565b6002546001600160a01b031681565b60055481565b6008546001600160a01b031681565b60075481565b6000546001600160a01b031681565b60065481565b803561025e816103c6565b92915050565b803561025e816103dd565b60006020828403121561028157600080fd5b600061028d8484610253565b949350505050565b6000602082840312156102a757600080fd5b600061028d8484610264565b6102bc8161039c565b82525050565b6102bc816103a7565b6102bc816103bb565b6102bc816103b8565b6020810161025e82846102b3565b6020810161025e82846102cb565b6020810161025e82846102d4565b6101408101610316828d6102d4565b610323602083018c6102b3565b610330604083018b6102d4565b61033d606083018a6102d4565b61034a60808301896102d4565b61035760a08301886102d4565b61036460c08301876102d4565b61037160e08301866102d4565b61037f6101008301856102c2565b61038d6101208301846102c2565b9b9a5050505050505050505050565b600061025e826103ac565b151590565b6001600160a01b031690565b90565b600061025e8261039c565b6103cf8161039c565b81146103da57600080fd5b50565b6103cf816103b856fea365627a7a72315820658777be3589a8e26e4a0ddb3fca773cc8592e64839c71d61bc77377b09257976c6578706572696d656e74616cf564736f6c63430005100040"; diff --git a/libs/chains/src/eth/types/factories/GovernorBravoDelegate__factory.ts b/libs/chains/src/eth/types/factories/GovernorBravoDelegate__factory.ts deleted file mode 100644 index 345162809b5..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorBravoDelegate__factory.ts +++ /dev/null @@ -1,1077 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorBravoDelegate } from "../GovernorBravoDelegate"; - -export class GovernorBravoDelegate__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): GovernorBravoDelegate { - return super.attach(address) as GovernorBravoDelegate; - } - connect(signer: Signer): GovernorBravoDelegate__factory { - return super.connect(signer) as GovernorBravoDelegate__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorBravoDelegate { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorBravoDelegate; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldImplementation", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "NewImplementation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldPendingAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldProposalThreshold", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "ProposalThresholdSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "votes", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingDelay", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "VotingDelaySet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingPeriod", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "VotingPeriodSet", - type: "event", - }, - { - constant: true, - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "DOMAIN_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAX_PROPOSAL_THRESHOLD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAX_VOTING_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAX_VOTING_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MIN_PROPOSAL_THRESHOLD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MIN_VOTING_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MIN_VOTING_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [], - name: "_acceptAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "_setPendingAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "_setProposalThreshold", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "_setVotingDelay", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "_setVotingPeriod", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "comp", - outputs: [ - { - internalType: "contract CompInterface", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - payable: true, - stateMutability: "payable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getActions", - outputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getReceipt", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - internalType: "struct GovernorBravoDelegateStorageV1.Receipt", - name: "", - type: "tuple", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "implementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "initialProposalId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "timelock_", - type: "address", - }, - { - internalType: "address", - name: "comp_", - type: "address", - }, - { - internalType: "uint256", - name: "votingPeriod_", - type: "uint256", - }, - { - internalType: "uint256", - name: "votingDelay_", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalThreshold_", - type: "uint256", - }, - ], - name: "initialize", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "latestProposalIds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "pendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalMaxOperations", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "proposals", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "proposer", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "abstainVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "quorumVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum GovernorBravoDelegateStorageV1.ProposalState", - name: "", - type: "uint8", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "contract TimelockInterface", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506142b1806100206000396000f3fe6080604052600436106102305760003560e01c80635c60da1b1161012e578063da35c664116100ab578063e48083fe1161006f578063e48083fe1461062e578063e9c714f214610643578063f851a44014610658578063fc4eee421461066d578063fe0d94c11461068257610230565b8063da35c66414610597578063da95691a146105ac578063ddf0b009146105cc578063deaaa7cc146105ec578063e23a9a521461060157610230565b8063b1126263116100f2578063b112626314610518578063b58131b01461052d578063b71d1a0c14610542578063d13f90b414610562578063d33219b41461058257610230565b80635c60da1b146104a4578063791f5d23146104b95780637b3c71d3146104ce5780637bdbe4d0146104ee578063a64e024a1461050357610230565b8063215809ca116101bc5780633932abb1116101805780633932abb1146104025780633bccf4fd146104175780633e4f49e61461043757806340e58ee514610464578063567813881461048457610230565b8063215809ca1461037157806324bc1a641461038657806325fd935a1461039b57806326782247146103b0578063328dd982146103d257610230565b8063109d0af811610203578063109d0af8146102da57806317977c61146102fc57806317ba1b8b1461031c5780631dfb1b5a1461033c57806320606b701461035c57610230565b8063013cf08b1461023557806302a251a31461027457806306fdde03146102965780630ea2d98c146102b8575b600080fd5b34801561024157600080fd5b50610255610250366004612a19565b610695565b60405161026b9a99989796959493929190613fc8565b60405180910390f35b34801561028057600080fd5b506102896106f8565b60405161026b9190613c25565b3480156102a257600080fd5b506102ab6106fe565b60405161026b9190613ce1565b3480156102c457600080fd5b506102d86102d3366004612a19565b610731565b005b3480156102e657600080fd5b506102ef6107db565b60405161026b9190613cc5565b34801561030857600080fd5b5061028961031736600461282e565b6107ea565b34801561032857600080fd5b506102d8610337366004612a19565b6107fc565b34801561034857600080fd5b506102d8610357366004612a19565b6108a0565b34801561036857600080fd5b50610289610933565b34801561037d57600080fd5b5061028961094a565b34801561039257600080fd5b50610289610950565b3480156103a757600080fd5b5061028961095e565b3480156103bc57600080fd5b506103c561096c565b60405161026b9190613aeb565b3480156103de57600080fd5b506103f26103ed366004612a19565b61097b565b60405161026b9493929190613bd8565b34801561040e57600080fd5b50610289610c0a565b34801561042357600080fd5b506102d8610432366004612b09565b610c10565b34801561044357600080fd5b50610457610452366004612a19565b610deb565b60405161026b9190613cd3565b34801561047057600080fd5b506102d861047f366004612a19565b610f71565b34801561049057600080fd5b506102d861049f366004612a71565b6111c5565b3480156104b057600080fd5b506103c561120f565b3480156104c557600080fd5b5061028961121e565b3480156104da57600080fd5b506102d86104e9366004612aa1565b61122c565b3480156104fa57600080fd5b5061028961127c565b34801561050f57600080fd5b50610289611281565b34801561052457600080fd5b50610289611288565b34801561053957600080fd5b5061028961128e565b34801561054e57600080fd5b506102d861055d36600461282e565b611294565b34801561056e57600080fd5b506102d861057d366004612854565b611311565b34801561058e57600080fd5b506102ef61148e565b3480156105a357600080fd5b5061028961149d565b3480156105b857600080fd5b506102896105c73660046128c9565b6114a3565b3480156105d857600080fd5b506102d86105e7366004612a19565b6118eb565b3480156105f857600080fd5b50610289611b67565b34801561060d57600080fd5b5061062161061c366004612a37565b611b73565b60405161026b9190613f12565b34801561063a57600080fd5b50610289611be0565b34801561064f57600080fd5b506102d8611be5565b34801561066457600080fd5b506103c5611cc3565b34801561067957600080fd5b50610289611cd2565b6102d8610690366004612a19565b611cd8565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b60405180604001604052806017815260200176436f6d706f756e6420476f7665726e6f7220427261766f60481b81525081565b6000546001600160a01b031633146107645760405162461bcd60e51b815260040161075b90613d32565b60405180910390fd5b6116808110158015610779575062013b008111155b6107955760405162461bcd60e51b815260040161075b90613d72565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828906107cf908390859061404e565b60405180910390a15050565b6009546001600160a01b031681565b600b6020526000908152604090205481565b6000546001600160a01b031633146108265760405162461bcd60e51b815260040161075b90613ed2565b690a968163f0a57b400000811015801561084a575069152d02c7e14af68000008111155b6108665760405162461bcd60e51b815260040161075b90613e12565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461906107cf908390859061404e565b6000546001600160a01b031633146108ca5760405162461bcd60e51b815260040161075b90613d52565b600181101580156108dd5750619d808111155b6108f95760405162461bcd60e51b815260040161075b90613da2565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93906107cf908390859061404e565b60405161093f90613ae0565b604051809103902081565b61168081565b6954b40b1f852bda00000081565b69152d02c7e14af680000081565b6001546001600160a01b031681565b6060806060806000600a6000878152602001908152602001600020905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156109fd57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109df575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610a4f57602002820191906000526020600020905b815481526020019060010190808311610a3b575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610b225760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b505050505081526020019060010190610a77565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610bf45760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081526020019060010190610b49565b5050505090509450945094509450509193509193565b60035481565b6000604051610c1e90613ae0565b604080519182900382208282019091526017825276436f6d706f756e6420476f7665726e6f7220427261766f60481b6020909201919091527f3d9e905142ff365fb68ce863f26a44f5583cf7ec11bcde450555f50b7e1b5614610c7f611e91565b30604051602001610c939493929190613c33565b6040516020818303038152906040528051906020012090506000604051610cb990613aa4565b604051908190038120610cd29189908990602001613c68565b60405160208183030381529060405280519060200120905060008282604051602001610cff929190613aaf565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610d3c9493929190613c90565b6020604051602081039080840390855afa158015610d5e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d915760405162461bcd60e51b815260040161075b90613dd2565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a610dc9858e8e611e96565b604051610dd8939291906140a2565b60405180910390a2505050505050505050565b60008160075410158015610e00575060065482115b610e1c5760405162461bcd60e51b815260040161075b90613ee2565b6000828152600a60205260409020600c81015460ff1615610e41576002915050610f6c565b80600701544311610e56576000915050610f6c565b80600801544311610e6b576001915050610f6c565b80600a01548160090154111580610e8f57506954b40b1f852bda0000008160090154105b15610e9e576003915050610f6c565b6002810154610eb1576004915050610f6c565b600c810154610100900460ff1615610ecd576007915050610f6c565b6002810154600854604080516360d143f160e11b81529051610f5693926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610f1957600080fd5b505afa158015610f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f5191908101906129c6565b612087565b4210610f66576006915050610f6c565b60059150505b919050565b6007610f7c82610deb565b6007811115610f8757fe5b1415610fa55760405162461bcd60e51b815260040161075b90613ec2565b6000818152600a6020526040902060018101546001600160a01b031633148061106d57506005546009546001838101546001600160a01b039283169263782d6fe192911690610ff59043906120ac565b6040518363ffffffff1660e01b8152600401611012929190613b2f565b60206040518083038186803b15801561102a57600080fd5b505afa15801561103e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110629190810190612b4f565b6001600160601b0316105b6110895760405162461bcd60e51b815260040161075b90613e72565b600c8101805460ff1916600117905560005b6003820154811015611195576008546003830180546001600160a01b039092169163591fcdfe9190849081106110cd57fe5b6000918252602090912001546004850180546001600160a01b0390921691859081106110f557fe5b906000526020600020015485600501858154811061110f57fe5b9060005260206000200186600601868154811061112857fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401611157959493929190613b97565b600060405180830381600087803b15801561117157600080fd5b505af1158015611185573d6000803e3d6000fd5b50506001909201915061109b9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516107cf9190613c25565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836111f4848383611e96565b604051611203939291906140a2565b60405180910390a25050565b6002546001600160a01b031681565b690a968163f0a57b40000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4858561125b848383611e96565b868660405161126e95949392919061405c565b60405180910390a250505050565b600a81565b62013b0081565b619d8081565b60055481565b6000546001600160a01b031633146112be5760405162461bcd60e51b815260040161075b90613d12565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9906107cf9083908590613b14565b6008546001600160a01b03161561133a5760405162461bcd60e51b815260040161075b90613d02565b6000546001600160a01b031633146113645760405162461bcd60e51b815260040161075b90613e02565b6001600160a01b03851661138a5760405162461bcd60e51b815260040161075b90613d42565b6001600160a01b0384166113b05760405162461bcd60e51b815260040161075b90613e62565b61168083101580156113c5575062013b008311155b6113e15760405162461bcd60e51b815260040161075b90613ef2565b600182101580156113f45750619d808211155b6114105760405162461bcd60e51b815260040161075b90613de2565b690a968163f0a57b4000008110158015611434575069152d02c7e14af68000008111155b6114505760405162461bcd60e51b815260040161075b90613db2565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b6008546001600160a01b031681565b60075481565b6000600654600014156114c85760405162461bcd60e51b815260040161075b90613d62565b6005546009546001600160a01b031663782d6fe1336114e84360016120ac565b6040518363ffffffff1660e01b8152600401611505929190613af9565b60206040518083038186803b15801561151d57600080fd5b505afa158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115559190810190612b4f565b6001600160601b03161161157b5760405162461bcd60e51b815260040161075b90613eb2565b8451865114801561158d575083518651145b801561159a575082518651145b6115b65760405162461bcd60e51b815260040161075b90613df2565b85516115d45760405162461bcd60e51b815260040161075b90613e42565b600a865111156115f65760405162461bcd60e51b815260040161075b90613e82565b336000908152600b6020526040902054801561167357600061161782610deb565b9050600181600781111561162757fe5b14156116455760405162461bcd60e51b815260040161075b90613ea2565b600081600781111561165357fe5b14156116715760405162461bcd60e51b815260040161075b90613e92565b505b600061168143600354612087565b9050600061169182600454612087565b60078054600101905590506116a4612233565b604051806101c001604052806007548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301908051906020019061178e9291906122af565b50608082015180516117aa916004840191602090910190612314565b5060a082015180516117c691600584019160209091019061235b565b5060c082015180516117e29160068401916020909101906123b4565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516118d399989796959493929190613f20565b60405180910390a15193505050505b95945050505050565b60046118f682610deb565b600781111561190157fe5b1461191e5760405162461bcd60e51b815260040161075b90613e22565b6000818152600a602090815260408083206008548251630d48571f60e31b815292519194936119789342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b158015610f1957600080fd5b905060005b6003830154811015611b2057611b1883600301828154811061199b57fe5b6000918252602090912001546004850180546001600160a01b0390921691849081106119c357fe5b90600052602060002001548560050184815481106119dd57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611a6b5780601f10611a4057610100808354040283529160200191611a6b565b820191906000526020600020905b815481529060010190602001808311611a4e57829003601f168201915b5050505050866006018581548110611a7f57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611b0d5780601f10611ae257610100808354040283529160200191611b0d565b820191906000526020600020905b815481529060010190602001808311611af057829003601f168201915b5050505050866120d4565b60010161197d565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611b5a908590849061404e565b60405180910390a1505050565b60405161093f90613aa4565b611b7b61240d565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600181565b6001546001600160a01b031633148015611bfe57503315155b611c1a5760405162461bcd60e51b815260040161075b90613e52565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611c7e928692911690613b14565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916107cf9184916001600160a01b031690613b14565b6000546001600160a01b031681565b60065481565b6005611ce382610deb565b6007811115611cee57fe5b14611d0b5760405162461bcd60e51b815260040161075b90613dc2565b6000818152600a60205260408120600c8101805461ff001916610100179055905b6003820154811015611e61576008546004830180546001600160a01b0390921691630825f38f919084908110611d5e57fe5b9060005260206000200154846003018481548110611d7857fe5b6000918252602090912001546004860180546001600160a01b039092169186908110611da057fe5b9060005260206000200154866005018681548110611dba57fe5b90600052602060002001876006018781548110611dd357fe5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611e02959493929190613b97565b6000604051808303818588803b158015611e1b57600080fd5b505af1158015611e2f573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611e5891908101906129e4565b50600101611d2c565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516107cf9190613c25565b465b90565b60006001611ea384610deb565b6007811115611eae57fe5b14611ecb5760405162461bcd60e51b815260040161075b90613d82565b60028260ff161115611eef5760405162461bcd60e51b815260040161075b90613cf2565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff1615611f385760405162461bcd60e51b815260040161075b90613d92565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191611f6e918b91600401613b2f565b60206040518083038186803b158015611f8657600080fd5b505afa158015611f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611fbe9190810190612b4f565b905060ff8516611fe957611fdf83600a0154826001600160601b0316612087565b600a84015561203f565b8460ff16600114156120165761200c8360090154826001600160601b0316612087565b600984015561203f565b8460ff166002141561203f5761203983600b0154826001600160601b0316612087565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b6000828201838110156120805760405162461bcd60e51b815260040161075b90613e32565b6000828211156120ce5760405162461bcd60e51b815260040161075b90613f02565b50900390565b6008546040516001600160a01b039091169063f2b06537906121029088908890889088908890602001613b3d565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016121349190613c25565b60206040518083038186803b15801561214c57600080fd5b505afa158015612160573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061218491908101906129a8565b156121a15760405162461bcd60e51b815260040161075b90613d22565b600854604051633a66f90160e01b81526001600160a01b0390911690633a66f901906121d99088908890889088908890600401613b3d565b602060405180830381600087803b1580156121f357600080fd5b505af1158015612207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061222b91908101906129c6565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612304579160200282015b8281111561230457825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906122cf565b5061231092915061242d565b5090565b82805482825590600052602060002090810192821561234f579160200282015b8281111561234f578251825591602001919060010190612334565b50612310929150612451565b8280548282559060005260206000209081019282156123a8579160200282015b828111156123a8578251805161239891849160209091019061246b565b509160200191906001019061237b565b506123109291506124d8565b828054828255906000526020600020908101928215612401579160200282015b8281111561240157825180516123f191849160209091019061246b565b50916020019190600101906123d4565b506123109291506124fb565b604080516060810182526000808252602082018190529181019190915290565b611e9391905b808211156123105780546001600160a01b0319168155600101612433565b611e9391905b808211156123105760008155600101612457565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106124ac57805160ff191683800117855561234f565b8280016001018555821561234f579182018281111561234f578251825591602001919060010190612334565b611e9391905b808211156123105760006124f2828261251e565b506001016124de565b611e9391905b80821115612310576000612515828261251e565b50600101612501565b50805460018160011615610100020316600290046000825580601f106125445750612562565b601f0160209004906000526020600020908101906125629190612451565b50565b8035611bda81614216565b600082601f83011261258157600080fd5b813561259461258f82614102565b6140db565b915081818352602084019350602081019050838560208402820111156125b957600080fd5b60005b838110156125e557816125cf8882612565565b84525060209283019291909101906001016125bc565b5050505092915050565b600082601f83011261260057600080fd5b813561260e61258f82614102565b81815260209384019390925082018360005b838110156125e55781358601612636888261273a565b8452506020928301929190910190600101612620565b600082601f83011261265d57600080fd5b813561266b61258f82614102565b81815260209384019390925082018360005b838110156125e55781358601612693888261273a565b845250602092830192919091019060010161267d565b600082601f8301126126ba57600080fd5b81356126c861258f82614102565b915081818352602084019350602081019050838560208402820111156126ed57600080fd5b60005b838110156125e557816127038882612724565b84525060209283019291909101906001016126f0565b8051611bda8161422a565b8035611bda81614233565b8051611bda81614233565b600082601f83011261274b57600080fd5b813561275961258f82614123565b9150808252602083016020830185838301111561277557600080fd5b6127808382846141ca565b50505092915050565b600082601f83011261279a57600080fd5b81516127a861258f82614123565b915080825260208301602083018583830111156127c457600080fd5b6127808382846141d6565b60008083601f8401126127e157600080fd5b50813567ffffffffffffffff8111156127f957600080fd5b60208301915083600182028301111561281157600080fd5b9250929050565b8035611bda8161423c565b8051611bda81614245565b60006020828403121561284057600080fd5b600061284c8484612565565b949350505050565b600080600080600060a0868803121561286c57600080fd5b60006128788888612565565b955050602061288988828901612565565b945050604061289a88828901612724565b93505060606128ab88828901612724565b92505060806128bc88828901612724565b9150509295509295909350565b600080600080600060a086880312156128e157600080fd5b853567ffffffffffffffff8111156128f857600080fd5b61290488828901612570565b955050602086013567ffffffffffffffff81111561292157600080fd5b61292d888289016126a9565b945050604086013567ffffffffffffffff81111561294a57600080fd5b6129568882890161264c565b935050606086013567ffffffffffffffff81111561297357600080fd5b61297f888289016125ef565b925050608086013567ffffffffffffffff81111561299c57600080fd5b6128bc8882890161273a565b6000602082840312156129ba57600080fd5b600061284c8484612719565b6000602082840312156129d857600080fd5b600061284c848461272f565b6000602082840312156129f657600080fd5b815167ffffffffffffffff811115612a0d57600080fd5b61284c84828501612789565b600060208284031215612a2b57600080fd5b600061284c8484612724565b60008060408385031215612a4a57600080fd5b6000612a568585612724565b9250506020612a6785828601612565565b9150509250929050565b60008060408385031215612a8457600080fd5b6000612a908585612724565b9250506020612a6785828601612818565b60008060008060608587031215612ab757600080fd5b6000612ac38787612724565b9450506020612ad487828801612818565b935050604085013567ffffffffffffffff811115612af157600080fd5b612afd878288016127cf565b95989497509550505050565b600080600080600060a08688031215612b2157600080fd5b6000612b2d8888612724565b9550506020612b3e88828901612818565b945050604061289a88828901612818565b600060208284031215612b6157600080fd5b600061284c8484612823565b6000612b798383612ba8565b505060200190565b60006120808383612d4a565b6000612b798383612d30565b612ba2816141a2565b82525050565b612ba28161416a565b6000612bbc8261415d565b612bc68185614161565b9350612bd18361414b565b8060005b83811015612bff578151612be98882612b6d565b9750612bf48361414b565b925050600101612bd5565b509495945050505050565b6000612c158261415d565b612c1f8185614161565b935083602082028501612c318561414b565b8060005b85811015612c6b5784840389528151612c4e8582612b81565b9450612c598361414b565b60209a909a0199925050600101612c35565b5091979650505050505050565b6000612c838261415d565b612c8d8185614161565b935083602082028501612c9f8561414b565b8060005b85811015612c6b5784840389528151612cbc8582612b81565b9450612cc78361414b565b60209a909a0199925050600101612ca3565b6000612ce48261415d565b612cee8185614161565b9350612cf98361414b565b8060005b83811015612bff578151612d118882612b8d565b9750612d1c8361414b565b925050600101612cfd565b612ba281614175565b612ba281611e93565b612ba2612d4582611e93565b611e93565b6000612d558261415d565b612d5f8185614161565b9350612d6f8185602086016141d6565b612d7881614202565b9093019392505050565b600081546001811660008114612d9f5760018114612dc557612e04565b607f6002830416612db08187614161565b60ff1984168152955050602085019250612e04565b60028204612dd38187614161565b9550612dde85614151565b60005b82811015612dfd57815488820152600190910190602001612de1565b8701945050505b505092915050565b612ba2816141a9565b612ba2816141b4565b6000612e2a8385614161565b9350612e378385846141ca565b612d7883614202565b6000612e4d603283614161565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b6000612ea1602883610f6c565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b6000612eeb603383614161565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b6000612f40602a83614161565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b6000612f8c605583614161565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b6000613009602b83614161565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b6000613056603383614161565b60008051602061424f83398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b6000613099602a83614161565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006130e5603183614161565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b6000613138600283610f6c565b61190160f01b815260020192915050565b6000613156603683614161565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a815275081a5b9d985b1a59081d9bdd1a5b99c81c195c9a5bd960521b602082015260400192915050565b60006131ae603183614161565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b6000613201603483614161565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b6000613257603483614161565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a20815273696e76616c696420766f74696e672064656c617960601b602082015260400192915050565b60006132ad603583614161565b60008051602061424f8339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b60006132f2604583614161565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b600061335f602f83614161565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b60006133b0602f83614161565b60008051602061424f83398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b60006133ef604483614161565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b600061345b602583614161565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b60006134a2604083614161565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b6000613501604483614161565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b600061356d601183614161565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b600061359a604383610f6c565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613605602c83614161565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000613653602e83614161565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b60006136a3602f83614161565b60008051602061424f83398151915281526e696420636f6d70206164647265737360881b602082015260400192915050565b60006136e2602f83614161565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000613733602883614161565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b600061377d605983614161565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000613802605883614161565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611bda600083614161565b6000613894603f83614161565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b60006138f3603683614161565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b600061394b603083614161565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381526f686f6c643a2061646d696e206f6e6c7960801b602082015260400192915050565b600061399d602983614161565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b60006139e8603083614161565b60008051602061424f83398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b6000613a28601583614161565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b80516060830190613a5d8482612d27565b506020820151613a706020850182613a89565b506040820151613a836040850182613a9b565b50505050565b612ba281614190565b612ba2816141bf565b612ba281614196565b6000611bda82612e94565b6000613aba8261312b565b9150613ac68285612d39565b602082019150613ad68284612d39565b5060200192915050565b6000611bda8261358d565b60208101611bda8284612ba8565b60408101613b078285612b99565b6120806020830184612d30565b60408101613b228285612ba8565b6120806020830184612ba8565b60408101613b078285612ba8565b60a08101613b4b8288612ba8565b613b586020830187612d30565b8181036040830152613b6a8186612d4a565b90508181036060830152613b7e8185612d4a565b9050613b8d6080830184612d30565b9695505050505050565b60a08101613ba58288612ba8565b613bb26020830187612d30565b8181036040830152613bc48186612d82565b90508181036060830152613b7e8185612d82565b60808082528101613be98187612bb1565b90508181036020830152613bfd8186612cd9565b90508181036040830152613c118185612c78565b90508181036060830152613b8d8184612c0a565b60208101611bda8284612d30565b60808101613c418287612d30565b613c4e6020830186612d30565b613c5b6040830185612d30565b6118e26060830184612ba8565b60608101613c768286612d30565b613c836020830185612d30565b61284c6040830184613a89565b60808101613c9e8287612d30565b613cab6020830186613a89565b613cb86040830185612d30565b6118e26060830184612d30565b60208101611bda8284612e0c565b60208101611bda8284612e15565b602080825281016120808184612d4a565b60208082528101611bda81612e40565b60208082528101611bda81612ede565b60208082528101611bda81612f33565b60208082528101611bda81612f7f565b60208082528101611bda81612ffc565b60208082528101611bda81613049565b60208082528101611bda8161308c565b60208082528101611bda816130d8565b60208082528101611bda81613149565b60208082528101611bda816131a1565b60208082528101611bda816131f4565b60208082528101611bda8161324a565b60208082528101611bda816132a0565b60208082528101611bda816132e5565b60208082528101611bda81613352565b60208082528101611bda816133a3565b60208082528101611bda816133e2565b60208082528101611bda8161344e565b60208082528101611bda81613495565b60208082528101611bda816134f4565b60208082528101611bda81613560565b60208082528101611bda816135f8565b60208082528101611bda81613646565b60208082528101611bda81613696565b60208082528101611bda816136d5565b60208082528101611bda81613726565b60208082528101611bda81613770565b60208082528101611bda816137f5565b60208082528101611bda81613887565b60208082528101611bda816138e6565b60208082528101611bda8161393e565b60208082528101611bda81613990565b60208082528101611bda816139db565b60208082528101611bda81613a1b565b60608101611bda8284613a4c565b6101208101613f2f828c612d30565b613f3c602083018b612b99565b8181036040830152613f4e818a612bb1565b90508181036060830152613f628189612cd9565b90508181036080830152613f768188612c78565b905081810360a0830152613f8a8187612c0a565b9050613f9960c0830186612d30565b613fa660e0830185612d30565b818103610100830152613fb98184612d4a565b9b9a5050505050505050505050565b6101408101613fd7828d612d30565b613fe4602083018c612ba8565b613ff1604083018b612d30565b613ffe606083018a612d30565b61400b6080830189612d30565b61401860a0830188612d30565b61402560c0830187612d30565b61403260e0830186612d30565b614040610100830185612d27565b613fb9610120830184612d27565b60408101613b078285612d30565b6080810161406a8288612d30565b6140776020830187613a89565b6140846040830186613a92565b8181036060830152614097818486612e1e565b979650505050505050565b608081016140b08286612d30565b6140bd6020830185613a89565b6140ca6040830184613a92565b81810360608301526118e28161387a565b60405181810167ffffffffffffffff811182821017156140fa57600080fd5b604052919050565b600067ffffffffffffffff82111561411957600080fd5b5060209081020190565b600067ffffffffffffffff82111561413a57600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611bda82614184565b151590565b80610f6c8161420c565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611bda825b6000611bda8261416a565b6000611bda8261417a565b6000611bda82614196565b82818337506000910152565b60005b838110156141f15781810151838201526020016141d9565b83811115613a835750506000910152565b601f01601f191690565b6008811061256257fe5b61421f8161416a565b811461256257600080fd5b61421f81614175565b61421f81611e93565b61421f81614190565b61421f8161419656fe476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616ca365627a7a7231582084aa7afeaea80c6395fd1330a2284421a047b98f206f18d86410b774524ac7ea6c6578706572696d656e74616cf564736f6c63430005100040"; diff --git a/libs/chains/src/eth/types/factories/GovernorBravoDelegatorStorage__factory.ts b/libs/chains/src/eth/types/factories/GovernorBravoDelegatorStorage__factory.ts deleted file mode 100644 index f4574adf4c1..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorBravoDelegatorStorage__factory.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorBravoDelegatorStorage } from "../GovernorBravoDelegatorStorage"; - -export class GovernorBravoDelegatorStorage__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): GovernorBravoDelegatorStorage { - return super.attach(address) as GovernorBravoDelegatorStorage; - } - connect(signer: Signer): GovernorBravoDelegatorStorage__factory { - return super.connect(signer) as GovernorBravoDelegatorStorage__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorBravoDelegatorStorage { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorBravoDelegatorStorage; - } -} - -const _abi = [ - { - constant: true, - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "implementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "pendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610106806100206000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063267822471460415780635c60da1b14605b578063f851a440146061575b600080fd5b60476067565b6040516052919060a1565b60405180910390f35b60476076565b60476085565b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b609b8160b3565b82525050565b6020810160ad82846094565b92915050565b60006001600160a01b03821660ad56fea365627a7a72315820d590f11729b6522b5134fec69ec792ea7f44ffaf87ce8e51f0e343c0dc79a0c06c6578706572696d656e74616cf564736f6c63430005100040"; diff --git a/libs/chains/src/eth/types/factories/GovernorBravoDelegator__factory.ts b/libs/chains/src/eth/types/factories/GovernorBravoDelegator__factory.ts deleted file mode 100644 index 5aa2fb1cc2e..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorBravoDelegator__factory.ts +++ /dev/null @@ -1,450 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorBravoDelegator } from "../GovernorBravoDelegator"; - -export class GovernorBravoDelegator__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - timelock_: string, - comp_: string, - admin_: string, - implementation_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - timelock_, - comp_, - admin_, - implementation_, - votingPeriod_, - votingDelay_, - proposalThreshold_, - overrides || {} - ) as Promise; - } - getDeployTransaction( - timelock_: string, - comp_: string, - admin_: string, - implementation_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - timelock_, - comp_, - admin_, - implementation_, - votingPeriod_, - votingDelay_, - proposalThreshold_, - overrides || {} - ); - } - attach(address: string): GovernorBravoDelegator { - return super.attach(address) as GovernorBravoDelegator; - } - connect(signer: Signer): GovernorBravoDelegator__factory { - return super.connect(signer) as GovernorBravoDelegator__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorBravoDelegator { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorBravoDelegator; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "timelock_", - type: "address", - }, - { - internalType: "address", - name: "comp_", - type: "address", - }, - { - internalType: "address", - name: "admin_", - type: "address", - }, - { - internalType: "address", - name: "implementation_", - type: "address", - }, - { - internalType: "uint256", - name: "votingPeriod_", - type: "uint256", - }, - { - internalType: "uint256", - name: "votingDelay_", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalThreshold_", - type: "uint256", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldImplementation", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "NewImplementation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldPendingAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldProposalThreshold", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "ProposalThresholdSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "votes", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingDelay", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "VotingDelaySet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingPeriod", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "VotingPeriodSet", - type: "event", - }, - { - payable: true, - stateMutability: "payable", - type: "fallback", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "implementation_", - type: "address", - }, - ], - name: "_setImplementation", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "implementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "pendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200096d3803806200096d83398101604081905262000034916200023c565b600080546001600160a01b031916331790556040516200009c90859062000068908a908a908890889088906024016200041f565b60408051601f198184030181529190526020810180516001600160e01b0390811663344fe42d60e21b17909152620000de16565b620000b0846001600160e01b036200015a16565b5050600080546001600160a01b0319166001600160a01b039490941693909317909255506200051492505050565b60006060836001600160a01b031683604051620000fc9190620003eb565b600060405180830381855af49150503d806000811462000139576040519150601f19603f3d011682016040523d82523d6000602084013e6200013e565b606091505b5091509150600082141562000154573d60208201fd5b50505050565b6000546001600160a01b03163314620001905760405162461bcd60e51b8152600401620001879062000487565b60405180910390fd5b6001600160a01b038116620001b95760405162461bcd60e51b8152600401620001879062000475565b600280546001600160a01b038381166001600160a01b031983161792839055604051918116927fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9262000210928592169062000400565b60405180910390a15050565b80516200022981620004ef565b92915050565b8051620002298162000509565b600080600080600080600060e0888a0312156200025857600080fd5b6000620002668a8a6200021c565b9750506020620002798a828b016200021c565b96505060406200028c8a828b016200021c565b95505060606200029f8a828b016200021c565b9450506080620002b28a828b016200022f565b93505060a0620002c58a828b016200022f565b92505060c0620002d88a828b016200022f565b91505092959891949750929550565b620002f281620004ab565b82525050565b6000620003058262000499565b6200031181856200049d565b935062000323818560208601620004c0565b9290920192915050565b60006200033c604a83620004a2565b6000805160206200094d83398151915281527f656d656e746174696f6e3a20696e76616c696420696d706c656d656e746174696020820152696f6e206164647265737360b01b604082015260600192915050565b60006200039f603683620004a2565b6000805160206200094d83398151915281527f656d656e746174696f6e3a2061646d696e206f6e6c7900000000000000000000602082015260400192915050565b620002f281620004bd565b6000620003f98284620002f8565b9392505050565b60408101620004108285620002e7565b620003f96020830184620002e7565b60a081016200042f8288620002e7565b6200043e6020830187620002e7565b6200044d6040830186620003e0565b6200045c6060830185620003e0565b6200046b6080830184620003e0565b9695505050505050565b6020808252810162000229816200032d565b60208082528101620002298162000390565b5190565b919050565b90815260200190565b60006001600160a01b03821662000229565b90565b60005b83811015620004dd578181015183820152602001620004c3565b83811115620001545750506000910152565b620004fa81620004ab565b81146200050657600080fd5b50565b620004fa81620004bd565b61042980620005246000396000f3fe60806040526004361061003f5760003560e01c806326782247146100ba5780635c60da1b146100e5578063bb913f41146100fa578063f851a4401461011c575b6002546040516000916001600160a01b03169061005f9083903690610347565b600060405180830381855af49150503d806000811461009a576040519150601f19603f3d011682016040523d82523d6000602084013e61009f565b606091505b505090506040513d6000823e8180156100b6573d82f35b3d82fd5b3480156100c657600080fd5b506100cf610131565b6040516100dc9190610354565b60405180910390f35b3480156100f157600080fd5b506100cf610140565b34801561010657600080fd5b5061011a610115366004610229565b61014f565b005b34801561012857600080fd5b506100cf610209565b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031633146101825760405162461bcd60e51b815260040161017990610394565b60405180910390fd5b6001600160a01b0381166101a85760405162461bcd60e51b815260040161017990610384565b600280546001600160a01b038381166001600160a01b031983161792839055604051918116927fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a926101fd9285921690610362565b60405180910390a15050565b6000546001600160a01b031681565b8035610223816103cf565b92915050565b60006020828403121561023b57600080fd5b60006102478484610218565b949350505050565b610258816103b2565b82525050565b600061026a83856103a4565b93506102778385846103c3565b50500190565b600061028a604a836103a9565b7f476f7665726e6f72427261766f44656c656761746f723a3a5f736574496d706c81527f656d656e746174696f6e3a20696e76616c696420696d706c656d656e746174696020820152696f6e206164647265737360b01b604082015260600192915050565b60006102fc6036836103a9565b7f476f7665726e6f72427261766f44656c656761746f723a3a5f736574496d706c815275656d656e746174696f6e3a2061646d696e206f6e6c7960501b602082015260400192915050565b600061024782848661025e565b60208101610223828461024f565b60408101610370828561024f565b61037d602083018461024f565b9392505050565b602080825281016102238161027d565b60208082528101610223816102ef565b919050565b90815260200190565b60006001600160a01b038216610223565b82818337506000910152565b6103d8816103b2565b81146103e357600080fd5b5056fea365627a7a72315820be56a12fb89b40a71ecda4e00f67acfba48cde039aac44b77b9516eab15da6796c6578706572696d656e74616cf564736f6c63430005100040476f7665726e6f72427261766f44656c656761746f723a3a5f736574496d706c"; diff --git a/libs/chains/src/eth/types/factories/GovernorBravoEvents__factory.ts b/libs/chains/src/eth/types/factories/GovernorBravoEvents__factory.ts deleted file mode 100644 index 040e050f725..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorBravoEvents__factory.ts +++ /dev/null @@ -1,301 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorBravoEvents } from "../GovernorBravoEvents"; - -export class GovernorBravoEvents__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): GovernorBravoEvents { - return super.attach(address) as GovernorBravoEvents; - } - connect(signer: Signer): GovernorBravoEvents__factory { - return super.connect(signer) as GovernorBravoEvents__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorBravoEvents { - return new Contract(address, _abi, signerOrProvider) as GovernorBravoEvents; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldImplementation", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "NewImplementation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldPendingAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldProposalThreshold", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "ProposalThresholdSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "votes", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingDelay", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "VotingDelaySet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingPeriod", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "VotingPeriodSet", - type: "event", - }, -]; - -const _bytecode = - "0x6080604052348015600f57600080fd5b50604c80601d6000396000f3fe6080604052600080fdfea365627a7a72315820d7f4d04869d505f91c5478982d4af387218399546007d12ea3a592a08558eb1f6c6578706572696d656e74616cf564736f6c63430005100040"; diff --git a/libs/chains/src/eth/types/factories/GovernorBravoImmutable__factory.ts b/libs/chains/src/eth/types/factories/GovernorBravoImmutable__factory.ts deleted file mode 100644 index 85728ab7a4b..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorBravoImmutable__factory.ts +++ /dev/null @@ -1,1157 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorBravoImmutable } from "../GovernorBravoImmutable"; - -export class GovernorBravoImmutable__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - timelock_: string, - comp_: string, - admin_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - timelock_, - comp_, - admin_, - votingPeriod_, - votingDelay_, - proposalThreshold_, - overrides || {} - ) as Promise; - } - getDeployTransaction( - timelock_: string, - comp_: string, - admin_: string, - votingPeriod_: BigNumberish, - votingDelay_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - timelock_, - comp_, - admin_, - votingPeriod_, - votingDelay_, - proposalThreshold_, - overrides || {} - ); - } - attach(address: string): GovernorBravoImmutable { - return super.attach(address) as GovernorBravoImmutable; - } - connect(signer: Signer): GovernorBravoImmutable__factory { - return super.connect(signer) as GovernorBravoImmutable__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorBravoImmutable { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorBravoImmutable; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "timelock_", - type: "address", - }, - { - internalType: "address", - name: "comp_", - type: "address", - }, - { - internalType: "address", - name: "admin_", - type: "address", - }, - { - internalType: "uint256", - name: "votingPeriod_", - type: "uint256", - }, - { - internalType: "uint256", - name: "votingDelay_", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalThreshold_", - type: "uint256", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldImplementation", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "NewImplementation", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldPendingAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldProposalThreshold", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "ProposalThresholdSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "votes", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingDelay", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "VotingDelaySet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldVotingPeriod", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "VotingPeriodSet", - type: "event", - }, - { - constant: true, - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "DOMAIN_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAX_PROPOSAL_THRESHOLD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAX_VOTING_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAX_VOTING_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MIN_PROPOSAL_THRESHOLD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MIN_VOTING_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MIN_VOTING_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [], - name: "_acceptAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [], - name: "_initiate", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "_setPendingAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "newProposalThreshold", - type: "uint256", - }, - ], - name: "_setProposalThreshold", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - ], - name: "_setVotingDelay", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "newVotingPeriod", - type: "uint256", - }, - ], - name: "_setVotingPeriod", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "comp", - outputs: [ - { - internalType: "contract CompInterface", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - payable: true, - stateMutability: "payable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getActions", - outputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getReceipt", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - internalType: "struct GovernorBravoDelegateStorageV1.Receipt", - name: "", - type: "tuple", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "implementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "initialProposalId", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "timelock_", - type: "address", - }, - { - internalType: "address", - name: "comp_", - type: "address", - }, - { - internalType: "uint256", - name: "votingPeriod_", - type: "uint256", - }, - { - internalType: "uint256", - name: "votingDelay_", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalThreshold_", - type: "uint256", - }, - ], - name: "initialize", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "latestProposalIds", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "pendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalMaxOperations", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "proposals", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "proposer", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "abstainVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "quorumVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum GovernorBravoDelegateStorageV1.ProposalState", - name: "", - type: "uint8", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "contract TimelockInterface", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b50604051620043703803806200437083398101604081905262000034916200014b565b600080546001600160a01b031916331790556200005e86868585856001600160e01b036200008b16565b5050600080546001600160a01b0319166001600160a01b03939093169290921790915550620002f0915050565b6000546001600160a01b03163314620000c15760405162461bcd60e51b8152600401620000b8906200029b565b60405180910390fd5b6008546001600160a01b031615620000ed5760405162461bcd60e51b8152600401620000b89062000289565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b80516200013881620002cb565b92915050565b80516200013881620002e5565b60008060008060008060c087890312156200016557600080fd5b60006200017389896200012b565b96505060206200018689828a016200012b565b95505060406200019989828a016200012b565b9450506060620001ac89828a016200013e565b9350506080620001bf89828a016200013e565b92505060a0620001d289828a016200013e565b9150509295509295509295565b6000620001ee603383620002ad565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f81527f6e6c7920696e697469616c697a65206f6e636500000000000000000000000000602082015260400192915050565b60006200024f602583620002ad565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b602080825281016200013881620001df565b60208082528101620001388162000240565b90815260200190565b60006001600160a01b03821662000138565b90565b620002d681620002b6565b8114620002e257600080fd5b50565b620002d681620002c8565b61407080620003006000396000f3fe60806040526004361061023b5760003560e01c8063791f5d231161012e578063da35c664116100ab578063e48083fe1161006f578063e48083fe14610391578063e9c714f214610639578063f851a4401461064e578063fc4eee4214610663578063fe0d94c1146106785761023b565b8063da35c664146105a2578063da95691a146105b7578063ddf0b009146105d7578063deaaa7cc146105f7578063e23a9a521461060c5761023b565b8063b1126263116100f2578063b112626314610523578063b58131b014610538578063b71d1a0c1461054d578063d13f90b41461056d578063d33219b41461058d5761023b565b8063791f5d23146103915780637b3c71d3146104c45780637bdbe4d0146104e4578063878f1482146104f9578063a64e024a1461050e5761023b565b806324bc1a64116101bc5780633bccf4fd116101805780633bccf4fd146104225780633e4f49e61461044257806340e58ee51461046f578063567813881461048f5780635c60da1b146104af5761023b565b806324bc1a641461039157806325fd935a146103a657806326782247146103bb578063328dd982146103dd5780633932abb11461040d5761023b565b806317977c611161020357806317977c611461030757806317ba1b8b146103275780631dfb1b5a1461034757806320606b7014610367578063215809ca1461037c5761023b565b8063013cf08b1461024057806302a251a31461027f57806306fdde03146102a15780630ea2d98c146102c3578063109d0af8146102e5575b600080fd5b34801561024c57600080fd5b5061026061025b366004612926565b61068b565b6040516102769a99989796959493929190613da7565b60405180910390f35b34801561028b57600080fd5b506102946106ee565b6040516102769190613a44565b3480156102ad57600080fd5b506102b66106f4565b6040516102769190613b00565b3480156102cf57600080fd5b506102e36102de366004612926565b610727565b005b3480156102f157600080fd5b506102fa6107d1565b6040516102769190613ae4565b34801561031357600080fd5b5061029461032236600461273b565b6107e0565b34801561033357600080fd5b506102e3610342366004612926565b6107f2565b34801561035357600080fd5b506102e3610362366004612926565b61088d565b34801561037357600080fd5b50610294610920565b34801561038857600080fd5b50610294610937565b34801561039d57600080fd5b5061029461093d565b3480156103b257600080fd5b50610294610942565b3480156103c757600080fd5b506103d0610950565b604051610276919061390a565b3480156103e957600080fd5b506103fd6103f8366004612926565b61095f565b60405161027694939291906139f7565b34801561041957600080fd5b50610294610bee565b34801561042e57600080fd5b506102e361043d366004612a16565b610bf4565b34801561044e57600080fd5b5061046261045d366004612926565b610dcf565b6040516102769190613af2565b34801561047b57600080fd5b506102e361048a366004612926565b610f4c565b34801561049b57600080fd5b506102e36104aa36600461297e565b6111a0565b3480156104bb57600080fd5b506103d06111ea565b3480156104d057600080fd5b506102e36104df3660046129ae565b6111f9565b3480156104f057600080fd5b50610294611249565b34801561050557600080fd5b506102e361124e565b34801561051a57600080fd5b5061029461125a565b34801561052f57600080fd5b50610294611261565b34801561054457600080fd5b50610294611267565b34801561055957600080fd5b506102e361056836600461273b565b61126d565b34801561057957600080fd5b506102e3610588366004612761565b6112ea565b34801561059957600080fd5b506102fa61137b565b3480156105ae57600080fd5b5061029461138a565b3480156105c357600080fd5b506102946105d23660046127d6565b611390565b3480156105e357600080fd5b506102e36105f2366004612926565b6117fd565b34801561060357600080fd5b50610294611a79565b34801561061857600080fd5b5061062c610627366004612944565b611a85565b6040516102769190613cf1565b34801561064557600080fd5b506102e3611af2565b34801561065a57600080fd5b506103d0611bd0565b34801561066f57600080fd5b50610294611bdf565b6102e3610686366004612926565b611be5565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b60405180604001604052806017815260200176436f6d706f756e6420476f7665726e6f7220427261766f60481b81525081565b6000546001600160a01b0316331461075a5760405162461bcd60e51b815260040161075190613b51565b60405180910390fd5b611680811015801561076f575062013b008111155b61078b5760405162461bcd60e51b815260040161075190613b81565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828906107c59083908590613e2d565b60405180910390a15050565b6009546001600160a01b031681565b600b6020526000908152604090205481565b6000546001600160a01b0316331461081c5760405162461bcd60e51b815260040161075190613cc1565b60018110158015610837575069152d02c7e14af68000008111155b6108535760405162461bcd60e51b815260040161075190613c01565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461906107c59083908590613e2d565b6000546001600160a01b031633146108b75760405162461bcd60e51b815260040161075190613b61565b600181101580156108ca5750619d808111155b6108e65760405162461bcd60e51b815260040161075190613bb1565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93906107c59083908590613e2d565b60405161092c906138ff565b604051809103902081565b61168081565b600181565b69152d02c7e14af680000081565b6001546001600160a01b031681565b6060806060806000600a6000878152602001908152602001600020905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156109e157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109c3575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610a3357602002820191906000526020600020905b815481526020019060010190808311610a1f575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610b065760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610af25780601f10610ac757610100808354040283529160200191610af2565b820191906000526020600020905b815481529060010190602001808311610ad557829003601f168201915b505050505081526020019060010190610a5b565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610bd85760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b505050505081526020019060010190610b2d565b5050505090509450945094509450509193509193565b60035481565b6000604051610c02906138ff565b604080519182900382208282019091526017825276436f6d706f756e6420476f7665726e6f7220427261766f60481b6020909201919091527f3d9e905142ff365fb68ce863f26a44f5583cf7ec11bcde450555f50b7e1b5614610c63611d9e565b30604051602001610c779493929190613a52565b6040516020818303038152906040528051906020012090506000604051610c9d906138c3565b604051908190038120610cb69189908990602001613a87565b60405160208183030381529060405280519060200120905060008282604051602001610ce39291906138ce565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610d209493929190613aaf565b6020604051602081039080840390855afa158015610d42573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d755760405162461bcd60e51b815260040161075190613bd1565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a610dad858e8e611da3565b604051610dbc93929190613e81565b60405180910390a2505050505050505050565b60008160075410158015610de4575060065482115b610e005760405162461bcd60e51b815260040161075190613cd1565b6000828152600a60205260409020600c81015460ff1615610e25576002915050610f47565b80600701544311610e3a576000915050610f47565b80600801544311610e4f576001915050610f47565b80600a01548160090154111580610e6a575060018160090154105b15610e79576003915050610f47565b6002810154610e8c576004915050610f47565b600c810154610100900460ff1615610ea8576007915050610f47565b6002810154600854604080516360d143f160e11b81529051610f3193926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610ef457600080fd5b505afa158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f2c91908101906128d3565b611f94565b4210610f41576006915050610f47565b60059150505b919050565b6007610f5782610dcf565b6007811115610f6257fe5b1415610f805760405162461bcd60e51b815260040161075190613cb1565b6000818152600a6020526040902060018101546001600160a01b031633148061104857506005546009546001838101546001600160a01b039283169263782d6fe192911690610fd0904390611fb9565b6040518363ffffffff1660e01b8152600401610fed92919061394e565b60206040518083038186803b15801561100557600080fd5b505afa158015611019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061103d9190810190612a5c565b6001600160601b0316105b6110645760405162461bcd60e51b815260040161075190613c61565b600c8101805460ff1916600117905560005b6003820154811015611170576008546003830180546001600160a01b039092169163591fcdfe9190849081106110a857fe5b6000918252602090912001546004850180546001600160a01b0390921691859081106110d057fe5b90600052602060002001548560050185815481106110ea57fe5b9060005260206000200186600601868154811061110357fe5b9060005260206000200187600201546040518663ffffffff1660e01b81526004016111329594939291906139b6565b600060405180830381600087803b15801561114c57600080fd5b505af1158015611160573d6000803e3d6000fd5b5050600190920191506110769050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516107c59190613a44565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836111cf848383611da3565b6040516111de93929190613e81565b60405180910390a25050565b6002546001600160a01b031681565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48585611228848383611da3565b868660405161123b959493929190613e3b565b60405180910390a250505050565b600a81565b60016007819055600655565b62013b0081565b619d8081565b60055481565b6000546001600160a01b031633146112975760405162461bcd60e51b815260040161075190613b31565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9906107c59083908590613933565b6000546001600160a01b031633146113145760405162461bcd60e51b815260040161075190613bf1565b6008546001600160a01b03161561133d5760405162461bcd60e51b815260040161075190613b21565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b6008546001600160a01b031681565b60075481565b6009546000906001600160a01b03166113bb5760405162461bcd60e51b815260040161075190613c11565b6006546113da5760405162461bcd60e51b815260040161075190613b71565b6005546009546001600160a01b031663782d6fe1336113fa436001611fb9565b6040518363ffffffff1660e01b8152600401611417929190613918565b60206040518083038186803b15801561142f57600080fd5b505afa158015611443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114679190810190612a5c565b6001600160601b03161161148d5760405162461bcd60e51b815260040161075190613ca1565b8451865114801561149f575083518651145b80156114ac575082518651145b6114c85760405162461bcd60e51b815260040161075190613be1565b85516114e65760405162461bcd60e51b815260040161075190613c41565b600a865111156115085760405162461bcd60e51b815260040161075190613c71565b336000908152600b6020526040902054801561158557600061152982610dcf565b9050600181600781111561153957fe5b14156115575760405162461bcd60e51b815260040161075190613c91565b600081600781111561156557fe5b14156115835760405162461bcd60e51b815260040161075190613c81565b505b600061159343600354611f94565b905060006115a382600454611f94565b60078054600101905590506115b6612140565b604051806101c001604052806007548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030190805190602001906116a09291906121bc565b50608082015180516116bc916004840191602090910190612221565b5060a082015180516116d8916005840191602090910190612268565b5060c082015180516116f49160068401916020909101906122c1565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516117e599989796959493929190613cff565b60405180910390a15193505050505b95945050505050565b600461180882610dcf565b600781111561181357fe5b146118305760405162461bcd60e51b815260040161075190613c21565b6000818152600a602090815260408083206008548251630d48571f60e31b8152925191949361188a9342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b158015610ef457600080fd5b905060005b6003830154811015611a3257611a2a8360030182815481106118ad57fe5b6000918252602090912001546004850180546001600160a01b0390921691849081106118d557fe5b90600052602060002001548560050184815481106118ef57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561197d5780601f106119525761010080835404028352916020019161197d565b820191906000526020600020905b81548152906001019060200180831161196057829003601f168201915b505050505086600601858154811061199157fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611a1f5780601f106119f457610100808354040283529160200191611a1f565b820191906000526020600020905b815481529060010190602001808311611a0257829003601f168201915b505050505086611fe1565b60010161188f565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611a6c9085908490613e2d565b60405180910390a1505050565b60405161092c906138c3565b611a8d61231a565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b6001546001600160a01b031633148015611b0b57503315155b611b275760405162461bcd60e51b815260040161075190613c51565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611b8b928692911690613933565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916107c59184916001600160a01b031690613933565b6000546001600160a01b031681565b60065481565b6005611bf082610dcf565b6007811115611bfb57fe5b14611c185760405162461bcd60e51b815260040161075190613bc1565b6000818152600a60205260408120600c8101805461ff001916610100179055905b6003820154811015611d6e576008546004830180546001600160a01b0390921691630825f38f919084908110611c6b57fe5b9060005260206000200154846003018481548110611c8557fe5b6000918252602090912001546004860180546001600160a01b039092169186908110611cad57fe5b9060005260206000200154866005018681548110611cc757fe5b90600052602060002001876006018781548110611ce057fe5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611d0f9594939291906139b6565b6000604051808303818588803b158015611d2857600080fd5b505af1158015611d3c573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d6591908101906128f1565b50600101611c39565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516107c59190613a44565b465b90565b60006001611db084610dcf565b6007811115611dbb57fe5b14611dd85760405162461bcd60e51b815260040161075190613b91565b60028260ff161115611dfc5760405162461bcd60e51b815260040161075190613b11565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff1615611e455760405162461bcd60e51b815260040161075190613ba1565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191611e7b918b9160040161394e565b60206040518083038186803b158015611e9357600080fd5b505afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ecb9190810190612a5c565b905060ff8516611ef657611eec83600a0154826001600160601b0316611f94565b600a840155611f4c565b8460ff1660011415611f2357611f198360090154826001600160601b0316611f94565b6009840155611f4c565b8460ff1660021415611f4c57611f4683600b0154826001600160601b0316611f94565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b600082820183811015611f8d5760405162461bcd60e51b815260040161075190613c31565b600082821115611fdb5760405162461bcd60e51b815260040161075190613ce1565b50900390565b6008546040516001600160a01b039091169063f2b065379061200f908890889088908890889060200161395c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016120419190613a44565b60206040518083038186803b15801561205957600080fd5b505afa15801561206d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061209191908101906128b5565b156120ae5760405162461bcd60e51b815260040161075190613b41565b600854604051633a66f90160e01b81526001600160a01b0390911690633a66f901906120e6908890889088908890889060040161395c565b602060405180830381600087803b15801561210057600080fd5b505af1158015612114573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061213891908101906128d3565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612211579160200282015b8281111561221157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906121dc565b5061221d92915061233a565b5090565b82805482825590600052602060002090810192821561225c579160200282015b8281111561225c578251825591602001919060010190612241565b5061221d92915061235e565b8280548282559060005260206000209081019282156122b5579160200282015b828111156122b557825180516122a5918491602090910190612378565b5091602001919060010190612288565b5061221d9291506123e5565b82805482825590600052602060002090810192821561230e579160200282015b8281111561230e57825180516122fe918491602090910190612378565b50916020019190600101906122e1565b5061221d929150612408565b604080516060810182526000808252602082018190529181019190915290565b611da091905b8082111561221d5780546001600160a01b0319168155600101612340565b611da091905b8082111561221d5760008155600101612364565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106123b957805160ff191683800117855561225c565b8280016001018555821561225c579182018281111561225c578251825591602001919060010190612241565b611da091905b8082111561221d5760006123ff828261242b565b506001016123eb565b611da091905b8082111561221d576000612422828261242b565b5060010161240e565b50805460018160011615610100020316600290046000825580601f10612451575061246f565b601f01602090049060005260206000209081019061246f919061235e565b50565b8035611aec81613ff5565b600082601f83011261248e57600080fd5b81356124a161249c82613ee1565b613eba565b915081818352602084019350602081019050838560208402820111156124c657600080fd5b60005b838110156124f257816124dc8882612472565b84525060209283019291909101906001016124c9565b5050505092915050565b600082601f83011261250d57600080fd5b813561251b61249c82613ee1565b81815260209384019390925082018360005b838110156124f257813586016125438882612647565b845250602092830192919091019060010161252d565b600082601f83011261256a57600080fd5b813561257861249c82613ee1565b81815260209384019390925082018360005b838110156124f257813586016125a08882612647565b845250602092830192919091019060010161258a565b600082601f8301126125c757600080fd5b81356125d561249c82613ee1565b915081818352602084019350602081019050838560208402820111156125fa57600080fd5b60005b838110156124f257816126108882612631565b84525060209283019291909101906001016125fd565b8051611aec81614009565b8035611aec81614012565b8051611aec81614012565b600082601f83011261265857600080fd5b813561266661249c82613f02565b9150808252602083016020830185838301111561268257600080fd5b61268d838284613fa9565b50505092915050565b600082601f8301126126a757600080fd5b81516126b561249c82613f02565b915080825260208301602083018583830111156126d157600080fd5b61268d838284613fb5565b60008083601f8401126126ee57600080fd5b50813567ffffffffffffffff81111561270657600080fd5b60208301915083600182028301111561271e57600080fd5b9250929050565b8035611aec8161401b565b8051611aec81614024565b60006020828403121561274d57600080fd5b60006127598484612472565b949350505050565b600080600080600060a0868803121561277957600080fd5b60006127858888612472565b955050602061279688828901612472565b94505060406127a788828901612631565b93505060606127b888828901612631565b92505060806127c988828901612631565b9150509295509295909350565b600080600080600060a086880312156127ee57600080fd5b853567ffffffffffffffff81111561280557600080fd5b6128118882890161247d565b955050602086013567ffffffffffffffff81111561282e57600080fd5b61283a888289016125b6565b945050604086013567ffffffffffffffff81111561285757600080fd5b61286388828901612559565b935050606086013567ffffffffffffffff81111561288057600080fd5b61288c888289016124fc565b925050608086013567ffffffffffffffff8111156128a957600080fd5b6127c988828901612647565b6000602082840312156128c757600080fd5b60006127598484612626565b6000602082840312156128e557600080fd5b6000612759848461263c565b60006020828403121561290357600080fd5b815167ffffffffffffffff81111561291a57600080fd5b61275984828501612696565b60006020828403121561293857600080fd5b60006127598484612631565b6000806040838503121561295757600080fd5b60006129638585612631565b925050602061297485828601612472565b9150509250929050565b6000806040838503121561299157600080fd5b600061299d8585612631565b925050602061297485828601612725565b600080600080606085870312156129c457600080fd5b60006129d08787612631565b94505060206129e187828801612725565b935050604085013567ffffffffffffffff8111156129fe57600080fd5b612a0a878288016126dc565b95989497509550505050565b600080600080600060a08688031215612a2e57600080fd5b6000612a3a8888612631565b9550506020612a4b88828901612725565b94505060406127a788828901612725565b600060208284031215612a6e57600080fd5b60006127598484612730565b6000612a868383612ab5565b505060200190565b6000611f8d8383612c57565b6000612a868383612c3d565b612aaf81613f81565b82525050565b612aaf81613f49565b6000612ac982613f3c565b612ad38185613f40565b9350612ade83613f2a565b8060005b83811015612b0c578151612af68882612a7a565b9750612b0183613f2a565b925050600101612ae2565b509495945050505050565b6000612b2282613f3c565b612b2c8185613f40565b935083602082028501612b3e85613f2a565b8060005b85811015612b785784840389528151612b5b8582612a8e565b9450612b6683613f2a565b60209a909a0199925050600101612b42565b5091979650505050505050565b6000612b9082613f3c565b612b9a8185613f40565b935083602082028501612bac85613f2a565b8060005b85811015612b785784840389528151612bc98582612a8e565b9450612bd483613f2a565b60209a909a0199925050600101612bb0565b6000612bf182613f3c565b612bfb8185613f40565b9350612c0683613f2a565b8060005b83811015612b0c578151612c1e8882612a9a565b9750612c2983613f2a565b925050600101612c0a565b612aaf81613f54565b612aaf81611da0565b612aaf612c5282611da0565b611da0565b6000612c6282613f3c565b612c6c8185613f40565b9350612c7c818560208601613fb5565b612c8581613fe1565b9093019392505050565b600081546001811660008114612cac5760018114612cd257612d11565b607f6002830416612cbd8187613f40565b60ff1984168152955050602085019250612d11565b60028204612ce08187613f40565b9550612ceb85613f30565b60005b82811015612d0a57815488820152600190910190602001612cee565b8701945050505b505092915050565b612aaf81613f88565b612aaf81613f93565b6000612d378385613f40565b9350612d44838584613fa9565b612c8583613fe1565b6000612d5a603283613f40565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b6000612dae602883610f47565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b6000612df8603383613f40565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b6000612e4d602a83613f40565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b6000612e99605583613f40565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b6000612f16602b83613f40565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b6000612f63602a83613f40565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b6000612faf603183613f40565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b6000613002600283610f47565b61190160f01b815260020192915050565b6000613020603683613f40565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a815275081a5b9d985b1a59081d9bdd1a5b99c81c195c9a5bd960521b602082015260400192915050565b6000613078603183613f40565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006130cb603483613f40565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b6000613121603483613f40565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a20815273696e76616c696420766f74696e672064656c617960601b602082015260400192915050565b6000613177604583613f40565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b60006131e4602f83613f40565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b6000613235604483613f40565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b60006132a1602583613f40565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b60006132e8604083613f40565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b6000613347603683613f40565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527508109c985d9bc81b9bdd081a5b9a5d1a585b1a5e995960521b602082015260400192915050565b600061339f604483613f40565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b600061340b601183613f40565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000613438604383610f47565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b60006134a3602c83613f40565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b60006134f1602e83613f40565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b6000613541602f83613f40565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000613592602883613f40565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b60006135dc605983613f40565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000613661605883613f40565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611aec600083613f40565b60006136f3603f83613f40565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613752603683613f40565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b60006137aa603083613f40565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381526f686f6c643a2061646d696e206f6e6c7960801b602082015260400192915050565b60006137fc602983613f40565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613847601583613f40565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b8051606083019061387c8482612c34565b50602082015161388f60208501826138a8565b5060408201516138a260408501826138ba565b50505050565b612aaf81613f6f565b612aaf81613f9e565b612aaf81613f75565b6000611aec82612da1565b60006138d982612ff5565b91506138e58285612c46565b6020820191506138f58284612c46565b5060200192915050565b6000611aec8261342b565b60208101611aec8284612ab5565b604081016139268285612aa6565b611f8d6020830184612c3d565b604081016139418285612ab5565b611f8d6020830184612ab5565b604081016139268285612ab5565b60a0810161396a8288612ab5565b6139776020830187612c3d565b81810360408301526139898186612c57565b9050818103606083015261399d8185612c57565b90506139ac6080830184612c3d565b9695505050505050565b60a081016139c48288612ab5565b6139d16020830187612c3d565b81810360408301526139e38186612c8f565b9050818103606083015261399d8185612c8f565b60808082528101613a088187612abe565b90508181036020830152613a1c8186612be6565b90508181036040830152613a308185612b85565b905081810360608301526139ac8184612b17565b60208101611aec8284612c3d565b60808101613a608287612c3d565b613a6d6020830186612c3d565b613a7a6040830185612c3d565b6117f46060830184612ab5565b60608101613a958286612c3d565b613aa26020830185612c3d565b61275960408301846138a8565b60808101613abd8287612c3d565b613aca60208301866138a8565b613ad76040830185612c3d565b6117f46060830184612c3d565b60208101611aec8284612d19565b60208101611aec8284612d22565b60208082528101611f8d8184612c57565b60208082528101611aec81612d4d565b60208082528101611aec81612deb565b60208082528101611aec81612e40565b60208082528101611aec81612e8c565b60208082528101611aec81612f09565b60208082528101611aec81612f56565b60208082528101611aec81612fa2565b60208082528101611aec81613013565b60208082528101611aec8161306b565b60208082528101611aec816130be565b60208082528101611aec81613114565b60208082528101611aec8161316a565b60208082528101611aec816131d7565b60208082528101611aec81613228565b60208082528101611aec81613294565b60208082528101611aec816132db565b60208082528101611aec8161333a565b60208082528101611aec81613392565b60208082528101611aec816133fe565b60208082528101611aec81613496565b60208082528101611aec816134e4565b60208082528101611aec81613534565b60208082528101611aec81613585565b60208082528101611aec816135cf565b60208082528101611aec81613654565b60208082528101611aec816136e6565b60208082528101611aec81613745565b60208082528101611aec8161379d565b60208082528101611aec816137ef565b60208082528101611aec8161383a565b60608101611aec828461386b565b6101208101613d0e828c612c3d565b613d1b602083018b612aa6565b8181036040830152613d2d818a612abe565b90508181036060830152613d418189612be6565b90508181036080830152613d558188612b85565b905081810360a0830152613d698187612b17565b9050613d7860c0830186612c3d565b613d8560e0830185612c3d565b818103610100830152613d988184612c57565b9b9a5050505050505050505050565b6101408101613db6828d612c3d565b613dc3602083018c612ab5565b613dd0604083018b612c3d565b613ddd606083018a612c3d565b613dea6080830189612c3d565b613df760a0830188612c3d565b613e0460c0830187612c3d565b613e1160e0830186612c3d565b613e1f610100830185612c34565b613d98610120830184612c34565b604081016139268285612c3d565b60808101613e498288612c3d565b613e5660208301876138a8565b613e6360408301866138b1565b8181036060830152613e76818486612d2b565b979650505050505050565b60808101613e8f8286612c3d565b613e9c60208301856138a8565b613ea960408301846138b1565b81810360608301526117f4816136d9565b60405181810167ffffffffffffffff81118282101715613ed957600080fd5b604052919050565b600067ffffffffffffffff821115613ef857600080fd5b5060209081020190565b600067ffffffffffffffff821115613f1957600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611aec82613f63565b151590565b80610f4781613feb565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611aec825b6000611aec82613f49565b6000611aec82613f59565b6000611aec82613f75565b82818337506000910152565b60005b83811015613fd0578181015183820152602001613fb8565b838111156138a25750506000910152565b601f01601f191690565b6008811061246f57fe5b613ffe81613f49565b811461246f57600080fd5b613ffe81613f54565b613ffe81611da0565b613ffe81613f6f565b613ffe81613f7556fea365627a7a72315820f595630477326e21baa248eb9e3a429ef01a135d5f8702eaa48a3402ad2a6a166c6578706572696d656e74616cf564736f6c63430005100040"; diff --git a/libs/chains/src/eth/types/factories/GovernorCompatibilityBravo__factory.ts b/libs/chains/src/eth/types/factories/GovernorCompatibilityBravo__factory.ts deleted file mode 100644 index 77af6bee175..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorCompatibilityBravo__factory.ts +++ /dev/null @@ -1,892 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { GovernorCompatibilityBravo } from "../GovernorCompatibilityBravo"; - -export class GovernorCompatibilityBravo__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorCompatibilityBravo { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorCompatibilityBravo; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getActions", - outputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getReceipt", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - internalType: "struct IGovernorCompatibilityBravo.Receipt", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalEta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposals", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "proposer", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "abstainVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "queue", - outputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "quorumVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/GovernorCountingSimple__factory.ts b/libs/chains/src/eth/types/factories/GovernorCountingSimple__factory.ts deleted file mode 100644 index d7fb6bb7008..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorCountingSimple__factory.ts +++ /dev/null @@ -1,644 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { GovernorCountingSimple } from "../GovernorCountingSimple"; - -export class GovernorCountingSimple__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorCountingSimple { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorCountingSimple; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalProposer", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalEta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalVotes", - outputs: [ - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "abstainVotes", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/GovernorMock__factory.ts b/libs/chains/src/eth/types/factories/GovernorMock__factory.ts deleted file mode 100644 index fa984502525..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorMock__factory.ts +++ /dev/null @@ -1,926 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GovernorMock } from "../GovernorMock"; - -export class GovernorMock__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - name_: string, - token_: string, - votingDelay_: BigNumberish, - votingPeriod_: BigNumberish, - timelock_: string, - quorumNumerator_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - name_, - token_, - votingDelay_, - votingPeriod_, - timelock_, - quorumNumerator_, - proposalThreshold_, - overrides || {} - ) as Promise; - } - getDeployTransaction( - name_: string, - token_: string, - votingDelay_: BigNumberish, - votingPeriod_: BigNumberish, - timelock_: string, - quorumNumerator_: BigNumberish, - proposalThreshold_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - name_, - token_, - votingDelay_, - votingPeriod_, - timelock_, - quorumNumerator_, - proposalThreshold_, - overrides || {} - ); - } - attach(address: string): GovernorMock { - return super.attach(address) as GovernorMock; - } - connect(signer: Signer): GovernorMock__factory { - return super.connect(signer) as GovernorMock__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorMock { - return new Contract(address, _abi, signerOrProvider) as GovernorMock; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "string", - name: "name_", - type: "string", - }, - { - internalType: "contract ERC20Votes", - name: "token_", - type: "address", - }, - { - internalType: "uint256", - name: "votingDelay_", - type: "uint256", - }, - { - internalType: "uint256", - name: "votingPeriod_", - type: "uint256", - }, - { - internalType: "contract TimelockController", - name: "timelock_", - type: "address", - }, - { - internalType: "uint256", - name: "quorumNumerator_", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalThreshold_", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldQuorumNumerator", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newQuorumNumerator", - type: "uint256", - }, - ], - name: "QuorumNumeratorUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldTimelock", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newTimelock", - type: "address", - }, - ], - name: "TimelockChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "cancel", - outputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalEta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalVotes", - outputs: [ - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "abstainVotes", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "queue", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "quorumDenominator", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "quorumNumerator", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract ERC20Votes", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newQuorumNumerator", - type: "uint256", - }, - ], - name: "updateQuorumNumerator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract TimelockController", - name: "newTimelock", - type: "address", - }, - ], - name: "updateTimelock", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x6101a06040523480156200001257600080fd5b5060405162002fd638038062002fd6833981016040819052620000359162000332565b8186848980620000596040805180820190915260018152603160f81b602082015290565b815160209283012081519183019190912060c082815260e08290524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818901819052818301979097526060810195909552608080860193909352308583015280518086039092018252939092019092528051908401209052610100528151620000f391600091908401906200026f565b506200010190508162000139565b5060601b6001600160601b031916610120526200011e81620001a2565b50610140949094525050610160526101805250620004af9050565b600254604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b60648111156200022a5760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72566f74657351756f72756d4672616374696f6e3a2071756f60448201527f72756d4e756d657261746f72206f7665722071756f72756d44656e6f6d696e616064820152623a37b960e91b608482015260a40160405180910390fd5b600480549082905560408051828152602081018490527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a15050565b8280546200027d906200045c565b90600052602060002090601f016020900481019282620002a15760008555620002ec565b82601f10620002bc57805160ff1916838001178555620002ec565b82800160010185558215620002ec579182015b82811115620002ec578251825591602001919060010190620002cf565b50620002fa929150620002fe565b5090565b5b80821115620002fa5760008155600101620002ff565b80516001600160a01b03811681146200032d57600080fd5b919050565b600080600080600080600060e0888a0312156200034e57600080fd5b87516001600160401b03808211156200036657600080fd5b818a0191508a601f8301126200037b57600080fd5b81518181111562000390576200039062000499565b604051601f8201601f19908116603f01168101908382118183101715620003bb57620003bb62000499565b81604052828152602093508d84848701011115620003d857600080fd5b600091505b82821015620003fc5784820184015181830185015290830190620003dd565b828211156200040e5760008484830101525b9a50620004209150508a820162000315565b975050506040880151945060608801519350620004406080890162000315565b925060a0880151915060c0880151905092959891949750929550565b600181811c908216806200047157607f821691505b602082108114156200049357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160e051610100516101205160601c610140516101605161018051612a90620005466000396000818161051c01526111350152600081816102160152611cfa0152600081816102ea0152611cba01526000818161067e01528181611281015261131a015260006114af015260006114fe015260006114d90152600061145d015260006114860152612a906000f3fe6080604052600436106101cd5760003560e01c80637b3c71d3116100f7578063c01f9e3711610095578063deaaa7cc11610064578063deaaa7cc146105f8578063eb9019d41461062c578063f8ce560a1461064c578063fc0c546a1461066c57600080fd5b8063c01f9e3714610540578063c59057e414610560578063d33219b414610580578063dd4e2ba5146105b257600080fd5b8063a7713a70116100d1578063a7713a70146104b8578063a890c910146104cd578063ab58fb8e146104ed578063b58131b01461050d57600080fd5b80637b3c71d3146104645780637d5e81e21461048457806397c3d334146104a457600080fd5b80633932abb11161016f578063452115d61161013e578063452115d6146103a5578063544ffc9c146103c557806354fd4d501461041a578063567813881461044457600080fd5b80633932abb1146102db5780633bccf4fd1461030e5780633e4f49e61461032e578063438596321461035b57600080fd5b806306fdde03116101ab57806306fdde0314610266578063160cbed7146102885780632656227d146102a85780632d63f693146102bb57600080fd5b806301ffc9a7146101d257806302a251a31461020757806306f3f9e614610244575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612375565b6106a0565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020016101fe565b34801561025057600080fd5b5061026461025f3660046123bc565b6106b1565b005b34801561027257600080fd5b5061027b610725565b6040516101fe9190612734565b34801561029457600080fd5b506102366102a33660046121eb565b6107b7565b6102366102b63660046121eb565b6109d6565b3480156102c757600080fd5b506102366102d63660046123bc565b610aa9565b3480156102e757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610236565b34801561031a57600080fd5b506102366103293660046124b7565b610ae0565b34801561033a57600080fd5b5061034e6103493660046123bc565b610b74565b6040516101fe919061270c565b34801561036757600080fd5b506101f26103763660046123d5565b60008281526005602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b3480156103b157600080fd5b506102366103c03660046121eb565b610b7f565b3480156103d157600080fd5b506103ff6103e03660046123bc565b6000908152600560205260409020805460018201546002909201549092565b604080519384526020840192909252908201526060016101fe565b34801561042657600080fd5b506040805180820190915260018152603160f81b602082015261027b565b34801561045057600080fd5b5061023661045f366004612405565b610b96565b34801561047057600080fd5b5061023661047f366004612431565b610bbf565b34801561049057600080fd5b5061023661049f36600461227a565b610c11565b3480156104b057600080fd5b506064610236565b3480156104c457600080fd5b50600454610236565b3480156104d957600080fd5b506102646104e836600461239f565b610c1f565b3480156104f957600080fd5b506102366105083660046123bc565b610c8b565b34801561051957600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610236565b34801561054c57600080fd5b5061023661055b3660046123bc565b610d35565b34801561056c57600080fd5b5061023661057b3660046121eb565b610d64565b34801561058c57600080fd5b506002546001600160a01b03165b6040516001600160a01b0390911681526020016101fe565b3480156105be57600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e9082015261027b565b34801561060457600080fd5b506102367f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b34801561063857600080fd5b506102366106473660046121bf565b610d9e565b34801561065857600080fd5b506102366106673660046123bc565b610daa565b34801561067857600080fd5b5061059a7f000000000000000000000000000000000000000000000000000000000000000081565b60006106ab82610db5565b92915050565b6106b9610dda565b6001600160a01b0316336001600160a01b0316146107195760405162461bcd60e51b8152602060048201526018602482015277476f7665726e6f723a206f6e6c79476f7665726e616e636560401b60448201526064015b60405180910390fd5b61072281610df3565b50565b606060008054610734906129ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610760906129ce565b80156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b5050505050905090565b6000806107c686868686610d64565b905060046107d382610b74565b60078111156107e4576107e4612a19565b146108015760405162461bcd60e51b815260040161071090612788565b6002546040805163793d064960e11b815290516000926001600160a01b03169163f27a0c92916004808301926020929190829003018186803b15801561084657600080fd5b505afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e919061235c565b60025460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f427906108b8908a908a908a906000908b90600401612666565b60206040518083038186803b1580156108d057600080fd5b505afa1580156108e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610908919061235c565b6000838152600360205260408082209290925560025491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb091610953918b918b918b91908b9089906004016126b4565b600060405180830381600087803b15801561096d57600080fd5b505af1158015610981573d6000803e3d6000fd5b505050507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928282426109b39190612933565b604080519283526020830191909152015b60405180910390a15095945050505050565b6000806109e586868686610d64565b905060006109f282610b74565b90506004816007811115610a0857610a08612a19565b1480610a2557506005816007811115610a2357610a23612a19565b145b610a415760405162461bcd60e51b815260040161071090612788565b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a1610a9f8288888888610ebb565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff851660608201526000908190610b4c90610b449060800160405160208183030381529060405280519060200120610ecf565b868686610f1d565b9050610b6987828860405180602001604052806000815250610f3b565b979650505050505050565b60006106ab82611046565b6000610b8d85858585611123565b95945050505050565b600080339050610bb784828560405180602001604052806000815250610f3b565b949350505050565b600080339050610c0786828787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f3b92505050565b9695505050505050565b6000610b8d85858585611131565b610c27610dda565b6001600160a01b0316336001600160a01b031614610c825760405162461bcd60e51b8152602060048201526018602482015277476f7665726e6f723a206f6e6c79476f7665726e616e636560401b6044820152606401610710565b610722816111ef565b60025460008281526003602052604080822054905163d45c443560e01b81526004810191909152909182916001600160a01b039091169063d45c44359060240160206040518083038186803b158015610ce357600080fd5b505afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061235c565b905080600114610d2b5780610d2e565b60005b9392505050565b60008181526001602081815260408084208151928301909152909101546001600160401b031690819052610ad1565b600084848484604051602001610d7d949392919061261b565b60408051601f19818403018152919052805160209091012095945050505050565b6000610d2e8383611258565b60006106ab826112fd565b60006001600160e01b03198216636e665ced60e01b14806106ab57506106ab826113b0565b6000610dee6002546001600160a01b031690565b905090565b6064811115610e765760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72566f74657351756f72756d4672616374696f6e3a2071756f60448201527f72756d4e756d657261746f72206f7665722071756f72756d44656e6f6d696e616064820152623a37b960e91b608482015260a401610710565b600480549082905560408051828152602081018490527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a15050565b610ec885858585856113e5565b5050505050565b60006106ab610edc611459565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610f2e8787878761154c565b91509150610a9f81611639565b6000848152600160208190526040822090610f5587610b74565b6007811115610f6657610f66612a19565b14610fbf5760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610710565b604080516020810190915281546001600160401b031690819052600090610fe7908790610d9e565b9050610ff5878787846117f4565b856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48887848860405161103494939291906128b8565b60405180910390a29695505050505050565b60008061105283611973565b9050600481600781111561106857611068612a19565b146110735792915050565b6000838152600360205260409020548061108e575092915050565b600254604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f5299060240160206040518083038186803b1580156110d257600080fd5b505afa1580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110a919061233a565b15611119575060079392505050565b5060059392505050565b6000610b8d85858585611ad6565b60007f0000000000000000000000000000000000000000000000000000000000000000611163336106476001436129b7565b10156111e35760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a2070726f7060448201527f6f73657220766f7465732062656c6f772070726f706f73616c207468726573686064820152621bdb1960ea1b608482015260a401610710565b610b8d85858585611b88565b600254604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b604051630748d63560e31b81526001600160a01b038381166004830152602482018390526000917f000000000000000000000000000000000000000000000000000000000000000090911690633a46b1a89060440160206040518083038186803b1580156112c557600080fd5b505afa1580156112d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2e919061235c565b60006064600454604051632394e7a360e21b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638e539e8c9060240160206040518083038186803b15801561136457600080fd5b505afa158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c919061235c565b6113a69190612998565b6106ab9190612976565b60006001600160e01b0319821663bf26d89760e01b14806106ab57506301ffc9a760e01b6001600160e01b03198316146106ab565b60025460405163e38335e560e01b81526001600160a01b039091169063e38335e5903490611420908890889088906000908990600401612666565b6000604051808303818588803b15801561143957600080fd5b505af115801561144d573d6000803e3d6000fd5b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614156114a857507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156115835750600090506003611630565b8460ff16601b1415801561159b57508460ff16601c14155b156115ac5750600090506004611630565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611600573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661162957600060019250925050611630565b9150600090505b94509492505050565b600081600481111561164d5761164d612a19565b14156116565750565b600181600481111561166a5761166a612a19565b14156116b85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610710565b60028160048111156116cc576116cc612a19565b141561171a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610710565b600381600481111561172e5761172e612a19565b14156117875760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610710565b600481600481111561179b5761179b612a19565b14156107225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610710565b60008481526005602090815260408083206001600160a01b0387168452600381019092529091205460ff161561187c5760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72566f74696e6753696d706c653a20766f746520616c726561604482015266191e4818d85cdd60ca1b6064820152608401610710565b6001600160a01b03841660009081526003820160205260408120805460ff1916600117905560ff168360ff1614156118cd57818160000160008282546118c29190612933565b90915550610ec89050565b60ff8316600114156118ed57818160010160008282546118c29190612933565b60ff83166002141561190d57818160020160008282546118c29190612933565b60405162461bcd60e51b815260206004820152603560248201527f476f7665726e6f72566f74696e6753696d706c653a20696e76616c69642076616044820152746c756520666f7220656e756d20566f74655479706560581b6064820152608401610710565b6000818152600160208181526040808420815160a08101835281546001600160401b0390811660808301908152825283518086018552958301541685529283019390935260029092015460ff808216158015948401949094526101009091041615156060820152906119e85750600792915050565b8060600151156119fb5750600292915050565b805151436001600160401b039091161115611a195750600092915050565b602081015151436001600160401b039091161115611a3a5750600192915050565b611a478160200151611e02565b15611a8857611a5583611e31565b8015611a74575060008381526005602052604090208054600190910154115b611a7f576003610d2e565b60049392505050565b60405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610710565b50919050565b600080611ae586868686611e68565b60008181526003602052604090205490915015610b8d576002546000828152600360205260409081902054905163c4d252f560e01b81526001600160a01b039092169163c4d252f591611b3e9160040190815260200190565b600060405180830381600087803b158015611b5857600080fd5b505af1158015611b6c573d6000803e3d6000fd5b5050506000828152600360205260408120555095945050505050565b600080611b9e8686868680519060200120610d64565b90508451865114611bc15760405162461bcd60e51b815260040161071090612747565b8351865114611be25760405162461bcd60e51b815260040161071090612747565b6000865111611c335760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c00000000000000006044820152606401610710565b600081815260016020908152604091829020825191820190925281546001600160401b03169081905215611cb35760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610710565b6000611cde7f0000000000000000000000000000000000000000000000000000000000000000611f74565b611ce743611f74565b611cf1919061294b565b90506000611d1e7f0000000000000000000000000000000000000000000000000000000000000000611f74565b611d28908361294b565b835467ffffffffffffffff19166001600160401b038416178455905060018301805467ffffffffffffffff19166001600160401b0383161790557f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b03811115611da057611da0612a2f565b604051908082528060200260200182016040528015611dd357816020015b6060815260200190600190039081611dbe5790505b508c88888e604051611ded999897969594939291906127c9565b60405180910390a15091979650505050505050565b6000611e1782516001600160401b0316151590565b80156106ab57505051436001600160401b03909116111590565b600081815260056020526040812060028101546001820154611e539190612933565b611e5f61066785610aa9565b11159392505050565b600080611e7786868686610d64565b90506000611e8482610b74565b90506002816007811115611e9a57611e9a612a19565b14158015611eba57506006816007811115611eb757611eb7612a19565b14155b8015611ed857506007816007811115611ed557611ed5612a19565b14155b611f245760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f74206163746976650000006044820152606401610710565b60008281526001602052604090819020600201805461ff001916610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c906109c49084815260200190565b60006001600160401b03821115611fdc5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610710565b5090565b60006001600160401b03831115611ff957611ff9612a2f565b61200c601f8401601f19166020016128e0565b905082815283838301111561202057600080fd5b828260208301376000602084830101529392505050565b600082601f83011261204857600080fd5b8135602061205d61205883612910565b6128e0565b80838252828201915082860187848660051b890101111561207d57600080fd5b60005b858110156120a557813561209381612a45565b84529284019290840190600101612080565b5090979650505050505050565b600082601f8301126120c357600080fd5b813560206120d361205883612910565b80838252828201915082860187848660051b89010111156120f357600080fd5b60005b858110156120a55781356001600160401b0381111561211457600080fd5b8801603f81018a1361212557600080fd5b6121368a8783013560408401611fe0565b85525092840192908401906001016120f6565b600082601f83011261215a57600080fd5b8135602061216a61205883612910565b80838252828201915082860187848660051b890101111561218a57600080fd5b60005b858110156120a55781358452928401929084019060010161218d565b803560ff811681146121ba57600080fd5b919050565b600080604083850312156121d257600080fd5b82356121dd81612a45565b946020939093013593505050565b6000806000806080858703121561220157600080fd5b84356001600160401b038082111561221857600080fd5b61222488838901612037565b9550602087013591508082111561223a57600080fd5b61224688838901612149565b9450604087013591508082111561225c57600080fd5b50612269878288016120b2565b949793965093946060013593505050565b6000806000806080858703121561229057600080fd5b84356001600160401b03808211156122a757600080fd5b6122b388838901612037565b955060208701359150808211156122c957600080fd5b6122d588838901612149565b945060408701359150808211156122eb57600080fd5b6122f7888389016120b2565b9350606087013591508082111561230d57600080fd5b508501601f8101871361231f57600080fd5b61232e87823560208401611fe0565b91505092959194509250565b60006020828403121561234c57600080fd5b81518015158114610d2e57600080fd5b60006020828403121561236e57600080fd5b5051919050565b60006020828403121561238757600080fd5b81356001600160e01b031981168114610d2e57600080fd5b6000602082840312156123b157600080fd5b8135610d2e81612a45565b6000602082840312156123ce57600080fd5b5035919050565b600080604083850312156123e857600080fd5b8235915060208301356123fa81612a45565b809150509250929050565b6000806040838503121561241857600080fd5b82359150612428602084016121a9565b90509250929050565b6000806000806060858703121561244757600080fd5b84359350612457602086016121a9565b925060408501356001600160401b038082111561247357600080fd5b818701915087601f83011261248757600080fd5b81358181111561249657600080fd5b8860208285010111156124a857600080fd5b95989497505060200194505050565b600080600080600060a086880312156124cf57600080fd5b853594506124df602087016121a9565b93506124ed604087016121a9565b94979396509394606081013594506080013592915050565b600081518084526020808501945080840160005b8381101561253e5781516001600160a01b031687529582019590820190600101612519565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561259157828403895261257f8483516125ce565b98850198935090840190600101612567565b5091979650505050505050565b600081518084526020808501945080840160005b8381101561253e578151875295820195908201906001016125b2565b6000815180845260005b818110156125f4576020818501810151868301820152016125d8565b81811115612606576000602083870101525b50601f01601f19169290920160200192915050565b60808152600061262e6080830187612505565b8281036020840152612640818761259e565b905082810360408401526126548186612549565b91505082606083015295945050505050565b60a08152600061267960a0830188612505565b828103602084015261268b818861259e565b9050828103604084015261269f8187612549565b60608401959095525050608001529392505050565b60c0815260006126c760c0830189612505565b82810360208401526126d9818961259e565b905082810360408401526126ed8188612549565b60608401969096525050608081019290925260a0909101529392505050565b602081016008831061272e57634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000610d2e60208301846125ce565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b60006101208b8352602060018060a01b038c16818501528160408501526127f28285018c612505565b91508382036060850152612806828b61259e565b915083820360808501528189518084528284019150828160051b850101838c0160005b8381101561285757601f198784030185526128458383516125ce565b94860194925090850190600101612829565b505086810360a088015261286b818c612549565b94505050505061288660c08401876001600160401b03169052565b6001600160401b03851660e08401528281036101008401526128a881856125ce565b9c9b505050505050505050505050565b84815260ff84166020820152826040820152608060608201526000610c0760808301846125ce565b604051601f8201601f191681016001600160401b038111828210171561290857612908612a2f565b604052919050565b60006001600160401b0382111561292957612929612a2f565b5060051b60200190565b6000821982111561294657612946612a03565b500190565b60006001600160401b0380831681851680830382111561296d5761296d612a03565b01949350505050565b60008261299357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156129b2576129b2612a03565b500290565b6000828210156129c9576129c9612a03565b500390565b600181811c908216806129e257607f821691505b60208210811415611ad057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461072257600080fdfea2646970667358221220f251c040105a33df8eb65e62c7124dab7ab858a20aaedab5f3b80e367adb598164736f6c63430008070033"; diff --git a/libs/chains/src/eth/types/factories/GovernorProposalThreshold__factory.ts b/libs/chains/src/eth/types/factories/GovernorProposalThreshold__factory.ts deleted file mode 100644 index 427f5b72eda..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorProposalThreshold__factory.ts +++ /dev/null @@ -1,577 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { GovernorProposalThreshold } from "../GovernorProposalThreshold"; - -export class GovernorProposalThreshold__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorProposalThreshold { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorProposalThreshold; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/GovernorTimelockCompound__factory.ts b/libs/chains/src/eth/types/factories/GovernorTimelockCompound__factory.ts deleted file mode 100644 index f9695b4f207..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorTimelockCompound__factory.ts +++ /dev/null @@ -1,688 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { GovernorTimelockCompound } from "../GovernorTimelockCompound"; - -export class GovernorTimelockCompound__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorTimelockCompound { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorTimelockCompound; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldTimelock", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newTimelock", - type: "address", - }, - ], - name: "TimelockChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "__acceptAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalEta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "queue", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract ICompoundTimelock", - name: "newTimelock", - type: "address", - }, - ], - name: "updateTimelock", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/GovernorTimelockControl__factory.ts b/libs/chains/src/eth/types/factories/GovernorTimelockControl__factory.ts deleted file mode 100644 index fa71af5be8d..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorTimelockControl__factory.ts +++ /dev/null @@ -1,681 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { GovernorTimelockControl } from "../GovernorTimelockControl"; - -export class GovernorTimelockControl__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorTimelockControl { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorTimelockControl; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldTimelock", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newTimelock", - type: "address", - }, - ], - name: "TimelockChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalEta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "queue", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract TimelockController", - name: "newTimelock", - type: "address", - }, - ], - name: "updateTimelock", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/GovernorVotesComp__factory.ts b/libs/chains/src/eth/types/factories/GovernorVotesComp__factory.ts deleted file mode 100644 index 1e6267dfcaf..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorVotesComp__factory.ts +++ /dev/null @@ -1,573 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { GovernorVotesComp } from "../GovernorVotesComp"; - -export class GovernorVotesComp__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorVotesComp { - return new Contract(address, _abi, signerOrProvider) as GovernorVotesComp; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract ERC20VotesComp", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/GovernorVotesQuorumFraction__factory.ts b/libs/chains/src/eth/types/factories/GovernorVotesQuorumFraction__factory.ts deleted file mode 100644 index 8ced96d2771..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorVotesQuorumFraction__factory.ts +++ /dev/null @@ -1,635 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { GovernorVotesQuorumFraction } from "../GovernorVotesQuorumFraction"; - -export class GovernorVotesQuorumFraction__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorVotesQuorumFraction { - return new Contract( - address, - _abi, - signerOrProvider - ) as GovernorVotesQuorumFraction; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldQuorumNumerator", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newQuorumNumerator", - type: "uint256", - }, - ], - name: "QuorumNumeratorUpdated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "quorumDenominator", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "quorumNumerator", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract ERC20Votes", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newQuorumNumerator", - type: "uint256", - }, - ], - name: "updateQuorumNumerator", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/GovernorVotes__factory.ts b/libs/chains/src/eth/types/factories/GovernorVotes__factory.ts deleted file mode 100644 index c7d0771910e..00000000000 --- a/libs/chains/src/eth/types/factories/GovernorVotes__factory.ts +++ /dev/null @@ -1,573 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { GovernorVotes } from "../GovernorVotes"; - -export class GovernorVotes__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GovernorVotes { - return new Contract(address, _abi, signerOrProvider) as GovernorVotes; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "token", - outputs: [ - { - internalType: "contract ERC20Votes", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/Governor__factory.ts b/libs/chains/src/eth/types/factories/Governor__factory.ts deleted file mode 100644 index ffa130b2791..00000000000 --- a/libs/chains/src/eth/types/factories/Governor__factory.ts +++ /dev/null @@ -1,560 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { Governor } from "../Governor"; - -export class Governor__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Governor { - return new Contract(address, _abi, signerOrProvider) as Governor; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "BALLOT_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/GuildBank1__factory.ts b/libs/chains/src/eth/types/factories/GuildBank1__factory.ts deleted file mode 100644 index 130f83b4091..00000000000 --- a/libs/chains/src/eth/types/factories/GuildBank1__factory.ts +++ /dev/null @@ -1,199 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GuildBank1 } from "../GuildBank1"; - -export class GuildBank1__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - approvedTokenAddress: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - approvedTokenAddress, - overrides || {} - ) as Promise; - } - getDeployTransaction( - approvedTokenAddress: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(approvedTokenAddress, overrides || {}); - } - attach(address: string): GuildBank1 { - return super.attach(address) as GuildBank1; - } - connect(signer: Signer): GuildBank1__factory { - return super.connect(signer) as GuildBank1__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GuildBank1 { - return new Contract(address, _abi, signerOrProvider) as GuildBank1; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "approvedTokenAddress", - type: "address", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "receiver", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - constant: true, - inputs: [], - name: "approvedToken", - outputs: [ - { - internalType: "contract IERC20", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "isOwner", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [], - name: "renounceOwnership", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "receiver", - type: "address", - }, - { - internalType: "uint256", - name: "shares", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalShares", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506040516107503803806107508339818101604052602081101561003357600080fd5b505160006100486001600160e01b036100b716565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b0319166001600160a01b03929092169190911790556100bb565b3390565b610686806100ca6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638da5cb5b146100715780638f32d59b14610095578063b5c5f672146100b1578063bab46259146100e3578063f2fde38b146100eb575b600080fd5b61006f610111565b005b6100796101b4565b604080516001600160a01b039092168252519081900360200190f35b61009d6101c3565b604080519115158252519081900360200190f35b61009d600480360360608110156100c757600080fd5b506001600160a01b0381351690602081013590604001356101e7565b6100796103ac565b61006f6004803603602081101561010157600080fd5b50356001600160a01b03166103bb565b6101196101c3565b61016a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600080546001600160a01b03166101d8610420565b6001600160a01b031614905090565b60006101f16101c3565b610242576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600154604080516370a0823160e01b815230600482015290516000926102e09286926102d49289926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561029c57600080fd5b505afa1580156102b0573d6000803e3d6000fd5b505050506040513d60208110156102c657600080fd5b50519063ffffffff61042416565b9063ffffffff61048616565b6040805182815290519192506001600160a01b038716917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659181900360200190a26001546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561037757600080fd5b505af115801561038b573d6000803e3d6000fd5b505050506040513d60208110156103a157600080fd5b505195945050505050565b6001546001600160a01b031681565b6103c36101c3565b610414576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61041d816104c8565b50565b3390565b60008261043357506000610480565b8282028284828161044057fe5b041461047d5760405162461bcd60e51b81526004018080602001828103825260218152602001806106316021913960400191505060405180910390fd5b90505b92915050565b600061047d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610568565b6001600160a01b03811661050d5760405162461bcd60e51b815260040180806020018281038252602681526020018061060b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836105f45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105b95781810151838201526020016105a1565b50505050905090810190601f1680156105e65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161060057fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820ceb74c16f002cccdb9bcfc5028b8d1a622d0ac391e8e685d8b190eb57d48b25864736f6c63430005100032"; diff --git a/libs/chains/src/eth/types/factories/GuildBank2__factory.ts b/libs/chains/src/eth/types/factories/GuildBank2__factory.ts deleted file mode 100644 index 0424f9e113d..00000000000 --- a/libs/chains/src/eth/types/factories/GuildBank2__factory.ts +++ /dev/null @@ -1,209 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { GuildBank2 } from "../GuildBank2"; - -export class GuildBank2__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): GuildBank2 { - return super.attach(address) as GuildBank2; - } - connect(signer: Signer): GuildBank2__factory { - return super.connect(signer) as GuildBank2__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): GuildBank2 { - return new Contract(address, _abi, signerOrProvider) as GuildBank2; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "receiver", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "tokenAddress", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - constant: true, - inputs: [], - name: "isOwner", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [], - name: "renounceOwnership", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "receiver", - type: "address", - }, - { - internalType: "uint256", - name: "shares", - type: "uint256", - }, - { - internalType: "uint256", - name: "totalShares", - type: "uint256", - }, - { - internalType: "contract IERC20[]", - name: "_approvedTokens", - type: "address[]", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "contract IERC20", - name: "token", - type: "address", - }, - { - internalType: "address", - name: "receiver", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdrawToken", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405260006100176001600160e01b0361006616565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006a565b3390565b6108ae806100796000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301e3366714610067578063715018a6146100b1578063732c8f57146100bb5780638da5cb5b1461017a5780638f32d59b1461019e578063f2fde38b146101a6575b600080fd5b61009d6004803603606081101561007d57600080fd5b506001600160a01b038135811691602081013590911690604001356101cc565b604080519115158252519081900360200190f35b6100b96102f4565b005b61009d600480360360808110156100d157600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561010857600080fd5b82018360208201111561011a57600080fd5b8035906020019184602083028401116401000000008311171561013c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610385945050505050565b6101826105a2565b604080516001600160a01b039092168252519081900360200190f35b61009d6105b1565b6100b9600480360360208110156101bc57600080fd5b50356001600160a01b03166105d5565b60006101d66105b1565b610215576040805162461bcd60e51b8152602060048201819052602482015260008051602061085a833981519152604482015290519081900360640190fd5b836001600160a01b0316836001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040518082815260200191505060405180910390a3836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156102c057600080fd5b505af11580156102d4573d6000803e3d6000fd5b505050506040513d60208110156102ea57600080fd5b5051949350505050565b6102fc6105b1565b61033b576040805162461bcd60e51b8152602060048201819052602482015260008051602061085a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061038f6105b1565b6103ce576040805162461bcd60e51b8152602060048201819052602482015260008051602061085a833981519152604482015290519081900360640190fd5b81516000901561059857600061048f85610483888786815181106103ee57fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561044b57600080fd5b505afa15801561045f573d6000803e3d6000fd5b505050506040513d602081101561047557600080fd5b50519063ffffffff61062816565b9063ffffffff61068a16565b905083828151811061049d57fe5b60200260200101516001600160a01b0316876001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398836040518082815260200191505060405180910390a38382815181106104fb57fe5b60200260200101516001600160a01b031663a9059cbb88836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561056257600080fd5b505af1158015610576573d6000803e3d6000fd5b505050506040513d602081101561058c57600080fd5b5051925061059a915050565b505b949350505050565b6000546001600160a01b031690565b600080546001600160a01b03166105c66106cc565b6001600160a01b031614905090565b6105dd6105b1565b61061c576040805162461bcd60e51b8152602060048201819052602482015260008051602061085a833981519152604482015290519081900360640190fd5b610625816106d0565b50565b60008261063757506000610684565b8282028284828161064457fe5b04146106815760405162461bcd60e51b81526004018080602001828103825260218152602001806108396021913960400191505060405180910390fd5b90505b92915050565b600061068183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610770565b3390565b6001600160a01b0381166107155760405162461bcd60e51b81526004018080602001828103825260268152602001806108136026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836107fc5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107c15781810151838201526020016107a9565b50505050905090810190601f1680156107ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161080857fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a723158200f13284600f59d49e267071d600bc79ef632f712fa3e225a29f8eabc8629245c64736f6c63430005100032"; diff --git a/libs/chains/src/eth/types/factories/Helper__factory.ts b/libs/chains/src/eth/types/factories/Helper__factory.ts deleted file mode 100644 index 81b9d1750e1..00000000000 --- a/libs/chains/src/eth/types/factories/Helper__factory.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { Helper } from "../Helper"; - -export class Helper__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): Helper { - return super.attach(address) as Helper; - } - connect(signer: Signer): Helper__factory { - return super.connect(signer) as Helper__factory; - } - static connect(address: string, signerOrProvider: Signer | Provider): Helper { - return new Contract(address, _abi, signerOrProvider) as Helper; - } -} - -const _abi = [ - { - inputs: [], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, -]; - -const _bytecode = - "0x6080604052348015600f57600080fd5b50603e80601d6000396000f3fe6080604052600080fdfea265627a7a723158207b3d63b2b85adea3a30fee1ae99d3a71c79f05c14ce6335a85ccf4c3774e75bd64736f6c63430005100032"; diff --git a/libs/chains/src/eth/types/factories/IAaveGovernanceV2__factory.ts b/libs/chains/src/eth/types/factories/IAaveGovernanceV2__factory.ts deleted file mode 100644 index 8029f010565..00000000000 --- a/libs/chains/src/eth/types/factories/IAaveGovernanceV2__factory.ts +++ /dev/null @@ -1,682 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IAaveGovernanceV2 } from "../IAaveGovernanceV2"; - -export class IAaveGovernanceV2__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IAaveGovernanceV2 { - return new Contract(address, _abi, signerOrProvider) as IAaveGovernanceV2; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "executor", - type: "address", - }, - ], - name: "ExecutorAuthorized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "executor", - type: "address", - }, - ], - name: "ExecutorUnauthorized", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newStrategy", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "initiatorChange", - type: "address", - }, - ], - name: "GovernanceStrategyChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "creator", - type: "address", - }, - { - indexed: true, - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "strategy", - type: "address", - }, - { - indexed: false, - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "initiatorExecution", - type: "address", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "initiatorQueueing", - type: "address", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "support", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "votingPower", - type: "uint256", - }, - ], - name: "VoteEmitted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "newVotingDelay", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "initiatorChange", - type: "address", - }, - ], - name: "VotingDelayChanged", - type: "event", - }, - { - inputs: [], - name: "__abdicate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "executors", - type: "address[]", - }, - ], - name: "authorizeExecutors", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - ], - name: "create", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "getGovernanceStrategy", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getGuardian", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getProposalById", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "creator", - type: "address", - }, - { - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "address", - name: "strategy", - type: "address", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - ], - internalType: "struct IAaveGovernanceV2.ProposalWithoutVotes", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getProposalState", - outputs: [ - { - internalType: "enum IAaveGovernanceV2.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getProposalsCount", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getVoteOnProposal", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "support", - type: "bool", - }, - { - internalType: "uint248", - name: "votingPower", - type: "uint248", - }, - ], - internalType: "struct IAaveGovernanceV2.Vote", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getVotingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "executor", - type: "address", - }, - ], - name: "isExecutorAuthorized", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "governanceStrategy", - type: "address", - }, - ], - name: "setGovernanceStrategy", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "votingDelay", - type: "uint256", - }, - ], - name: "setVotingDelay", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - ], - name: "submitVote", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "bool", - name: "support", - type: "bool", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "submitVoteBySignature", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "executors", - type: "address[]", - }, - ], - name: "unauthorizeExecutors", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IAccessControl__factory.ts b/libs/chains/src/eth/types/factories/IAccessControl__factory.ts deleted file mode 100644 index e56fc32dff3..00000000000 --- a/libs/chains/src/eth/types/factories/IAccessControl__factory.ts +++ /dev/null @@ -1,193 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IAccessControl } from "../IAccessControl"; - -export class IAccessControl__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IAccessControl { - return new Contract(address, _abi, signerOrProvider) as IAccessControl; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - indexed: true, - internalType: "bytes32", - name: "previousAdminRole", - type: "bytes32", - }, - { - indexed: true, - internalType: "bytes32", - name: "newAdminRole", - type: "bytes32", - }, - ], - name: "RoleAdminChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "RoleGranted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "RoleRevoked", - type: "event", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - ], - name: "getRoleAdmin", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "grantRole", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasRole", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "renounceRole", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "revokeRole", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ICompoundTimelock__factory.ts b/libs/chains/src/eth/types/factories/ICompoundTimelock__factory.ts deleted file mode 100644 index 7596dff1bae..00000000000 --- a/libs/chains/src/eth/types/factories/ICompoundTimelock__factory.ts +++ /dev/null @@ -1,266 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { ICompoundTimelock } from "../ICompoundTimelock"; - -export class ICompoundTimelock__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ICompoundTimelock { - return new Contract(address, _abi, signerOrProvider) as ICompoundTimelock; - } -} - -const _abi = [ - { - inputs: [], - name: "GRACE_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAXIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MINIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "acceptAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "cancelTransaction", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "delay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "executeTransaction", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "pendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "queueTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "queuedTransactions", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "setDelay", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "setPendingAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ICuratedProjectFactory__factory.ts b/libs/chains/src/eth/types/factories/ICuratedProjectFactory__factory.ts deleted file mode 100644 index 04c82dfbd9f..00000000000 --- a/libs/chains/src/eth/types/factories/ICuratedProjectFactory__factory.ts +++ /dev/null @@ -1,434 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { ICuratedProjectFactory } from "../ICuratedProjectFactory"; - -export class ICuratedProjectFactory__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ICuratedProjectFactory { - return new Contract( - address, - _abi, - signerOrProvider - ) as ICuratedProjectFactory; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "action", - type: "string", - }, - { - indexed: false, - internalType: "bool", - name: "pauseState", - type: "bool", - }, - ], - name: "ActionPaused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldPauseGuardian", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newPauseGuardian", - type: "address", - }, - ], - name: "NewPauseGuardian", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "projectIndex", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "projectAddress", - type: "address", - }, - ], - name: "ProjectCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAddr", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAddr", - type: "address", - }, - ], - name: "ProjectImplChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "oldFee", - type: "uint8", - }, - { - indexed: false, - internalType: "uint8", - name: "newFee", - type: "uint8", - }, - ], - name: "ProtocolFeeChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAddr", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAddr", - type: "address", - }, - ], - name: "ProtocolFeeToChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAddr", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAddr", - type: "address", - }, - ], - name: "ProtocolTokenImplChange", - type: "event", - }, - { - inputs: [ - { - internalType: "address[]", - name: "_tokens", - type: "address[]", - }, - ], - name: "addAcceptedTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_name", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_ipfsHash", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "_url", - type: "bytes32", - }, - { - internalType: "address", - name: "_beneficiary", - type: "address", - }, - { - internalType: "address", - name: "_acceptedToken", - type: "address", - }, - { - internalType: "uint256", - name: "_threshold", - type: "uint256", - }, - { - internalType: "uint256", - name: "_deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "_curatorFee", - type: "uint8", - }, - ], - name: "createProject", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "isAcceptedToken", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "numProjects", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "projectImp", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "projectIndex", - type: "uint32", - }, - ], - name: "projects", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "protocolData", - outputs: [ - { - components: [ - { - internalType: "uint8", - name: "fee", - type: "uint8", - }, - { - internalType: "address", - name: "feeTo", - type: "address", - }, - { - internalType: "address", - name: "admin", - type: "address", - }, - { - internalType: "address", - name: "pauseGuardian", - type: "address", - }, - ], - internalType: "struct DataTypes.ProtocolData", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "setAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_cmnProjTokenImpl", - type: "address", - }, - ], - name: "setCmnProjTokenImpl", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_feeTo", - type: "address", - }, - ], - name: "setFeeTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newPauseGuardian", - type: "address", - }, - ], - name: "setPauseGuardian", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_projectImpl", - type: "address", - }, - ], - name: "setProjectImpl", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint8", - name: "_protocolFee", - type: "uint8", - }, - ], - name: "setProtocolFee", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ICuratedProject__factory.ts b/libs/chains/src/eth/types/factories/ICuratedProject__factory.ts deleted file mode 100644 index 96ebd8a1d29..00000000000 --- a/libs/chains/src/eth/types/factories/ICuratedProject__factory.ts +++ /dev/null @@ -1,597 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { ICuratedProject } from "../ICuratedProject"; - -export class ICuratedProject__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ICuratedProject { - return new Contract(address, _abi, signerOrProvider) as ICuratedProject; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Back", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Curate", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Failed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "name", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "oldData", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "newData", - type: "bytes32", - }, - ], - name: "ProjectDataChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "timestamp", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Succeeded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "withdrawalType", - type: "bytes32", - }, - ], - name: "Withdraw", - type: "event", - }, - { - inputs: [], - name: "bToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "back", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "backersWithdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "beneficiaryWithdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "cToken", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "curate", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "curatorFee", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "curatorsWithdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "funded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - components: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "url", - type: "bytes32", - }, - { - internalType: "address", - name: "creator", - type: "address", - }, - ], - internalType: "struct DataTypes.ProjectMetaData", - name: "_metaData", - type: "tuple", - }, - { - components: [ - { - internalType: "uint256", - name: "threshold", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "address", - name: "beneficiary", - type: "address", - }, - { - internalType: "address", - name: "acceptedToken", - type: "address", - }, - ], - internalType: "struct DataTypes.ProjectData", - name: "_projectData", - type: "tuple", - }, - { - components: [ - { - internalType: "uint8", - name: "fee", - type: "uint8", - }, - { - internalType: "address", - name: "feeTo", - type: "address", - }, - { - internalType: "address", - name: "admin", - type: "address", - }, - { - internalType: "address", - name: "pauseGuardian", - type: "address", - }, - ], - internalType: "struct DataTypes.ProtocolData", - name: "_protocolData", - type: "tuple", - }, - { - internalType: "uint8", - name: "_curatorFee", - type: "uint8", - }, - { - internalType: "address", - name: "_bToken", - type: "address", - }, - { - internalType: "address", - name: "_cToken", - type: "address", - }, - ], - name: "initialize", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "lockedWithdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "metaData", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "url", - type: "bytes32", - }, - { - internalType: "address", - name: "creator", - type: "address", - }, - ], - internalType: "struct DataTypes.ProjectMetaData", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "projectData", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "threshold", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "address", - name: "beneficiary", - type: "address", - }, - { - internalType: "address", - name: "acceptedToken", - type: "address", - }, - ], - internalType: "struct DataTypes.ProjectData", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "protocolData", - outputs: [ - { - components: [ - { - internalType: "uint8", - name: "fee", - type: "uint8", - }, - { - internalType: "address", - name: "feeTo", - type: "address", - }, - { - internalType: "address", - name: "admin", - type: "address", - }, - { - internalType: "address", - name: "pauseGuardian", - type: "address", - }, - ], - internalType: "struct DataTypes.ProtocolData", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_ipfsHash", - type: "bytes32", - }, - ], - name: "setIpfsHash", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_name", - type: "bytes32", - }, - ], - name: "setName", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_url", - type: "bytes32", - }, - ], - name: "setUrl", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "totalCuratorFunding", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalFunding", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "withdrawRemaining", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC1155MetadataURI__factory.ts b/libs/chains/src/eth/types/factories/IERC1155MetadataURI__factory.ts deleted file mode 100644 index 5db69692d73..00000000000 --- a/libs/chains/src/eth/types/factories/IERC1155MetadataURI__factory.ts +++ /dev/null @@ -1,332 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; - -import type { IERC1155MetadataURI } from "../IERC1155MetadataURI"; - -export class IERC1155MetadataURI__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC1155MetadataURI { - return new Contract(address, _abi, signerOrProvider) as IERC1155MetadataURI; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - ], - name: "TransferBatch", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "TransferSingle", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "value", - type: "string", - }, - { - indexed: true, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "URI", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "accounts", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - ], - name: "balanceOfBatch", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeBatchTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "uri", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC1155Receiver__factory.ts b/libs/chains/src/eth/types/factories/IERC1155Receiver__factory.ts deleted file mode 100644 index f47d085b9e9..00000000000 --- a/libs/chains/src/eth/types/factories/IERC1155Receiver__factory.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; - -import type { IERC1155Receiver } from "../IERC1155Receiver"; - -export class IERC1155Receiver__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC1155Receiver { - return new Contract(address, _abi, signerOrProvider) as IERC1155Receiver; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "onERC1155BatchReceived", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "onERC1155Received", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC1155__factory.ts b/libs/chains/src/eth/types/factories/IERC1155__factory.ts deleted file mode 100644 index daecfdfdefa..00000000000 --- a/libs/chains/src/eth/types/factories/IERC1155__factory.ts +++ /dev/null @@ -1,313 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; - -import type { IERC1155 } from "../IERC1155"; - -export class IERC1155__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC1155 { - return new Contract(address, _abi, signerOrProvider) as IERC1155; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - ], - name: "TransferBatch", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "TransferSingle", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "value", - type: "string", - }, - { - indexed: true, - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "URI", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "accounts", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - ], - name: "balanceOfBatch", - outputs: [ - { - internalType: "uint256[]", - name: "", - type: "uint256[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256[]", - name: "ids", - type: "uint256[]", - }, - { - internalType: "uint256[]", - name: "amounts", - type: "uint256[]", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeBatchTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC165__factory.ts b/libs/chains/src/eth/types/factories/IERC165__factory.ts deleted file mode 100644 index dfaf5fb6148..00000000000 --- a/libs/chains/src/eth/types/factories/IERC165__factory.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IERC165 } from "../IERC165"; - -export class IERC165__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC165 { - return new Contract(address, _abi, signerOrProvider) as IERC165; - } -} - -const _abi = [ - { - constant: true, - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC1820Registry__factory.ts b/libs/chains/src/eth/types/factories/IERC1820Registry__factory.ts deleted file mode 100644 index 064634affa7..00000000000 --- a/libs/chains/src/eth/types/factories/IERC1820Registry__factory.ts +++ /dev/null @@ -1,250 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IERC1820Registry } from "../IERC1820Registry"; - -export class IERC1820Registry__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC1820Registry { - return new Contract(address, _abi, signerOrProvider) as IERC1820Registry; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "implementer", - type: "address", - }, - ], - name: "InterfaceImplementerSet", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newManager", - type: "address", - }, - ], - name: "ManagerChanged", - type: "event", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, - ], - name: "getInterfaceImplementer", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getManager", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "implementsERC165Interface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "implementsERC165InterfaceNoCache", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "string", - name: "interfaceName", - type: "string", - }, - ], - name: "interfaceHash", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "pure", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes32", - name: "interfaceHash", - type: "bytes32", - }, - { - internalType: "address", - name: "implementer", - type: "address", - }, - ], - name: "setInterfaceImplementer", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "newManager", - type: "address", - }, - ], - name: "setManager", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "updateERC165Cache", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC20Permit__factory.ts b/libs/chains/src/eth/types/factories/IERC20Permit__factory.ts deleted file mode 100644 index ecad1174af2..00000000000 --- a/libs/chains/src/eth/types/factories/IERC20Permit__factory.ts +++ /dev/null @@ -1,96 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IERC20Permit } from "../IERC20Permit"; - -export class IERC20Permit__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC20Permit { - return new Contract(address, _abi, signerOrProvider) as IERC20Permit; - } -} - -const _abi = [ - { - inputs: [], - name: "DOMAIN_SEPARATOR", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC20__factory.ts b/libs/chains/src/eth/types/factories/IERC20__factory.ts deleted file mode 100644 index bf0acb35e25..00000000000 --- a/libs/chains/src/eth/types/factories/IERC20__factory.ts +++ /dev/null @@ -1,213 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IERC20 } from "../IERC20"; - -export class IERC20__factory { - static connect(address: string, signerOrProvider: Signer | Provider): IERC20 { - return new Contract(address, _abi, signerOrProvider) as IERC20; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "who", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC721Receiver__factory.ts b/libs/chains/src/eth/types/factories/IERC721Receiver__factory.ts deleted file mode 100644 index 504621f6e1e..00000000000 --- a/libs/chains/src/eth/types/factories/IERC721Receiver__factory.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IERC721Receiver } from "../IERC721Receiver"; - -export class IERC721Receiver__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC721Receiver { - return new Contract(address, _abi, signerOrProvider) as IERC721Receiver; - } -} - -const _abi = [ - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "onERC721Received", - outputs: [ - { - internalType: "bytes4", - name: "", - type: "bytes4", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC721__factory.ts b/libs/chains/src/eth/types/factories/IERC721__factory.ts deleted file mode 100644 index 7c6b2cb0220..00000000000 --- a/libs/chains/src/eth/types/factories/IERC721__factory.ts +++ /dev/null @@ -1,326 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IERC721 } from "../IERC721"; - -export class IERC721__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC721 { - return new Contract(address, _abi, signerOrProvider) as IERC721; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "approved", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: false, - internalType: "bool", - name: "approved", - type: "bool", - }, - ], - name: "ApprovalForAll", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "approve", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "getApproved", - outputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "isApprovedForAll", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "ownerOf", - outputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "safeTransferFrom", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "safeTransferFrom", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "bool", - name: "_approved", - type: "bool", - }, - ], - name: "setApprovalForAll", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC777Recipient__factory.ts b/libs/chains/src/eth/types/factories/IERC777Recipient__factory.ts deleted file mode 100644 index 6abf1d8f817..00000000000 --- a/libs/chains/src/eth/types/factories/IERC777Recipient__factory.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IERC777Recipient } from "../IERC777Recipient"; - -export class IERC777Recipient__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC777Recipient { - return new Contract(address, _abi, signerOrProvider) as IERC777Recipient; - } -} - -const _abi = [ - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "userData", - type: "bytes", - }, - { - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "tokensReceived", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC777Sender__factory.ts b/libs/chains/src/eth/types/factories/IERC777Sender__factory.ts deleted file mode 100644 index 82acb4416e8..00000000000 --- a/libs/chains/src/eth/types/factories/IERC777Sender__factory.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IERC777Sender } from "../IERC777Sender"; - -export class IERC777Sender__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC777Sender { - return new Contract(address, _abi, signerOrProvider) as IERC777Sender; - } -} - -const _abi = [ - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "userData", - type: "bytes", - }, - { - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "tokensToSend", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IERC777__factory.ts b/libs/chains/src/eth/types/factories/IERC777__factory.ts deleted file mode 100644 index 07f55bf1449..00000000000 --- a/libs/chains/src/eth/types/factories/IERC777__factory.ts +++ /dev/null @@ -1,438 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IERC777 } from "../IERC777"; - -export class IERC777__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IERC777 { - return new Contract(address, _abi, signerOrProvider) as IERC777; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "tokenHolder", - type: "address", - }, - ], - name: "AuthorizedOperator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "Burned", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "Minted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "tokenHolder", - type: "address", - }, - ], - name: "RevokedOperator", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "operator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "Sent", - type: "event", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "authorizeOperator", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "burn", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "defaultOperators", - outputs: [ - { - internalType: "address[]", - name: "", - type: "address[]", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "granularity", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - { - internalType: "address", - name: "tokenHolder", - type: "address", - }, - ], - name: "isOperatorFor", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "operatorBurn", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "bytes", - name: "operatorData", - type: "bytes", - }, - ], - name: "operatorSend", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "operator", - type: "address", - }, - ], - name: "revokeOperator", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "send", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IExecutorWithTimelock__factory.ts b/libs/chains/src/eth/types/factories/IExecutorWithTimelock__factory.ts deleted file mode 100644 index b9b64e6c3b7..00000000000 --- a/libs/chains/src/eth/types/factories/IExecutorWithTimelock__factory.ts +++ /dev/null @@ -1,470 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IExecutorWithTimelock } from "../IExecutorWithTimelock"; - -export class IExecutorWithTimelock__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IExecutorWithTimelock { - return new Contract( - address, - _abi, - signerOrProvider - ) as IExecutorWithTimelock; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "CancelledAction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - { - indexed: false, - internalType: "bytes", - name: "resultData", - type: "bytes", - }, - ], - name: "ExecutedAction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "delay", - type: "uint256", - }, - ], - name: "NewDelay", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "QueuedAction", - type: "event", - }, - { - inputs: [], - name: "GRACE_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MAXIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "MINIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "cancelTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "executeTransaction", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "getAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "getPendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "actionHash", - type: "bytes32", - }, - ], - name: "isActionQueued", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isProposalOverGracePeriod", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "bool", - name: "withDelegatecall", - type: "bool", - }, - ], - name: "queueTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IGovernancePowerDelegationToken__factory.ts b/libs/chains/src/eth/types/factories/IGovernancePowerDelegationToken__factory.ts deleted file mode 100644 index d5ed57b337e..00000000000 --- a/libs/chains/src/eth/types/factories/IGovernancePowerDelegationToken__factory.ts +++ /dev/null @@ -1,54 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IGovernancePowerDelegationToken } from "../IGovernancePowerDelegationToken"; - -export class IGovernancePowerDelegationToken__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IGovernancePowerDelegationToken { - return new Contract( - address, - _abi, - signerOrProvider - ) as IGovernancePowerDelegationToken; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - { - internalType: "enum IGovernancePowerDelegationToken.DelegationType", - name: "delegationType", - type: "uint8", - }, - ], - name: "getPowerAtBlock", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IGovernanceStrategy__factory.ts b/libs/chains/src/eth/types/factories/IGovernanceStrategy__factory.ts deleted file mode 100644 index a55815dc6fe..00000000000 --- a/libs/chains/src/eth/types/factories/IGovernanceStrategy__factory.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IGovernanceStrategy } from "../IGovernanceStrategy"; - -export class IGovernanceStrategy__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IGovernanceStrategy { - return new Contract(address, _abi, signerOrProvider) as IGovernanceStrategy; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPropositionPowerAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getTotalPropositionSupplyAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getTotalVotingSupplyAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotingPowerAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IGovernanceV2Helper__factory.ts b/libs/chains/src/eth/types/factories/IGovernanceV2Helper__factory.ts deleted file mode 100644 index 0a0e778453d..00000000000 --- a/libs/chains/src/eth/types/factories/IGovernanceV2Helper__factory.ts +++ /dev/null @@ -1,353 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer } from "ethers"; -import { Provider } from "@ethersproject/providers"; - -import type { IGovernanceV2Helper } from "../IGovernanceV2Helper"; - -export class IGovernanceV2Helper__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IGovernanceV2Helper { - return new Contract(address, _abi, signerOrProvider) as IGovernanceV2Helper; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - ], - name: "getProposal", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "totalVotingSupply", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumQuorum", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumDiff", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTimeWithGracePeriod", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalCreated", - type: "uint256", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "creator", - type: "address", - }, - { - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "address", - name: "strategy", - type: "address", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - { - internalType: "enum IAaveGovernanceV2.ProposalState", - name: "proposalState", - type: "uint8", - }, - ], - internalType: "struct IGovernanceV2Helper.ProposalStats", - name: "proposalStats", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "skip", - type: "uint256", - }, - { - internalType: "uint256", - name: "limit", - type: "uint256", - }, - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - ], - name: "getProposals", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "totalVotingSupply", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumQuorum", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumDiff", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTimeWithGracePeriod", - type: "uint256", - }, - { - internalType: "uint256", - name: "proposalCreated", - type: "uint256", - }, - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "creator", - type: "address", - }, - { - internalType: "contract IExecutorWithTimelock", - name: "executor", - type: "address", - }, - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bool[]", - name: "withDelegatecalls", - type: "bool[]", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "executionTime", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "address", - name: "strategy", - type: "address", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - { - internalType: "enum IAaveGovernanceV2.ProposalState", - name: "proposalState", - type: "uint8", - }, - ], - internalType: "struct IGovernanceV2Helper.ProposalStats[]", - name: "proposalsStats", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "address[]", - name: "tokens", - type: "address[]", - }, - ], - name: "getTokensPower", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "votingPower", - type: "uint256", - }, - { - internalType: "address", - name: "delegatedAddressVotingPower", - type: "address", - }, - { - internalType: "uint256", - name: "propositionPower", - type: "uint256", - }, - { - internalType: "address", - name: "delegatedAddressPropositionPower", - type: "address", - }, - ], - internalType: "struct IGovernanceV2Helper.Power[]", - name: "power", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IGovernorCompatibilityBravo__factory.ts b/libs/chains/src/eth/types/factories/IGovernorCompatibilityBravo__factory.ts deleted file mode 100644 index 173bc1df3b9..00000000000 --- a/libs/chains/src/eth/types/factories/IGovernorCompatibilityBravo__factory.ts +++ /dev/null @@ -1,794 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IGovernorCompatibilityBravo } from "../IGovernorCompatibilityBravo"; - -export class IGovernorCompatibilityBravo__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IGovernorCompatibilityBravo { - return new Contract( - address, - _abi, - signerOrProvider - ) as IGovernorCompatibilityBravo; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "cancel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "execute", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "getActions", - outputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "voter", - type: "address", - }, - ], - name: "getReceipt", - outputs: [ - { - components: [ - { - internalType: "bool", - name: "hasVoted", - type: "bool", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - internalType: "struct IGovernorCompatibilityBravo.Receipt", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "proposalThreshold", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "proposals", - outputs: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "address", - name: "proposer", - type: "address", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - { - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - internalType: "uint256", - name: "forVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "againstVotes", - type: "uint256", - }, - { - internalType: "uint256", - name: "abstainVotes", - type: "uint256", - }, - { - internalType: "bool", - name: "canceled", - type: "bool", - }, - { - internalType: "bool", - name: "executed", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "queue", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "quorumVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IGovernorTimelock__factory.ts b/libs/chains/src/eth/types/factories/IGovernorTimelock__factory.ts deleted file mode 100644 index 3abc75227b1..00000000000 --- a/libs/chains/src/eth/types/factories/IGovernorTimelock__factory.ts +++ /dev/null @@ -1,632 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IGovernorTimelock } from "../IGovernorTimelock"; - -export class IGovernorTimelock__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IGovernorTimelock { - return new Contract(address, _abi, signerOrProvider) as IGovernorTimelock; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ProposalQueued", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalEta", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "queue", - outputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "timelock", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IGovernor__factory.ts b/libs/chains/src/eth/types/factories/IGovernor__factory.ts deleted file mode 100644 index 39ce6128061..00000000000 --- a/libs/chains/src/eth/types/factories/IGovernor__factory.ts +++ /dev/null @@ -1,547 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IGovernor } from "../IGovernor"; - -export class IGovernor__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IGovernor { - return new Contract(address, _abi, signerOrProvider) as IGovernor; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalCanceled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "proposer", - type: "address", - }, - { - indexed: false, - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - indexed: false, - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - indexed: false, - internalType: "string[]", - name: "signatures", - type: "string[]", - }, - { - indexed: false, - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - indexed: false, - internalType: "uint256", - name: "startBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "endBlock", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "ProposalCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "ProposalExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "voter", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - indexed: false, - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - indexed: false, - internalType: "uint256", - name: "weight", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "VoteCast", - type: "event", - }, - { - inputs: [], - name: "COUNTING_MODE", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - ], - name: "castVote", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - ], - name: "castVoteBySig", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "uint8", - name: "support", - type: "uint8", - }, - { - internalType: "string", - name: "reason", - type: "string", - }, - ], - name: "castVoteWithReason", - outputs: [ - { - internalType: "uint256", - name: "balance", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "execute", - outputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotes", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasVoted", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "descriptionHash", - type: "bytes32", - }, - ], - name: "hashProposal", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalDeadline", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "proposalSnapshot", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "calldatas", - type: "bytes[]", - }, - { - internalType: "string", - name: "description", - type: "string", - }, - ], - name: "propose", - outputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "quorum", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "state", - outputs: [ - { - internalType: "enum IGovernor.ProposalState", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "version", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingDelay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "votingPeriod", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IProjectBaseFactory__factory.ts b/libs/chains/src/eth/types/factories/IProjectBaseFactory__factory.ts deleted file mode 100644 index 0c6daaa4ead..00000000000 --- a/libs/chains/src/eth/types/factories/IProjectBaseFactory__factory.ts +++ /dev/null @@ -1,363 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IProjectBaseFactory } from "../IProjectBaseFactory"; - -export class IProjectBaseFactory__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IProjectBaseFactory { - return new Contract(address, _abi, signerOrProvider) as IProjectBaseFactory; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "string", - name: "action", - type: "string", - }, - { - indexed: false, - internalType: "bool", - name: "pauseState", - type: "bool", - }, - ], - name: "ActionPaused", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldPauseGuardian", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newPauseGuardian", - type: "address", - }, - ], - name: "NewPauseGuardian", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "projectIndex", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "projectAddress", - type: "address", - }, - ], - name: "ProjectCreated", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAddr", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAddr", - type: "address", - }, - ], - name: "ProjectImplChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint8", - name: "oldFee", - type: "uint8", - }, - { - indexed: false, - internalType: "uint8", - name: "newFee", - type: "uint8", - }, - ], - name: "ProtocolFeeChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAddr", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAddr", - type: "address", - }, - ], - name: "ProtocolFeeToChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "oldAddr", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAddr", - type: "address", - }, - ], - name: "ProtocolTokenImplChange", - type: "event", - }, - { - inputs: [ - { - internalType: "address[]", - name: "_tokens", - type: "address[]", - }, - ], - name: "addAcceptedTokens", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "token", - type: "address", - }, - ], - name: "isAcceptedToken", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "numProjects", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "projectImp", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint32", - name: "projectIndex", - type: "uint32", - }, - ], - name: "projects", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "protocolData", - outputs: [ - { - components: [ - { - internalType: "uint8", - name: "fee", - type: "uint8", - }, - { - internalType: "address", - name: "feeTo", - type: "address", - }, - { - internalType: "address", - name: "admin", - type: "address", - }, - { - internalType: "address", - name: "pauseGuardian", - type: "address", - }, - ], - internalType: "struct DataTypes.ProtocolData", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "setAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_feeTo", - type: "address", - }, - ], - name: "setFeeTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newPauseGuardian", - type: "address", - }, - ], - name: "setPauseGuardian", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_projectImpl", - type: "address", - }, - ], - name: "setProjectImpl", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint8", - name: "_protocolFee", - type: "uint8", - }, - ], - name: "setProtocolFee", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IProjectBase__factory.ts b/libs/chains/src/eth/types/factories/IProjectBase__factory.ts deleted file mode 100644 index 8b4be23b519..00000000000 --- a/libs/chains/src/eth/types/factories/IProjectBase__factory.ts +++ /dev/null @@ -1,360 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IProjectBase } from "../IProjectBase"; - -export class IProjectBase__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IProjectBase { - return new Contract(address, _abi, signerOrProvider) as IProjectBase; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Back", - type: "event", - }, - { - anonymous: false, - inputs: [], - name: "Failed", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes32", - name: "name", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "oldData", - type: "bytes32", - }, - { - indexed: false, - internalType: "bytes32", - name: "newData", - type: "bytes32", - }, - ], - name: "ProjectDataChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "timestamp", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Succeeded", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "token", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes32", - name: "withdrawalType", - type: "bytes32", - }, - ], - name: "Withdraw", - type: "event", - }, - { - inputs: [ - { - internalType: "uint256", - name: "_amount", - type: "uint256", - }, - ], - name: "back", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "backersWithdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "beneficiaryWithdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "funded", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "lockedWithdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "metaData", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "id", - type: "uint256", - }, - { - internalType: "bytes32", - name: "name", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "ipfsHash", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "url", - type: "bytes32", - }, - { - internalType: "address", - name: "creator", - type: "address", - }, - ], - internalType: "struct DataTypes.ProjectMetaData", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "projectData", - outputs: [ - { - components: [ - { - internalType: "uint256", - name: "threshold", - type: "uint256", - }, - { - internalType: "uint256", - name: "deadline", - type: "uint256", - }, - { - internalType: "address", - name: "beneficiary", - type: "address", - }, - { - internalType: "address", - name: "acceptedToken", - type: "address", - }, - ], - internalType: "struct DataTypes.ProjectData", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "protocolData", - outputs: [ - { - components: [ - { - internalType: "uint8", - name: "fee", - type: "uint8", - }, - { - internalType: "address", - name: "feeTo", - type: "address", - }, - { - internalType: "address", - name: "admin", - type: "address", - }, - { - internalType: "address", - name: "pauseGuardian", - type: "address", - }, - ], - internalType: "struct DataTypes.ProtocolData", - name: "", - type: "tuple", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_ipfsHash", - type: "bytes32", - }, - ], - name: "setIpfsHash", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_name", - type: "bytes32", - }, - ], - name: "setName", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "_url", - type: "bytes32", - }, - ], - name: "setUrl", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "totalFunding", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IProposalValidator__factory.ts b/libs/chains/src/eth/types/factories/IProposalValidator__factory.ts deleted file mode 100644 index be5fe5655e9..00000000000 --- a/libs/chains/src/eth/types/factories/IProposalValidator__factory.ts +++ /dev/null @@ -1,288 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IProposalValidator } from "../IProposalValidator"; - -export class IProposalValidator__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IProposalValidator { - return new Contract(address, _abi, signerOrProvider) as IProposalValidator; - } -} - -const _abi = [ - { - inputs: [], - name: "MINIMUM_QUORUM", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_HUNDRED_WITH_PRECISION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PROPOSITION_THRESHOLD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "VOTE_DIFFERENTIAL", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "VOTING_DURATION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getMinimumPropositionPowerNeeded", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "votingSupply", - type: "uint256", - }, - ], - name: "getMinimumVotingPowerNeeded", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isProposalPassed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "isPropositionPowerEnough", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isQuorumValid", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isVoteDifferentialValid", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "validateCreatorOfProposal", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "validateProposalCancellation", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ITransferHook__factory.ts b/libs/chains/src/eth/types/factories/ITransferHook__factory.ts deleted file mode 100644 index 3e87b370941..00000000000 --- a/libs/chains/src/eth/types/factories/ITransferHook__factory.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { ITransferHook } from "../ITransferHook"; - -export class ITransferHook__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ITransferHook { - return new Contract(address, _abi, signerOrProvider) as ITransferHook; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "onTransfer", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/IVotingStrategy__factory.ts b/libs/chains/src/eth/types/factories/IVotingStrategy__factory.ts deleted file mode 100644 index 25fbbdafd9d..00000000000 --- a/libs/chains/src/eth/types/factories/IVotingStrategy__factory.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { IVotingStrategy } from "../IVotingStrategy"; - -export class IVotingStrategy__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): IVotingStrategy { - return new Contract(address, _abi, signerOrProvider) as IVotingStrategy; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getVotingPowerAt", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/InitializableAdminUpgradeabilityProxy__factory.ts b/libs/chains/src/eth/types/factories/InitializableAdminUpgradeabilityProxy__factory.ts deleted file mode 100644 index 5b1eb3f60ad..00000000000 --- a/libs/chains/src/eth/types/factories/InitializableAdminUpgradeabilityProxy__factory.ts +++ /dev/null @@ -1,199 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { InitializableAdminUpgradeabilityProxy } from "../InitializableAdminUpgradeabilityProxy"; - -export class InitializableAdminUpgradeabilityProxy__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): InitializableAdminUpgradeabilityProxy { - return super.attach(address) as InitializableAdminUpgradeabilityProxy; - } - connect(signer: Signer): InitializableAdminUpgradeabilityProxy__factory { - return super.connect( - signer - ) as InitializableAdminUpgradeabilityProxy__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): InitializableAdminUpgradeabilityProxy { - return new Contract( - address, - _abi, - signerOrProvider - ) as InitializableAdminUpgradeabilityProxy; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "previousAdmin", - type: "address", - }, - { - indexed: false, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "AdminChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "changeAdmin", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "implementation", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_logic", - type: "address", - }, - { - internalType: "address", - name: "_admin", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_logic", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - ], - name: "upgradeTo", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "newImplementation", - type: "address", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "upgradeToAndCall", - outputs: [], - stateMutability: "payable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610905806100206000396000f3fe6080604052600436106100705760003560e01c80638f2839701161004e5780638f2839701461015e578063cf7a1d7714610191578063d1f5789414610250578063f851a4401461030657610070565b80633659cfe61461007a5780634f1ef286146100ad5780635c60da1b1461012d575b61007861031b565b005b34801561008657600080fd5b506100786004803603602081101561009d57600080fd5b50356001600160a01b0316610335565b610078600480360360408110156100c357600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100ee57600080fd5b82018360208201111561010057600080fd5b8035906020019184600183028401116401000000008311171561012257600080fd5b50909250905061036f565b34801561013957600080fd5b5061014261041c565b604080516001600160a01b039092168252519081900360200190f35b34801561016a57600080fd5b506100786004803603602081101561018157600080fd5b50356001600160a01b0316610459565b610078600480360360608110156101a757600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156101db57600080fd5b8201836020820111156101ed57600080fd5b8035906020019184600183028401116401000000008311171561020f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610513945050505050565b6100786004803603604081101561026657600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561029157600080fd5b8201836020820111156102a357600080fd5b803590602001918460018302840111640100000000831117156102c557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610543945050505050565b34801561031257600080fd5b50610142610623565b61032361064e565b61033361032e610656565b61067b565b565b61033d61069f565b6001600160a01b0316336001600160a01b031614156103645761035f816106c4565b61036c565b61036c61031b565b50565b61037761069f565b6001600160a01b0316336001600160a01b0316141561040f57610399836106c4565b6000836001600160a01b031683836040518083838082843760405192019450600093509091505080830381855af49150503d80600081146103f6576040519150601f19603f3d011682016040523d82523d6000602084013e6103fb565b606091505b505090508061040957600080fd5b50610417565b61041761031b565b505050565b600061042661069f565b6001600160a01b0316336001600160a01b0316141561044e57610447610656565b9050610456565b61045661031b565b90565b61046161069f565b6001600160a01b0316336001600160a01b03161415610364576001600160a01b0381166104bf5760405162461bcd60e51b815260040180806020018281038252603681526020018061085f6036913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104e861069f565b604080516001600160a01b03928316815291841660208301528051918290030190a161035f81610704565b600061051d610656565b6001600160a01b03161461053057600080fd5b61053a8382610543565b61041782610704565b600061054d610656565b6001600160a01b03161461056057600080fd5b61056982610728565b80511561061f576000826001600160a01b0316826040518082805190602001908083835b602083106105ac5780518252601f19909201916020918201910161058d565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461060c576040519150601f19603f3d011682016040523d82523d6000602084013e610611565b606091505b505090508061041757600080fd5b5050565b600061062d61069f565b6001600160a01b0316336001600160a01b0316141561044e5761044761069f565b610333610790565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561069a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6106cd81610728565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b610731816107f0565b61076c5760405162461bcd60e51b815260040180806020018281038252603b815260200180610895603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b61079861069f565b6001600160a01b0316336001600160a01b031614156107e85760405162461bcd60e51b815260040180806020018281038252603281526020018061082d6032913960400191505060405180910390fd5b610333610333565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061082457508115155b94935050505056fe43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f206164647265737343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a264697066735822122000743fbeee8fef8cafa002a430c584e4459bc71f7c3c1d8eeb0afe23f30548a864736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/InitializableUpgradeabilityProxy__factory.ts b/libs/chains/src/eth/types/factories/InitializableUpgradeabilityProxy__factory.ts deleted file mode 100644 index b908dc289e3..00000000000 --- a/libs/chains/src/eth/types/factories/InitializableUpgradeabilityProxy__factory.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { InitializableUpgradeabilityProxy } from "../InitializableUpgradeabilityProxy"; - -export class InitializableUpgradeabilityProxy__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - overrides || {} - ) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): InitializableUpgradeabilityProxy { - return super.attach(address) as InitializableUpgradeabilityProxy; - } - connect(signer: Signer): InitializableUpgradeabilityProxy__factory { - return super.connect(signer) as InitializableUpgradeabilityProxy__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): InitializableUpgradeabilityProxy { - return new Contract( - address, - _abi, - signerOrProvider - ) as InitializableUpgradeabilityProxy; - } -} - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - stateMutability: "payable", - type: "fallback", - }, - { - inputs: [ - { - internalType: "address", - name: "_logic", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - name: "initialize", - outputs: [], - stateMutability: "payable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50610338806100206000396000f3fe60806040526004361061001e5760003560e01c8063d1f5789414610028575b6100266100de565b005b6100266004803603604081101561003e57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561006957600080fd5b82018360208201111561007b57600080fd5b8035906020019184600183028401116401000000008311171561009d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506100f8945050505050565b6100e66100f6565b6100f66100f16101da565b6101ff565b565b60006101026101da565b6001600160a01b03161461011557600080fd5b61011e82610223565b8051156101d6576000826001600160a01b0316826040518082805190602001908083835b602083106101615780518252601f199092019160209182019101610142565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101c1576040519150601f19603f3d011682016040523d82523d6000602084013e6101c6565b606091505b50509050806101d457600080fd5b505b5050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561021e573d6000f35b3d6000fd5b61022c8161028b565b6102675760405162461bcd60e51b815260040180806020018281038252603b8152602001806102c8603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906102bf57508115155b94935050505056fe43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a2646970667358221220aa32735aa664625d1e2d81fcbe14e56195c0226346644d92aefb3ac6c39971e164736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/MPondInterface__factory.ts b/libs/chains/src/eth/types/factories/MPondInterface__factory.ts deleted file mode 100644 index 6588263b42f..00000000000 --- a/libs/chains/src/eth/types/factories/MPondInterface__factory.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { MPondInterface } from "../MPondInterface"; - -export class MPondInterface__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): MPondInterface { - return new Contract(address, _abi, signerOrProvider) as MPondInterface; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPriorVotes", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/MPond__factory.ts b/libs/chains/src/eth/types/factories/MPond__factory.ts deleted file mode 100644 index d3170e6c997..00000000000 --- a/libs/chains/src/eth/types/factories/MPond__factory.ts +++ /dev/null @@ -1,742 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { MPond } from "../MPond"; - -export class MPond__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - account: string, - bridge: string, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(account, bridge, overrides || {}) as Promise; - } - getDeployTransaction( - account: string, - bridge: string, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(account, bridge, overrides || {}); - } - attach(address: string): MPond { - return super.attach(address) as MPond; - } - connect(signer: Signer): MPond__factory { - return super.connect(signer) as MPond__factory; - } - static connect(address: string, signerOrProvider: Signer | Provider): MPond { - return new Contract(address, _abi, signerOrProvider) as MPond; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "bridge", - type: "address", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegator", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "fromDelegate", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "toDelegate", - type: "address", - }, - ], - name: "DelegateChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "delegate", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "previousBalance", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newBalance", - type: "uint256", - }, - ], - name: "DelegateVotesChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - inputs: [], - name: "DELEGATION_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "DOMAIN_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "UNDELEGATION_TYPEHASH", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "addWhiteListAddress", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "rawAmount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "bridgeSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - name: "checkpoints", - outputs: [ - { - internalType: "uint32", - name: "fromBlock", - type: "uint32", - }, - { - internalType: "uint96", - name: "votes", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "decimals", - outputs: [ - { - internalType: "uint8", - name: "", - type: "uint8", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint96", - name: "amount", - type: "uint96", - }, - ], - name: "delegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - { - internalType: "uint96", - name: "amount", - type: "uint96", - }, - ], - name: "delegateBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "delegates", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "enableAllTranfers", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "enableAllTransfers", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "getCurrentVotes", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getPriorVotes", - outputs: [ - { - internalType: "uint96", - name: "", - type: "uint96", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "isWhiteListed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "_address1", - type: "address", - }, - { - internalType: "address", - name: "_address2", - type: "address", - }, - ], - name: "isWhiteListedTransfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "name", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "nonces", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "numCheckpoints", - outputs: [ - { - internalType: "uint32", - name: "", - type: "uint32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "symbol", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "dst", - type: "address", - }, - { - internalType: "uint256", - name: "rawAmount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "src", - type: "address", - }, - { - internalType: "address", - name: "dst", - type: "address", - }, - { - internalType: "uint256", - name: "rawAmount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint96", - name: "amount", - type: "uint96", - }, - ], - name: "undelegate", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "delegatee", - type: "address", - }, - { - internalType: "uint256", - name: "nonce", - type: "uint256", - }, - { - internalType: "uint256", - name: "expiry", - type: "uint256", - }, - { - internalType: "uint8", - name: "v", - type: "uint8", - }, - { - internalType: "bytes32", - name: "r", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "s", - type: "bytes32", - }, - { - internalType: "uint96", - name: "amount", - type: "uint96", - }, - ], - name: "undelegateBySig", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x60806040526008805460ff191660011790553480156200001e57600080fd5b506040516200273238038062002732833981016040819052620000419162000229565b806001600160a01b0316826001600160a01b031614156200007f5760405162461bcd60e51b81526004016200007690620002bd565b60405180910390fd5b6001600160a01b0381166000818152600160208181526040808420805469017b7883c069166000006001600160601b031991821681179092556002845282862086805284528286208054909116821790558585526007909252808420805460ff19169093179092559051600080516020620027128339815191529162000105916200030e565b60405180910390a360006200014969021e19e0c9bab240000069017b7883c069166000006040518060600160405280602d8152602001620026e5602d9139620001e7565b6001600160a01b038416600081815260016020818152604080842080546001600160601b0388166001600160601b031991821681179092556002845282862086805284528286208054909116821790558585526007909252808420805460ff19169093179092559051939450919290916000805160206200271283398151915291620001d691906200030e565b60405180910390a350505062000330565b6000836001600160601b0316836001600160601b031611158290620002215760405162461bcd60e51b815260040162000076919062000267565b505050900390565b600080604083850312156200023c578182fd5b8251620002498162000317565b60208401519092506200025c8162000317565b809150509250929050565b6000602080835283518082850152825b81811015620002955785810183015185820160400152820162000277565b81811115620002a75783604083870101525b50601f01601f1916929092016040019392505050565b60208082526031908201527f42726964676520616e64206163636f75746e2073686f756c64206e6f74206265604082015270207468652073616d65206164647265737360781b606082015260800190565b90815260200190565b6001600160a01b03811681146200032d57600080fd5b50565b6123a580620003406000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637ecebe0011610104578063b9371343116100a2578063e584324211610071578063e5843242146103a5578063e7a324dc146103b8578063f1127ed8146103c0578063f851a440146103e1576101cf565b8063b93713431461036f578063c43ff0c814610377578063dd62ed3e1461037f578063e1032b8314610392576101cf565b806395d89b41116100de57806395d89b411461032e578063a65835da14610336578063a9059cbb14610349578063b4b5ea571461035c576101cf565b80637ecebe00146102f55780638164c309146103085780638b41166c1461031b576101cf565b8063313ce567116101715780636f9170f61161014b5780636f9170f61461028f5780636fcfff45146102a257806370a08231146102c2578063782d6fe1146102d5576101cf565b8063313ce5671461025f57806367cb1601146102745780636ab5cc381461027c576101cf565b806316aeac20116101ad57806316aeac201461022757806318160ddd1461023c57806320606b701461024457806323b872dd1461024c576101cf565b806302cb3a88146101d457806306fdde03146101e9578063095ea7b314610207575b600080fd5b6101e76101e2366004611ae0565b6103f6565b005b6101f1610617565b6040516101fe9190611c76565b60405180910390f35b61021a610215366004611ab6565b61064a565b6040516101fe9190611beb565b61022f610707565b6040516101fe9190611bf6565b61022f61072b565b61022f610739565b61021a61025a366004611a76565b61075d565b6102676108c6565b6040516101fe9190612148565b61021a6108cb565b61021a61028a366004611a42565b61090c565b61021a61029d366004611a27565b61095f565b6102b56102b0366004611a27565b610974565b6040516101fe9190612118565b61022f6102d0366004611a27565b61098c565b6102e86102e3366004611ab6565b6109b0565b6040516101fe9190612156565b61022f610303366004611a27565b610bbe565b61021a610316366004611a27565b610bd0565b6101e7610329366004611b91565b610c26565b6101f1610c35565b6101e7610344366004611ae0565b610c56565b61021a610357366004611ab6565b610e61565b6102e861036a366004611a27565b610ec4565b61022f610f34565b61021a610f42565b61022f61038d366004611a42565b610f4b565b6101e76103a0366004611b91565b610f7d565b6102e86103b3366004611a42565b610f88565b61022f610fae565b6103d36103ce366004611b52565b610fd2565b6040516101fe929190612129565b6103e9611007565b6040516101fe9190611bd7565b60408051808201909152601781527626b0b93634b71023b7bb32b93730b731b2902a37b5b2b760491b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f59269cbca1208251d90fa95662317aad0c2a0b4ed01fd7809a1a8c310572a7d6610471611016565b306040516020016104859493929190611c34565b60405160208183030381529060405280519060200120905060007f3001685306e2a9f6f760b7c5c2d24b3cda3fd7534488f2cedcaf2728fb7d99d6898989866040516020016104d8959493929190611bff565b60405160208183030381529060405280519060200120905060008282604051602001610505929190611bbc565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516105429493929190611c58565b6020604051602081039080840390855afa158015610564573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166105a05760405162461bcd60e51b8152600401610597906120d0565b60405180910390fd5b6001600160a01b03811660009081526005602052604090208054600181019091558a146105df5760405162461bcd60e51b815260040161059790611f0f565b884211156105ff5760405162461bcd60e51b815260040161059790612088565b61060a818c8761101a565b5050505050505050505050565b6040518060400160405280601781526020017626b0b93634b71023b7bb32b93730b731b2902a37b5b2b760491b81525081565b6000806000198314156106605750600019610685565b610682836040518060600160405280602581526020016121d360259139611194565b90505b336000818152602081815260408083206001600160a01b03891680855292529182902080546001600160601b0319166001600160601b03861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106f3908590612156565b60405180910390a360019150505b92915050565b7f3001685306e2a9f6f760b7c5c2d24b3cda3fd7534488f2cedcaf2728fb7d99d681565b69021e19e0c9bab240000081565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610769338461090c565b6107855760405162461bcd60e51b815260040161059790611fe7565b6001600160a01b0384166000908152602081815260408083203380855290835281842054825160608101909352602580845291946001600160601b039091169390926107d99288926121d390830139611194565b9050866001600160a01b0316836001600160a01b03161415801561080657506001600160601b0382811614155b156108ae57600061083083836040518060600160405280603d815260200161230c603d91396111c3565b6001600160a01b03898116600081815260208181526040808320948a16808452949091529081902080546001600160601b0319166001600160601b0386161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108a4908590612156565b60405180910390a3505b6108b9878783611202565b5060019695505050505050565b601281565b6006546000906001600160a01b031633146108f85760405162461bcd60e51b815260040161059790612044565b506008805460ff1916600190811790915590565b6001600160a01b03821660009081526007602052604081205460ff168061094b57506001600160a01b03821660009081526007602052604090205460ff165b80610958575060085460ff165b9392505050565b60076020526000908152604090205460ff1681565b60046020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600160205260409020546001600160601b031690565b60004382106109d15760405162461bcd60e51b815260040161059790611dcb565b6001600160a01b03831660009081526004602052604090205463ffffffff16806109ff576000915050610701565b6001600160a01b038416600090815260036020908152604080832063ffffffff600019860181168552925290912054168310610a7b576001600160a01b03841660009081526003602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050610701565b6001600160a01b038416600090815260036020908152604080832083805290915290205463ffffffff16831015610ab6576000915050610701565b600060001982015b8163ffffffff168163ffffffff161115610b7957600282820363ffffffff16048103610ae86119e2565b506001600160a01b038716600090815260036020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415610b54576020015194506107019350505050565b805163ffffffff16871115610b6b57819350610b72565b6001820392505b5050610abe565b506001600160a01b038516600090815260036020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60056020526000908152604090205481565b6006546000906001600160a01b03163314610bfd5760405162461bcd60e51b815260040161059790611fb0565b506001600160a01b03166000908152600760205260409020805460ff1916600190811790915590565b610c313383836114bd565b5050565b60405180604001604052806005815260200164135413d39160da1b81525081565b60408051808201909152601781527626b0b93634b71023b7bb32b93730b731b2902a37b5b2b760491b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f59269cbca1208251d90fa95662317aad0c2a0b4ed01fd7809a1a8c310572a7d6610cd1611016565b30604051602001610ce59493929190611c34565b60405160208183030381529060405280519060200120905060007fee15044614b31d47e846313dae86ff14f14a42386a492dcc6b086cdd1600a14a89898986604051602001610d38959493929190611bff565b60405160208183030381529060405280519060200120905060008282604051602001610d65929190611bbc565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051610da29493929190611c58565b6020604051602081039080840390855afa158015610dc4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610df75760405162461bcd60e51b815260040161059790611d3f565b6001600160a01b03811660009081526005602052604090208054600181019091558a14610e365760405162461bcd60e51b815260040161059790611e12565b88421115610e565760405162461bcd60e51b815260040161059790611d85565b61060a818c876114bd565b6000610e6d338461090c565b610e895760405162461bcd60e51b815260040161059790611eb1565b6000610ead836040518060600160405280602681526020016121f860269139611194565b9050610eba338583611202565b5060019392505050565b6001600160a01b03811660009081526004602052604081205463ffffffff1680610eef576000610958565b6001600160a01b0383166000908152600360209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03169392505050565b69017b7883c0691660000081565b60085460ff1681565b6001600160a01b039182166000908152602081815260408083209390941682529190915220546001600160601b031690565b610c3133838361101a565b60026020908152600092835260408084209091529082529020546001600160601b031681565b7fee15044614b31d47e846313dae86ff14f14a42386a492dcc6b086cdd1600a14a81565b600360209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6006546001600160a01b031681565b4690565b6001600160a01b038084166000908152600260209081526040808320938616835292815290829020548251808401909352601b83527f436f6d703a20756e64656c65676174657320756e646572666c6f7700000000009183019190915261108e916001600160601b039091169083906111c3565b6001600160a01b038481166000908152600260209081526040808320938716835292815282822080546001600160601b0319166001600160601b03958616179055818052908290205482518084019093526019835278436f6d703a2064656c65676174657320756e646572666c6f7760381b918301919091526111149216908390611630565b6001600160a01b03848116600081815260026020908152604080832083805290915280822080546001600160601b0319166001600160601b0396909616959095179094559251918516917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908490a461118f8260008361166c565b505050565b600081600160601b84106111bb5760405162461bcd60e51b81526004016105979190611c76565b509192915050565b6000836001600160601b0316836001600160601b0316111582906111fa5760405162461bcd60e51b81526004016105979190611c76565b505050900390565b6001600160a01b0383166112285760405162461bcd60e51b815260040161059790611f53565b6001600160a01b03831660009081526002602090815260408083208380529091529020546001600160601b03808316911610156112775760405162461bcd60e51b815260040161059790611cc9565b6001600160a01b03821661129d5760405162461bcd60e51b815260040161059790611e54565b6001600160a01b0383166000908152600160209081526040918290205482516060810190935260368084526112e8936001600160601b03909216928592919061219d908301396111c3565b6001600160a01b038416600090815260016020908152604080832080546001600160601b0319166001600160601b039586161790556002825280832083805282529182902054825160608101909352603280845261135694919091169285929091906122da908301396111c3565b6001600160a01b038481166000908152600260209081526040808320838052825280832080546001600160601b0319166001600160601b03968716179055928616825260018152908290205482516060810190935260308084526113ca94919091169285929091906122aa90830139611630565b6001600160a01b038316600090815260016020908152604080832080546001600160601b0319166001600160601b0395861617905560028252808320838052825291829020548251606081019093526030808452611438949190911692859290919061225290830139611630565b6001600160a01b0383811660008181526002602090815260408083208380529091529081902080546001600160601b0319166001600160601b0395909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114b0908590612156565b60405180910390a3505050565b6001600160a01b03831660009081526002602090815260408083208380528252918290205482518084019093526019835278436f6d703a2064656c65676174657320756e646572666c6f7760381b91830191909152611529916001600160601b039091169083906111c3565b6001600160a01b038481166000908152600260209081526040808320838052825280832080546001600160601b0319166001600160601b03968716179055928616825290829020548251808401909352601883527f436f6d703a2064656c656761746573206f766572666c6f770000000000000000918301919091526115b29216908390611630565b6001600160a01b0384811660008181526002602090815260408083209488168084529490915280822080546001600160601b0319166001600160601b03969096169590951790945592519192917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908390a461118f6000838361166c565b6000838301826001600160601b0380871690831610156116635760405162461bcd60e51b81526004016105979190611c76565b50949350505050565b816001600160a01b0316836001600160a01b03161415801561169757506000816001600160601b0316115b1561118f576001600160a01b0383161561174f576001600160a01b03831660009081526004602052604081205463ffffffff1690816116d7576000611716565b6001600160a01b0385166000908152600360209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061173d8285604051806060016040528060288152602001612282602891396111c3565b905061174b86848484611806565b5050505b6001600160a01b0382161561118f576001600160a01b03821660009081526004602052604081205463ffffffff16908161178a5760006117c9565b6001600160a01b0384166000908152600360209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006117f0828560405180606001604052806027815260200161234960279139611630565b90506117fe85848484611806565b505050505050565b600061182a4360405180606001604052806034815260200161221e603491396119bb565b905060008463ffffffff1611801561187357506001600160a01b038516600090815260036020908152604080832063ffffffff6000198901811685529252909120548282169116145b156118d2576001600160a01b0385166000908152600360209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055611971565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600383528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252600490935292909220805460018801909316929091169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72484846040516119ac92919061216a565b60405180910390a25050505050565b600081600160201b84106111bb5760405162461bcd60e51b81526004016105979190611c76565b604080518082019091526000808252602082015290565b80356001600160a01b038116811461070157600080fd5b80356001600160601b038116811461070157600080fd5b600060208284031215611a38578081fd5b61095883836119f9565b60008060408385031215611a54578081fd5b611a5e84846119f9565b9150611a6d84602085016119f9565b90509250929050565b600080600060608486031215611a8a578081fd5b8335611a9581612184565b92506020840135611aa581612184565b929592945050506040919091013590565b60008060408385031215611ac8578182fd5b611ad284846119f9565b946020939093013593505050565b600080600080600080600060e0888a031215611afa578283fd5b611b0489896119f9565b96506020880135955060408801359450606088013560ff81168114611b27578384fd5b93506080880135925060a08801359150611b448960c08a01611a10565b905092959891949750929550565b60008060408385031215611b64578182fd5b611b6e84846119f9565b9150602083013563ffffffff81168114611b86578182fd5b809150509250929050565b60008060408385031215611ba3578182fd5b611bad84846119f9565b9150611a6d8460208501611a10565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b9485526001600160a01b03939093166020850152604084019190915260608301526001600160601b0316608082015260a00190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015611ca257858101830151858201604001528201611c86565b81811115611cb35783604083870101525b50601f01601f1916929092016040019392505050565b60208082526050908201527f436f6d703a205f7472616e73666572546f6b656e733a20756e64656c6567617460408201527f656420616d6f756e742073686f756c642062652067726561746572207468616e60608201526f081d1c985b9cd9995c88185b5bdd5b9d60821b608082015260a00190565b60208082526026908201527f436f6d703a3a64656c656761746542795369673a20696e76616c6964207369676040820152656e617475726560d01b606082015260800190565b60208082526026908201527f436f6d703a3a64656c656761746542795369673a207369676e617475726520656040820152651e1c1a5c995960d21b606082015260800190565b60208082526027908201527f436f6d703a3a6765745072696f72566f7465733a206e6f742079657420646574604082015266195c9b5a5b995960ca1b606082015260800190565b60208082526022908201527f436f6d703a3a64656c656761746542795369673a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b6020808252603a908201527f436f6d703a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606082015260800190565b602080825260409082018190527f41746c65617374206f6620746865206164647265737320286d73672e73656e64908201527f6572206f7220647374292073686f756c642062652077686974656c6973746564606082015260800190565b60208082526024908201527f436f6d703a3a756e64656c656761746542795369673a20696e76616c6964206e6040820152636f6e636560e01b606082015260800190565b6020808252603c908201527f436f6d703a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606082015260800190565b60208082526018908201527f4f6e6c792061646d696e2063616e2077686974656c6973740000000000000000604082015260600190565b60208082526039908201527f41746c65617374206f662074686520616464726573732028737263206f72206460408201527f7374292073686f756c642062652077686974656c697374656400000000000000606082015260800190565b60208082526024908201527f4f6e6c7920656e61626c652063616e20656e61626c6520616c6c207472616e736040820152636665727360e01b606082015260800190565b60208082526028908201527f436f6d703a3a756e64656c656761746542795369673a207369676e617475726560408201526708195e1c1a5c995960c21b606082015260800190565b60208082526028908201527f436f6d703a3a756e64656c656761746542795369673a20696e76616c6964207360408201526769676e617475726560c01b606082015260800190565b63ffffffff91909116815260200190565b63ffffffff9290921682526001600160601b0316602082015260400190565b60ff91909116815260200190565b6001600160601b0391909116815260200190565b6001600160601b0392831681529116602082015260400190565b6001600160a01b038116811461219957600080fd5b5056fe436f6d703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365436f6d703a3a617070726f76653a20616d6f756e7420657863656564732039362062697473436f6d703a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473436f6d703a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473436f6d703a205f7472616e73666572546f6b656e733a20756e64656c6567617465206164646974696f6e206572726f72436f6d703a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773436f6d703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773436f6d703a205f7472616e666572546f6b656e733a20756e64656c6567617465207375627472616374696f6e206572726f72436f6d703a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365436f6d703a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773a2646970667358221220ac45491b4f5299399623af40ff3b35539f580eca66e68ed00d923e73b2bed40664736f6c634300060c0033436f6d703a205375627472616374696f6e206f766572666c6f7720696e2074686520636f6e7374727563746f72ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"; diff --git a/libs/chains/src/eth/types/factories/Migrations__factory.ts b/libs/chains/src/eth/types/factories/Migrations__factory.ts deleted file mode 100644 index 693646b4cd7..00000000000 --- a/libs/chains/src/eth/types/factories/Migrations__factory.ts +++ /dev/null @@ -1,101 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { Migrations } from "../Migrations"; - -export class Migrations__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): Migrations { - return super.attach(address) as Migrations; - } - connect(signer: Signer): Migrations__factory { - return super.connect(signer) as Migrations__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Migrations { - return new Contract(address, _abi, signerOrProvider) as Migrations; - } -} - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "last_completed_migration", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "completed", - type: "uint256", - }, - ], - name: "setCompleted", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "new_address", - type: "address", - }, - ], - name: "upgrade", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50600080546001600160a01b031916331790556101b4806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630900f01014610051578063445df0ac146100795780638da5cb5b14610093578063fdacd576146100b7575b600080fd5b6100776004803603602081101561006757600080fd5b50356001600160a01b03166100d4565b005b610081610151565b60408051918252519081900360200190f35b61009b610157565b604080516001600160a01b039092168252519081900360200190f35b610077600480360360208110156100cd57600080fd5b5035610166565b6000546001600160a01b031633141561014e576000819050806001600160a01b031663fdacd5766001546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561013457600080fd5b505af1158015610148573d6000803e3d6000fd5b50505050505b50565b60015481565b6000546001600160a01b031681565b6000546001600160a01b031633141561014e5760015556fea2646970667358221220d4bbcad6d30040d80bb42a8f3b8db9b7d1c9968aa4a441a030fb7eb542ebb55964736f6c634300060c0033"; diff --git a/libs/chains/src/eth/types/factories/Ownable__factory.ts b/libs/chains/src/eth/types/factories/Ownable__factory.ts deleted file mode 100644 index b3223800e2a..00000000000 --- a/libs/chains/src/eth/types/factories/Ownable__factory.ts +++ /dev/null @@ -1,100 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { Ownable } from "../Ownable"; - -export class Ownable__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Ownable { - return new Contract(address, _abi, signerOrProvider) as Ownable; - } -} - -const _abi = [ - { - inputs: [], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "OwnershipTransferred", - type: "event", - }, - { - constant: true, - inputs: [], - name: "isOwner", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "owner", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [], - name: "renounceOwnership", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "newOwner", - type: "address", - }, - ], - name: "transferOwnership", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/ProposalValidator__factory.ts b/libs/chains/src/eth/types/factories/ProposalValidator__factory.ts deleted file mode 100644 index 8ecf2ebf74d..00000000000 --- a/libs/chains/src/eth/types/factories/ProposalValidator__factory.ts +++ /dev/null @@ -1,363 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { ProposalValidator } from "../ProposalValidator"; - -export class ProposalValidator__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - propositionThreshold: BigNumberish, - votingDuration: BigNumberish, - voteDifferential: BigNumberish, - minimumQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - propositionThreshold, - votingDuration, - voteDifferential, - minimumQuorum, - overrides || {} - ) as Promise; - } - getDeployTransaction( - propositionThreshold: BigNumberish, - votingDuration: BigNumberish, - voteDifferential: BigNumberish, - minimumQuorum: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - propositionThreshold, - votingDuration, - voteDifferential, - minimumQuorum, - overrides || {} - ); - } - attach(address: string): ProposalValidator { - return super.attach(address) as ProposalValidator; - } - connect(signer: Signer): ProposalValidator__factory { - return super.connect(signer) as ProposalValidator__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ProposalValidator { - return new Contract(address, _abi, signerOrProvider) as ProposalValidator; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "propositionThreshold", - type: "uint256", - }, - { - internalType: "uint256", - name: "votingDuration", - type: "uint256", - }, - { - internalType: "uint256", - name: "voteDifferential", - type: "uint256", - }, - { - internalType: "uint256", - name: "minimumQuorum", - type: "uint256", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - inputs: [], - name: "MINIMUM_QUORUM", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "ONE_HUNDRED_WITH_PRECISION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PROPOSITION_THRESHOLD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "VOTE_DIFFERENTIAL", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "VOTING_DURATION", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "getMinimumPropositionPowerNeeded", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "votingSupply", - type: "uint256", - }, - ], - name: "getMinimumVotingPowerNeeded", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isProposalPassed", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "isPropositionPowerEnough", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isQuorumValid", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "uint256", - name: "proposalId", - type: "uint256", - }, - ], - name: "isVoteDifferentialValid", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "validateCreatorOfProposal", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "contract IAaveGovernanceV2", - name: "governance", - type: "address", - }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint256", - name: "blockNumber", - type: "uint256", - }, - ], - name: "validateProposalCancellation", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, -]; - -const _bytecode = - "0x61010060405234801561001157600080fd5b5060405161102938038061102983398101604081905261003091610047565b60809390935260a09190915260c05260e05261007c565b6000806000806080858703121561005c578384fd5b505082516020840151604085015160609095015191969095509092509050565b60805160a05160c05160e051610f696100c060003980610609528061064e52508061041d52806104905250806104b45250806106fb528061079e5250610f696000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063a438d2081161008c578063d0d9029811610066578063d0d9029814610176578063e50f840014610189578063f48cb1341461019c578063fd58afd4146101af576100cf565b8063a438d20814610153578063ace432091461015b578063b159beac1461016e576100cf565b806306fbb3ab146100d45780631d73fd6d146100fd57806331a7bc411461011257806366121042146101255780637aa50080146101385780639125fb581461014b575b600080fd5b6100e76100e2366004610c87565b6101b7565b6040516100f49190610ea4565b60405180910390f35b6101056101dd565b6040516100f49190610eaf565b6100e7610120366004610c47565b6101e3565b6100e7610133366004610c47565b6101f9565b6100e7610146366004610c87565b610302565b61010561048e565b6101056104b2565b6100e7610169366004610c87565b6104d6565b610105610607565b6100e7610184366004610c47565b61062b565b610105610197366004610e5b565b610640565b6101056101aa366004610c87565b61067a565b61010561079c565b60006101c383836104d6565b80156101d457506101d48383610302565b90505b92915050565b61271081565b60006101f08484846101f9565b15949350505050565b600080846001600160a01b03166306be3e8e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561023557600080fd5b505afa158015610249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026d9190610c2b565b9050610279858461067a565b604051631420edcb60e31b81526001600160a01b0383169063a1076e58906102a79088908890600401610e8b565b60206040518083038186803b1580156102bf57600080fd5b505afa1580156102d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f79190610e73565b101595945050505050565b600061030c610957565b604051633656de2160e01b81526001600160a01b03851690633656de2190610338908690600401610eaf565b60006040518083038186803b15801561035057600080fd5b505afa158015610364573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261038c9190810190610cb2565b90506000816101e001516001600160a01b0316637a71f9d78361010001516040518263ffffffff1660e01b81526004016103c69190610eaf565b60206040518083038186803b1580156103de57600080fd5b505afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610e73565b90506104667f00000000000000000000000000000000000000000000000000000000000000006104608361045a6127108761018001516107c090919063ffffffff16565b90610819565b9061085b565b6104848261045a6127108661016001516107c090919063ffffffff16565b1195945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006104e0610957565b604051633656de2160e01b81526001600160a01b03851690633656de219061050c908690600401610eaf565b60006040518083038186803b15801561052457600080fd5b505afa158015610538573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105609190810190610cb2565b90506000816101e001516001600160a01b0316637a71f9d78361010001516040518263ffffffff1660e01b815260040161059a9190610eaf565b60206040518083038186803b1580156105b257600080fd5b505afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea9190610e73565b90506105f581610640565b82610160015110159250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006106388484846101f9565b949350505050565b600061067261271061045a847f00000000000000000000000000000000000000000000000000000000000000006107c0565b90505b919050565b600080836001600160a01b03166306be3e8e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106b657600080fd5b505afa1580156106ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ee9190610c2b565b905061063861271061045a7f0000000000000000000000000000000000000000000000000000000000000000846001600160a01b031663f6b50203886040518263ffffffff1660e01b81526004016107469190610eaf565b60206040518083038186803b15801561075e57600080fd5b505afa158015610772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107969190610e73565b906107c0565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000826107cf575060006101d7565b828202828482816107dc57fe5b04146101d45760405162461bcd60e51b8152600401808060200182810382526021815260200180610f136021913960400191505060405180910390fd5b60006101d483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506108b5565b6000828201838110156101d4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081836109415760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109065781810151838201526020016108ee565b50505050905090810190601f1680156109335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161094d57fe5b0495945050505050565b6040518061022001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b03168152602001600080191681525090565b805161067581610efa565b600082601f830112610a18578081fd5b8151610a2b610a2682610edc565b610eb8565b818152915060208083019084810181840286018201871015610a4c57600080fd5b60005b84811015610a74578151610a6281610efa565b84529282019290820190600101610a4f565b505050505092915050565b600082601f830112610a8f578081fd5b8151610a9d610a2682610edc565b818152915060208083019084810181840286018201871015610abe57600080fd5b60005b84811015610a7457610ad282610c1b565b84529282019290820190600101610ac1565b6000601f8381840112610af5578182fd5b8251610b03610a2682610edc565b818152925060208084019085810160005b84811015610bb1578151880189603f820112610b2f57600080fd5b8381015167ffffffffffffffff811115610b4557fe5b610b56818901601f19168601610eb8565b81815260408c81848601011115610b6c57600080fd5b60005b83811015610b8a578481018201518382018901528701610b6f565b83811115610b9b5760008885850101525b5050865250509282019290820190600101610b14565b50505050505092915050565b600082601f830112610bcd578081fd5b8151610bdb610a2682610edc565b818152915060208083019084810181840286018201871015610bfc57600080fd5b60005b84811015610a7457815184529282019290820190600101610bff565b8051801515811461067557600080fd5b600060208284031215610c3c578081fd5b81516101d481610efa565b600080600060608486031215610c5b578182fd5b8335610c6681610efa565b92506020840135610c7681610efa565b929592945050506040919091013590565b60008060408385031215610c99578182fd5b8235610ca481610efa565b946020939093013593505050565b600060208284031215610cc3578081fd5b815167ffffffffffffffff80821115610cda578283fd5b8184019150610220808387031215610cf0578384fd5b610cf981610eb8565b905082518152610d0b602084016109fd565b6020820152610d1c604084016109fd565b6040820152606083015182811115610d32578485fd5b610d3e87828601610a08565b606083015250608083015182811115610d55578485fd5b610d6187828601610bbd565b60808301525060a083015182811115610d78578485fd5b610d8487828601610ae4565b60a08301525060c083015182811115610d9b578485fd5b610da787828601610ae4565b60c08301525060e083015182811115610dbe578485fd5b610dca87828601610a7f565b60e083015250610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a09150610e17828401610c1b565b828201526101c09150610e2b828401610c1b565b828201526101e09150610e3f8284016109fd565b9181019190915261020091820151918101919091529392505050565b600060208284031215610e6c578081fd5b5035919050565b600060208284031215610e84578081fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b60405181810167ffffffffffffffff81118282101715610ed457fe5b604052919050565b600067ffffffffffffffff821115610ef057fe5b5060209081020190565b6001600160a01b0381168114610f0f57600080fd5b5056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220ec8a047b8c3fd5cb92a60ee11b839660df5f3a57699933a66f9a93ee4c3736f064736f6c63430007050033"; diff --git a/libs/chains/src/eth/types/factories/Proxy__factory.ts b/libs/chains/src/eth/types/factories/Proxy__factory.ts deleted file mode 100644 index b2e8c2699b0..00000000000 --- a/libs/chains/src/eth/types/factories/Proxy__factory.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { Proxy } from "../Proxy"; - -export class Proxy__factory { - static connect(address: string, signerOrProvider: Signer | Provider): Proxy { - return new Contract(address, _abi, signerOrProvider) as Proxy; - } -} - -const _abi = [ - { - stateMutability: "payable", - type: "fallback", - }, -]; diff --git a/libs/chains/src/eth/types/factories/SelfdestructTransfer__factory.ts b/libs/chains/src/eth/types/factories/SelfdestructTransfer__factory.ts deleted file mode 100644 index 2e431cc62c1..00000000000 --- a/libs/chains/src/eth/types/factories/SelfdestructTransfer__factory.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer, Overrides } from "ethers"; -import { Contract, ContractFactory } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { SelfdestructTransfer } from "../SelfdestructTransfer"; - -export class SelfdestructTransfer__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - getDeployTransaction( - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - attach(address: string): SelfdestructTransfer { - return super.attach(address) as SelfdestructTransfer; - } - connect(signer: Signer): SelfdestructTransfer__factory { - return super.connect(signer) as SelfdestructTransfer__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): SelfdestructTransfer { - return new Contract( - address, - _abi, - signerOrProvider - ) as SelfdestructTransfer; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address payable", - name: "to", - type: "address", - }, - ], - name: "destroyAndTransfer", - outputs: [], - stateMutability: "payable", - type: "function", - }, -]; - -const _bytecode = - "0x6080604052348015600f57600080fd5b5060888061001e6000396000f3fe608060405260043610601c5760003560e01c8063785e07b3146021575b600080fd5b604460048036036020811015603557600080fd5b50356001600160a01b03166046565b005b806001600160a01b0316fffea264697066735822122039cd6f3f3e3077a165b99440c924173ee7c36146ecd3a327a12955042d1d25e064736f6c634300060c0033"; diff --git a/libs/chains/src/eth/types/factories/TimelockController__factory.ts b/libs/chains/src/eth/types/factories/TimelockController__factory.ts deleted file mode 100644 index eea5a76fb03..00000000000 --- a/libs/chains/src/eth/types/factories/TimelockController__factory.ts +++ /dev/null @@ -1,806 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { TimelockController } from "../TimelockController"; - -export class TimelockController__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - minDelay: BigNumberish, - proposers: string[], - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - minDelay, - proposers, - executors, - overrides || {} - ) as Promise; - } - getDeployTransaction( - minDelay: BigNumberish, - proposers: string[], - executors: string[], - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction( - minDelay, - proposers, - executors, - overrides || {} - ); - } - attach(address: string): TimelockController { - return super.attach(address) as TimelockController; - } - connect(signer: Signer): TimelockController__factory { - return super.connect(signer) as TimelockController__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TimelockController { - return new Contract(address, _abi, signerOrProvider) as TimelockController; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "minDelay", - type: "uint256", - }, - { - internalType: "address[]", - name: "proposers", - type: "address[]", - }, - { - internalType: "address[]", - name: "executors", - type: "address[]", - }, - ], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "id", - type: "bytes32", - }, - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - ], - name: "CallExecuted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "id", - type: "bytes32", - }, - { - indexed: true, - internalType: "uint256", - name: "index", - type: "uint256", - }, - { - indexed: false, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "bytes32", - name: "predecessor", - type: "bytes32", - }, - { - indexed: false, - internalType: "uint256", - name: "delay", - type: "uint256", - }, - ], - name: "CallScheduled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "id", - type: "bytes32", - }, - ], - name: "Cancelled", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "oldDuration", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "newDuration", - type: "uint256", - }, - ], - name: "MinDelayChange", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - indexed: true, - internalType: "bytes32", - name: "previousAdminRole", - type: "bytes32", - }, - { - indexed: true, - internalType: "bytes32", - name: "newAdminRole", - type: "bytes32", - }, - ], - name: "RoleAdminChanged", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "RoleGranted", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "account", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "sender", - type: "address", - }, - ], - name: "RoleRevoked", - type: "event", - }, - { - inputs: [], - name: "DEFAULT_ADMIN_ROLE", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "EXECUTOR_ROLE", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "PROPOSER_ROLE", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "TIMELOCK_ADMIN_ROLE", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "id", - type: "bytes32", - }, - ], - name: "cancel", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "bytes32", - name: "predecessor", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "salt", - type: "bytes32", - }, - ], - name: "execute", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "datas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "predecessor", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "salt", - type: "bytes32", - }, - ], - name: "executeBatch", - outputs: [], - stateMutability: "payable", - type: "function", - }, - { - inputs: [], - name: "getMinDelay", - outputs: [ - { - internalType: "uint256", - name: "duration", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - ], - name: "getRoleAdmin", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "id", - type: "bytes32", - }, - ], - name: "getTimestamp", - outputs: [ - { - internalType: "uint256", - name: "timestamp", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "grantRole", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "hasRole", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "bytes32", - name: "predecessor", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "salt", - type: "bytes32", - }, - ], - name: "hashOperation", - outputs: [ - { - internalType: "bytes32", - name: "hash", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "datas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "predecessor", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "salt", - type: "bytes32", - }, - ], - name: "hashOperationBatch", - outputs: [ - { - internalType: "bytes32", - name: "hash", - type: "bytes32", - }, - ], - stateMutability: "pure", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "id", - type: "bytes32", - }, - ], - name: "isOperation", - outputs: [ - { - internalType: "bool", - name: "pending", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "id", - type: "bytes32", - }, - ], - name: "isOperationDone", - outputs: [ - { - internalType: "bool", - name: "done", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "id", - type: "bytes32", - }, - ], - name: "isOperationPending", - outputs: [ - { - internalType: "bool", - name: "pending", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "id", - type: "bytes32", - }, - ], - name: "isOperationReady", - outputs: [ - { - internalType: "bool", - name: "ready", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "renounceRole", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes32", - name: "role", - type: "bytes32", - }, - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "revokeRole", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "bytes32", - name: "predecessor", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "salt", - type: "bytes32", - }, - { - internalType: "uint256", - name: "delay", - type: "uint256", - }, - ], - name: "schedule", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address[]", - name: "targets", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "values", - type: "uint256[]", - }, - { - internalType: "bytes[]", - name: "datas", - type: "bytes[]", - }, - { - internalType: "bytes32", - name: "predecessor", - type: "bytes32", - }, - { - internalType: "bytes32", - name: "salt", - type: "bytes32", - }, - { - internalType: "uint256", - name: "delay", - type: "uint256", - }, - ], - name: "scheduleBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes4", - name: "interfaceId", - type: "bytes4", - }, - ], - name: "supportsInterface", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "newDelay", - type: "uint256", - }, - ], - name: "updateDelay", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - stateMutability: "payable", - type: "receive", - }, -]; - -const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162001e1c38038062001e1c833981016040819052620000349162000394565b6200004f60008051602062001dbc83398151915280620001c9565b6200007960008051602062001ddc83398151915260008051602062001dbc833981519152620001c9565b620000a360008051602062001dfc83398151915260008051602062001dbc833981519152620001c9565b620000be60008051602062001dbc8339815191523362000214565b620000d960008051602062001dbc8339815191523062000214565b60005b825181101562000136576200012360008051602062001ddc8339815191528483815181106200010f576200010f62000432565b60200260200101516200021460201b60201c565b6200012e8162000408565b9050620000dc565b5060005b815181101562000180576200016d60008051602062001dfc8339815191528383815181106200010f576200010f62000432565b620001788162000408565b90506200013a565b5060028390556040805160008152602081018590527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a15050506200045e565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b62000220828262000224565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000220576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002803390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b80516001600160a01b0381168114620002dc57600080fd5b919050565b600082601f830112620002f357600080fd5b815160206001600160401b038083111562000312576200031262000448565b8260051b604051601f19603f830116810181811084821117156200033a576200033a62000448565b604052848152838101925086840182880185018910156200035a57600080fd5b600092505b8583101562000388576200037381620002c4565b8452928401926001929092019184016200035f565b50979650505050505050565b600080600060608486031215620003aa57600080fd5b835160208501519093506001600160401b0380821115620003ca57600080fd5b620003d887838801620002e1565b93506040860151915080821115620003ef57600080fd5b50620003fe86828701620002e1565b9150509250925092565b60006000198214156200042b57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61194e806200046e6000396000f3fe60806040526004361061014f5760003560e01c806364d62353116100b6578063b1c5f4271161006f578063b1c5f427146103f3578063c4d252f514610413578063d45c443514610433578063d547741f14610460578063e38335e514610480578063f27a0c921461049357600080fd5b806364d623531461033c5780638065657f1461035c5780638f2a0bb01461037c5780638f61f4f51461039c57806391d14854146103be578063a217fddf146103de57600080fd5b8063248a9ca311610108578063248a9ca31461025b5780632ab0f5291461028b5780632f2ff15d146102bc57806331d50750146102dc57806336568abe146102fc578063584b153e1461031c57600080fd5b806301d5062a1461015b57806301ffc9a71461017d57806307bd0265146101b25780630d3cf6fc146101f4578063134008d31461022857806313bc9f201461023b57600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b610176366004611281565b6104a8565b005b34801561018957600080fd5b5061019d610198366004611496565b61052c565b60405190151581526020015b60405180910390f35b3480156101be57600080fd5b506101e67fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b6040519081526020016101a9565b34801561020057600080fd5b506101e67f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b61017b610236366004611215565b610563565b34801561024757600080fd5b5061019d610256366004611451565b6105db565b34801561026757600080fd5b506101e6610276366004611451565b60009081526020819052604090206001015490565b34801561029757600080fd5b5061019d6102a6366004611451565b6000908152600160208190526040909120541490565b3480156102c857600080fd5b5061017b6102d736600461146a565b610601565b3480156102e857600080fd5b5061019d6102f7366004611451565b61062c565b34801561030857600080fd5b5061017b61031736600461146a565b610645565b34801561032857600080fd5b5061019d610337366004611451565b6106c8565b34801561034857600080fd5b5061017b610357366004611451565b6106de565b34801561036857600080fd5b506101e6610377366004611215565b610782565b34801561038857600080fd5b5061017b61039736600461139f565b6107c1565b3480156103a857600080fd5b506101e66000805160206118f983398151915281565b3480156103ca57600080fd5b5061019d6103d936600461146a565b610902565b3480156103ea57600080fd5b506101e6600081565b3480156103ff57600080fd5b506101e661040e3660046112f6565b61092b565b34801561041f57600080fd5b5061017b61042e366004611451565b610970565b34801561043f57600080fd5b506101e661044e366004611451565b60009081526001602052604090205490565b34801561046c57600080fd5b5061017b61047b36600461146a565b610a34565b61017b61048e3660046112f6565b610a5a565b34801561049f57600080fd5b506002546101e6565b6000805160206118f98339815191526104c18133610b8f565b60006104d1898989898989610782565b90506104dd8184610bf3565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516105199695949392919061162e565b60405180910390a3505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061055d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6361058f816000610902565b61059d5761059d8133610b8f565b60006105ad888888888888610782565b90506105b98185610ce2565b6105c88160008a8a8a8a610d7e565b6105d181610e92565b5050505050505050565b6000818152600160205260408120546001811180156105fa5750428111155b9392505050565b60008281526020819052604090206001015461061d8133610b8f565b6106278383610ecb565b505050565b60008181526001602052604081205481905b1192915050565b6001600160a01b03811633146106ba5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106c48282610f4f565b5050565b600081815260016020819052604082205461063e565b3330146107415760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b60648201526084016106b1565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b600086868686868660405160200161079f9695949392919061162e565b6040516020818303038152906040528051906020012090509695505050505050565b6000805160206118f98339815191526107da8133610b8f565b8887146107f95760405162461bcd60e51b81526004016106b190611749565b8885146108185760405162461bcd60e51b81526004016106b190611749565b600061082a8b8b8b8b8b8b8b8b61092b565b90506108368184610bf3565b60005b8a8110156108f45780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610876576108766118cc565b905060200201602081019061088b91906111fa565b8d8d8681811061089d5761089d6118cc565b905060200201358c8c878181106108b6576108b66118cc565b90506020028101906108c891906117d6565b8c8b6040516108dc9695949392919061162e565b60405180910390a36108ed8161189b565b9050610839565b505050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000888888888888888860405160200161094c98979695949392919061166b565b60405160208183030381529060405280519060200120905098975050505050505050565b6000805160206118f98339815191526109898133610b8f565b610992826106c8565b6109f85760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b60648201526084016106b1565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610a508133610b8f565b6106278383610f4f565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610a86816000610902565b610a9457610a948133610b8f565b878614610ab35760405162461bcd60e51b81526004016106b190611749565b878414610ad25760405162461bcd60e51b81526004016106b190611749565b6000610ae48a8a8a8a8a8a8a8a61092b565b9050610af08185610ce2565b60005b89811015610b7957610b6982828d8d85818110610b1257610b126118cc565b9050602002016020810190610b2791906111fa565b8c8c86818110610b3957610b396118cc565b905060200201358b8b87818110610b5257610b526118cc565b9050602002810190610b6491906117d6565b610d7e565b610b728161189b565b9050610af3565b50610b8381610e92565b50505050505050505050565b610b998282610902565b6106c457610bb1816001600160a01b03166014610fb4565b610bbc836020610fb4565b604051602001610bcd929190611587565b60408051601f198184030181529082905262461bcd60e51b82526106b191600401611716565b610bfc8261062c565b15610c615760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b60648201526084016106b1565b600254811015610cc25760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b60648201526084016106b1565b610ccc814261181d565b6000928352600160205260409092209190915550565b610ceb826105db565b610d075760405162461bcd60e51b81526004016106b19061178c565b801580610d235750600081815260016020819052604090912054145b6106c45760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b60648201526084016106b1565b6000846001600160a01b0316848484604051610d9b929190611577565b60006040518083038185875af1925050503d8060008114610dd8576040519150601f19603f3d011682016040523d82523d6000602084013e610ddd565b606091505b5050905080610e4a5760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b60648201526084016106b1565b85877fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5887878787604051610e8194939291906115fc565b60405180910390a350505050505050565b610e9b816105db565b610eb75760405162461bcd60e51b81526004016106b19061178c565b600090815260016020819052604090912055565b610ed58282610902565b6106c4576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610f0b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610f598282610902565b156106c4576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606000610fc3836002611835565b610fce90600261181d565b67ffffffffffffffff811115610fe657610fe66118e2565b6040519080825280601f01601f191660200182016040528015611010576020820181803683370190505b509050600360fc1b8160008151811061102b5761102b6118cc565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061105a5761105a6118cc565b60200101906001600160f81b031916908160001a905350600061107e846002611835565b61108990600161181d565b90505b6001811115611101576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106110bd576110bd6118cc565b1a60f81b8282815181106110d3576110d36118cc565b60200101906001600160f81b031916908160001a90535060049490941c936110fa81611884565b905061108c565b5083156105fa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106b1565b80356001600160a01b038116811461116757600080fd5b919050565b60008083601f84011261117e57600080fd5b50813567ffffffffffffffff81111561119657600080fd5b6020830191508360208260051b85010111156111b157600080fd5b9250929050565b60008083601f8401126111ca57600080fd5b50813567ffffffffffffffff8111156111e257600080fd5b6020830191508360208285010111156111b157600080fd5b60006020828403121561120c57600080fd5b6105fa82611150565b60008060008060008060a0878903121561122e57600080fd5b61123787611150565b955060208701359450604087013567ffffffffffffffff81111561125a57600080fd5b61126689828a016111b8565b979a9699509760608101359660809091013595509350505050565b600080600080600080600060c0888a03121561129c57600080fd5b6112a588611150565b965060208801359550604088013567ffffffffffffffff8111156112c857600080fd5b6112d48a828b016111b8565b989b979a50986060810135976080820135975060a09091013595509350505050565b60008060008060008060008060a0898b03121561131257600080fd5b883567ffffffffffffffff8082111561132a57600080fd5b6113368c838d0161116c565b909a50985060208b013591508082111561134f57600080fd5b61135b8c838d0161116c565b909850965060408b013591508082111561137457600080fd5b506113818b828c0161116c565b999c989b509699959896976060870135966080013595509350505050565b600080600080600080600080600060c08a8c0312156113bd57600080fd5b893567ffffffffffffffff808211156113d557600080fd5b6113e18d838e0161116c565b909b50995060208c01359150808211156113fa57600080fd5b6114068d838e0161116c565b909950975060408c013591508082111561141f57600080fd5b5061142c8c828d0161116c565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60006020828403121561146357600080fd5b5035919050565b6000806040838503121561147d57600080fd5b8235915061148d60208401611150565b90509250929050565b6000602082840312156114a857600080fd5b81356001600160e01b0319811681146105fa57600080fd5b818352600060208085019450848460051b86018460005b878110156115415783830389528135601e198836030181126114f857600080fd5b8701803567ffffffffffffffff81111561151157600080fd5b80360389131561152057600080fd5b61152d858289850161154e565b9a87019a94505050908401906001016114d7565b5090979650505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8183823760009101908152919050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516115bf816017850160208801611854565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516115f0816028840160208801611854565b01602801949350505050565b60018060a01b038516815283602082015260606040820152600061162460608301848661154e565b9695505050505050565b60018060a01b038716815285602082015260a06040820152600061165660a08301868861154e565b60608301949094525060800152949350505050565b60a0808252810188905260008960c08301825b8b8110156116ac576001600160a01b0361169784611150565b1682526020928301929091019060010161167e565b5083810360208501528881526001600160fb1b038911156116cc57600080fd5b8860051b9150818a6020830137818101915050602081016000815260208483030160408501526116fd81888a6114c0565b6060850196909652505050608001529695505050505050565b6020815260008251806020840152611735816040850160208701611854565b601f01601f19169190910160400192915050565b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b6000808335601e198436030181126117ed57600080fd5b83018035915067ffffffffffffffff82111561180857600080fd5b6020019150368190038213156111b157600080fd5b60008219821115611830576118306118b6565b500190565b600081600019048311821515161561184f5761184f6118b6565b500290565b60005b8381101561186f578181015183820152602001611857565b8381111561187e576000848401525b50505050565b600081611893576118936118b6565b506000190190565b60006000198214156118af576118af6118b6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfeb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1a26469706673582212200a653786011eb86f8fd0a1d01d6f13229d844e5395ae4365f855be775b53c13464736f6c634300080700335f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63"; diff --git a/libs/chains/src/eth/types/factories/TimelockInterface__factory.ts b/libs/chains/src/eth/types/factories/TimelockInterface__factory.ts deleted file mode 100644 index 0582ffd579a..00000000000 --- a/libs/chains/src/eth/types/factories/TimelockInterface__factory.ts +++ /dev/null @@ -1,198 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { Signer } from "ethers"; -import { Contract } from "ethers"; -import type { Provider } from "@ethersproject/providers"; - -import type { TimelockInterface } from "../TimelockInterface"; - -export class TimelockInterface__factory { - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TimelockInterface { - return new Contract(address, _abi, signerOrProvider) as TimelockInterface; - } -} - -const _abi = [ - { - constant: true, - inputs: [], - name: "GRACE_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [], - name: "acceptAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "cancelTransaction", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "delay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "executeTransaction", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - payable: true, - stateMutability: "payable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "queueTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "hash", - type: "bytes32", - }, - ], - name: "queuedTransactions", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, -]; diff --git a/libs/chains/src/eth/types/factories/TimelockMock__factory.ts b/libs/chains/src/eth/types/factories/TimelockMock__factory.ts deleted file mode 100644 index 152c688b563..00000000000 --- a/libs/chains/src/eth/types/factories/TimelockMock__factory.ts +++ /dev/null @@ -1,515 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { TimelockMock } from "../TimelockMock"; - -export class TimelockMock__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - admin_: string, - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy( - admin_, - delay_, - overrides || {} - ) as Promise; - } - getDeployTransaction( - admin_: string, - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(admin_, delay_, overrides || {}); - } - attach(address: string): TimelockMock { - return super.attach(address) as TimelockMock; - } - connect(signer: Signer): TimelockMock__factory { - return super.connect(signer) as TimelockMock__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): TimelockMock { - return new Contract(address, _abi, signerOrProvider) as TimelockMock; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "admin_", - type: "address", - }, - { - internalType: "uint256", - name: "delay_", - type: "uint256", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "txHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "CancelTransaction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "txHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ExecuteTransaction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "newDelay", - type: "uint256", - }, - ], - name: "NewDelay", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "txHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "QueueTransaction", - type: "event", - }, - { - payable: true, - stateMutability: "payable", - type: "fallback", - }, - { - constant: true, - inputs: [], - name: "GRACE_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAXIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MINIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [], - name: "acceptAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "cancelTransaction", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "delay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "executeTransaction", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - payable: true, - stateMutability: "payable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "pendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "queueTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "queuedTransactions", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "delay_", - type: "uint256", - }, - ], - name: "setDelay", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "pendingAdmin_", - type: "address", - }, - ], - name: "setPendingAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506040516116c43803806116c48339818101604052604081101561003357600080fd5b508051602090910151607881101561007c5760405162461bcd60e51b815260040180806020018281038252603b81526020018061164d603b913960400191505060405180910390fd5b6107088111156100bd5760405162461bcd60e51b815260040180806020018281038252603c815260200180611688603c913960400191505060405180910390fd5b600080546001600160a01b039093166001600160a01b03199093169290921790915560025561155c806100f16000396000f3fe6080604052600436106100c25760003560e01c80636a42b8f81161007f578063c1a287e211610059578063c1a287e2146105dd578063e177246e146105f2578063f2b065371461061c578063f851a4401461065a576100c2565b80636a42b8f81461059e5780637d645fab146105b3578063b1b43ae5146105c8576100c2565b80630825f38f146100c45780630e18b68114610279578063267822471461028e5780633a66f901146102bf5780634dd18bf51461041e578063591fcdfe14610451575b005b610204600480360360a08110156100da57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561010957600080fd5b82018360208201111561011b57600080fd5b803590602001918460018302840111600160201b8311171561013c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561018e57600080fd5b8201836020820111156101a057600080fd5b803590602001918460018302840111600160201b831117156101c157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061066f915050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b506100c2610af7565b34801561029a57600080fd5b506102a3610b93565b604080516001600160a01b039092168252519081900360200190f35b3480156102cb57600080fd5b5061040c600480360360a08110156102e257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561031157600080fd5b82018360208201111561032357600080fd5b803590602001918460018302840111600160201b8311171561034457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561039657600080fd5b8201836020820111156103a857600080fd5b803590602001918460018302840111600160201b831117156103c957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610ba2915050565b60408051918252519081900360200190f35b34801561042a57600080fd5b506100c26004803603602081101561044157600080fd5b50356001600160a01b0316610e6b565b34801561045d57600080fd5b506100c2600480360360a081101561047457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460018302840111600160201b831117156104d657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561052857600080fd5b82018360208201111561053a57600080fd5b803590602001918460018302840111600160201b8311171561055b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610ef9915050565b3480156105aa57600080fd5b5061040c611166565b3480156105bf57600080fd5b5061040c61116c565b3480156105d457600080fd5b5061040c611172565b3480156105e957600080fd5b5061040c611177565b3480156105fe57600080fd5b506100c26004803603602081101561061557600080fd5b503561117d565b34801561062857600080fd5b506106466004803603602081101561063f57600080fd5b503561126f565b604080519115158252519081900360200190f35b34801561066657600080fd5b506102a3611284565b60606000868686868660405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156106e05781810151838201526020016106c8565b50505050905090810190601f16801561070d5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610740578181015183820152602001610728565b50505050905090810190601f16801561076d5780820380516001836020036101000a031916815260200191505b5060408051601f1981840301815291815281516020928301206000818152600390935291205490995060ff1697506107de96505050505050505760405162461bcd60e51b81526004018080602001828103825260418152602001806113306041913960600191505060405180910390fd5b6107f08361034863ffffffff61129316565b6107f86112f4565b11156108355760405162461bcd60e51b81526004018080602001828103825260378152602001806112f96037913960400191505060405180910390fd5b6000818152600360205260409020805460ff19169055845160609061085b5750836108e8565b85805190602001208560405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b602083106108b05780518252601f199092019160209182019101610891565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060896001600160a01b031689846040518082805190602001908083835b602083106109275780518252601f199092019160209182019101610908565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610989576040519150601f19603f3d011682016040523d82523d6000602084013e61098e565b606091505b5091509150816109cf5760405162461bcd60e51b81526004018080602001828103825260418152602001806113716041913960600191505060405180910390fd5b896001600160a01b0316847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610a4c578181015183820152602001610a34565b50505050905090810190601f168015610a795780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610aac578181015183820152602001610a94565b50505050905090810190601f168015610ad95780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a39998505050505050505050565b6001546001600160a01b03163314610b405760405162461bcd60e51b815260040180806020018281038252603c815260200180611438603c913960400191505060405180910390fd5b60008054336001600160a01b031991821617808355600180549092169091556040516001600160a01b03909116917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a2565b6001546001600160a01b031681565b6000610bbe600254610bb26112f4565b9063ffffffff61129316565b821015610bfc5760405162461bcd60e51b815260040180806020018281038252604d8152602001806113eb604d913960600191505060405180910390fd5b6000868686868660405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610c6b578181015183820152602001610c53565b50505050905090810190601f168015610c985780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610ccb578181015183820152602001610cb3565b50505050905090810190601f168015610cf85780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060016003600083815260200190815260200160002060006101000a81548160ff021916908315150217905550866001600160a01b0316817f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f88888888604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610dc3578181015183820152602001610dab565b50505050905090810190601f168015610df05780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610e23578181015183820152602001610e0b565b50505050905090810190601f168015610e505780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a39695505050505050565b333014610ea95760405162461bcd60e51b81526004018080602001828103825260408152602001806114e86040913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0383811691909117918290556040519116907f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b6000858585858560405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610f68578181015183820152602001610f50565b50505050905090810190601f168015610f955780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610fc8578181015183820152602001610fb0565b50505050905090810190601f168015610ff55780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060006003600083815260200190815260200160002060006101000a81548160ff021916908315150217905550856001600160a01b0316817f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8787878787604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156110c05781810151838201526020016110a8565b50505050905090810190601f1680156110ed5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015611120578181015183820152602001611108565b50505050905090810190601f16801561114d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a3505050505050565b60025481565b61070881565b607881565b61034881565b3330146111bb5760405162461bcd60e51b81526004018080602001828103825260398152602001806113b26039913960400191505060405180910390fd5b60788110156111fb5760405162461bcd60e51b81526004018080602001828103825260388152602001806114746038913960400191505060405180910390fd5b61070881111561123c5760405162461bcd60e51b815260040180806020018281038252603c8152602001806114ac603c913960400191505060405180910390fd5b600281905560405181907f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90600090a250565b60036020526000908152604090205460ff1681565b6000546001600160a01b031681565b6000828201838110156112ed576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b429056fe54696d656c6f636b4d6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206973207374616c652e54696d656c6f636b4d6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206861736e2774206265656e207175657565642e54696d656c6f636b4d6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e54696d656c6f636b4d6f636b3a3a73657444656c61793a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b4d6f636b2e54696d656c6f636b4d6f636b3a3a71756575655472616e73616374696f6e3a20457374696d6174656420657865637574696f6e20626c6f636b206d75737420736174697366792064656c61792e54696d656c6f636b4d6f636b3a3a61636365707441646d696e3a2043616c6c206d75737420636f6d652066726f6d2070656e64696e6741646d696e2e54696d656c6f636b4d6f636b3a3a73657444656c61793a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b4d6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e54696d656c6f636b4d6f636b3a3a73657450656e64696e6741646d696e3a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b4d6f636b2ea265627a7a723158205cb4254eb3f7b192c94088feb531fcf44c1b7f872c91464a913c33dc669e6ed964736f6c6343000510003254696d656c6f636b4d6f636b3a3a636f6e7374727563746f723a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b4d6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e"; diff --git a/libs/chains/src/eth/types/factories/Timelock__factory.ts b/libs/chains/src/eth/types/factories/Timelock__factory.ts deleted file mode 100644 index 1cf320b0c3c..00000000000 --- a/libs/chains/src/eth/types/factories/Timelock__factory.ts +++ /dev/null @@ -1,511 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { Timelock } from "../Timelock"; - -export class Timelock__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - admin_: string, - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(admin_, delay_, overrides || {}) as Promise; - } - getDeployTransaction( - admin_: string, - delay_: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(admin_, delay_, overrides || {}); - } - attach(address: string): Timelock { - return super.attach(address) as Timelock; - } - connect(signer: Signer): Timelock__factory { - return super.connect(signer) as Timelock__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): Timelock { - return new Contract(address, _abi, signerOrProvider) as Timelock; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "admin_", - type: "address", - }, - { - internalType: "uint256", - name: "delay_", - type: "uint256", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "txHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "CancelTransaction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "txHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "ExecuteTransaction", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newAdmin", - type: "address", - }, - ], - name: "NewAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "uint256", - name: "newDelay", - type: "uint256", - }, - ], - name: "NewDelay", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "newPendingAdmin", - type: "address", - }, - ], - name: "NewPendingAdmin", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "bytes32", - name: "txHash", - type: "bytes32", - }, - { - indexed: true, - internalType: "address", - name: "target", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "string", - name: "signature", - type: "string", - }, - { - indexed: false, - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "QueueTransaction", - type: "event", - }, - { - payable: true, - stateMutability: "payable", - type: "fallback", - }, - { - constant: true, - inputs: [], - name: "GRACE_PERIOD", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MAXIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [], - name: "MINIMUM_DELAY", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [], - name: "acceptAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "admin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "cancelTransaction", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "delay", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "executeTransaction", - outputs: [ - { - internalType: "bytes", - name: "", - type: "bytes", - }, - ], - payable: true, - stateMutability: "payable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "pendingAdmin", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "target", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - internalType: "string", - name: "signature", - type: "string", - }, - { - internalType: "bytes", - name: "data", - type: "bytes", - }, - { - internalType: "uint256", - name: "eta", - type: "uint256", - }, - ], - name: "queueTransaction", - outputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "bytes32", - name: "", - type: "bytes32", - }, - ], - name: "queuedTransactions", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "uint256", - name: "delay_", - type: "uint256", - }, - ], - name: "setDelay", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "pendingAdmin_", - type: "address", - }, - ], - name: "setPendingAdmin", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506040516118a63803806118a68339818101604052604081101561003357600080fd5b5080516020909101516202a30081101561007e5760405162461bcd60e51b81526004018080602001828103825260378152602001806118376037913960400191505060405180910390fd5b62278d008111156100c05760405162461bcd60e51b815260040180806020018281038252603881526020018061186e6038913960400191505060405180910390fd5b600080546001600160a01b039093166001600160a01b031990931692909217909155600255611743806100f46000396000f3fe6080604052600436106100c25760003560e01c80636a42b8f81161007f578063c1a287e211610059578063c1a287e2146105dd578063e177246e146105f2578063f2b065371461061c578063f851a4401461065a576100c2565b80636a42b8f81461059e5780637d645fab146105b3578063b1b43ae5146105c8576100c2565b80630825f38f146100c45780630e18b68114610279578063267822471461028e5780633a66f901146102bf5780634dd18bf51461041e578063591fcdfe14610451575b005b610204600480360360a08110156100da57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561010957600080fd5b82018360208201111561011b57600080fd5b803590602001918460018302840111600160201b8311171561013c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561018e57600080fd5b8201836020820111156101a057600080fd5b803590602001918460018302840111600160201b831117156101c157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061066f915050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b506100c2610b88565b34801561029a57600080fd5b506102a3610c24565b604080516001600160a01b039092168252519081900360200190f35b3480156102cb57600080fd5b5061040c600480360360a08110156102e257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561031157600080fd5b82018360208201111561032357600080fd5b803590602001918460018302840111600160201b8311171561034457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561039657600080fd5b8201836020820111156103a857600080fd5b803590602001918460018302840111600160201b831117156103c957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c33915050565b60408051918252519081900360200190f35b34801561042a57600080fd5b506100c26004803603602081101561044157600080fd5b50356001600160a01b0316610f44565b34801561045d57600080fd5b506100c2600480360360a081101561047457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460018302840111600160201b831117156104d657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561052857600080fd5b82018360208201111561053a57600080fd5b803590602001918460018302840111600160201b8311171561055b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610fd2915050565b3480156105aa57600080fd5b5061040c611288565b3480156105bf57600080fd5b5061040c61128e565b3480156105d457600080fd5b5061040c611295565b3480156105e957600080fd5b5061040c61129c565b3480156105fe57600080fd5b506100c26004803603602081101561061557600080fd5b50356112a3565b34801561062857600080fd5b506106466004803603602081101561063f57600080fd5b5035611398565b604080519115158252519081900360200190f35b34801561066657600080fd5b506102a36113ad565b6000546060906001600160a01b031633146106bb5760405162461bcd60e51b81526004018080602001828103825260388152602001806114226038913960400191505060405180910390fd5b6000868686868660405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561072a578181015183820152602001610712565b50505050905090810190601f1680156107575780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561078a578181015183820152602001610772565b50505050905090810190601f1680156107b75780820380516001836020036101000a031916815260200191505b5060408051601f1981840301815291815281516020928301206000818152600390935291205490995060ff16975061082896505050505050505760405162461bcd60e51b815260040180806020018281038252603d815260200180611575603d913960400191505060405180910390fd5b826108316113bc565b101561086e5760405162461bcd60e51b81526004018080602001828103825260458152602001806114c46045913960600191505060405180910390fd5b610881836212750063ffffffff6113c016565b6108896113bc565b11156108c65760405162461bcd60e51b81526004018080602001828103825260338152602001806114916033913960400191505060405180910390fd5b6000818152600360205260409020805460ff1916905584516060906108ec575083610979565b85805190602001208560405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b602083106109415780518252601f199092019160209182019101610922565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060896001600160a01b031689846040518082805190602001908083835b602083106109b85780518252601f199092019160209182019101610999565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610a1a576040519150601f19603f3d011682016040523d82523d6000602084013e610a1f565b606091505b509150915081610a605760405162461bcd60e51b815260040180806020018281038252603d815260200180611658603d913960400191505060405180910390fd5b896001600160a01b0316847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610add578181015183820152602001610ac5565b50505050905090810190601f168015610b0a5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610b3d578181015183820152602001610b25565b50505050905090810190601f168015610b6a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a39998505050505050505050565b6001546001600160a01b03163314610bd15760405162461bcd60e51b81526004018080602001828103825260388152602001806115b26038913960400191505060405180910390fd5b60008054336001600160a01b031991821617808355600180549092169091556040516001600160a01b03909116917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a2565b6001546001600160a01b031681565b600080546001600160a01b03163314610c7d5760405162461bcd60e51b81526004018080602001828103825260368152602001806116226036913960400191505060405180910390fd5b610c97600254610c8b6113bc565b9063ffffffff6113c016565b821015610cd55760405162461bcd60e51b81526004018080602001828103825260498152602001806116956049913960600191505060405180910390fd5b6000868686868660405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610d44578181015183820152602001610d2c565b50505050905090810190601f168015610d715780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610da4578181015183820152602001610d8c565b50505050905090810190601f168015610dd15780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060016003600083815260200190815260200160002060006101000a81548160ff021916908315150217905550866001600160a01b0316817f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f88888888604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610e9c578181015183820152602001610e84565b50505050905090810190601f168015610ec95780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610efc578181015183820152602001610ee4565b50505050905090810190601f168015610f295780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a39695505050505050565b333014610f825760405162461bcd60e51b81526004018080602001828103825260388152602001806115ea6038913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0383811691909117918290556040519116907f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b6000546001600160a01b0316331461101b5760405162461bcd60e51b815260040180806020018281038252603781526020018061145a6037913960400191505060405180910390fd5b6000858585858560405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561108a578181015183820152602001611072565b50505050905090810190601f1680156110b75780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156110ea5781810151838201526020016110d2565b50505050905090810190601f1680156111175780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060006003600083815260200190815260200160002060006101000a81548160ff021916908315150217905550856001600160a01b0316817f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8787878787604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156111e25781810151838201526020016111ca565b50505050905090810190601f16801561120f5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561124257818101518382015260200161122a565b50505050905090810190601f16801561126f5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a3505050505050565b60025481565b62278d0081565b6202a30081565b6212750081565b3330146112e15760405162461bcd60e51b81526004018080602001828103825260318152602001806116de6031913960400191505060405180910390fd5b6202a3008110156113235760405162461bcd60e51b81526004018080602001828103825260348152602001806115096034913960400191505060405180910390fd5b62278d008111156113655760405162461bcd60e51b815260040180806020018281038252603881526020018061153d6038913960400191505060405180910390fd5b600281905560405181907f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90600090a250565b60036020526000908152604090205460ff1681565b6000546001600160a01b031681565b4290565b60008282018381101561141a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b939250505056fe54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206973207374616c652e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206861736e2774207375727061737365642074696d65206c6f636b2e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206861736e2774206265656e207175657565642e54696d656c6f636b3a3a61636365707441646d696e3a2043616c6c206d75737420636f6d652066726f6d2070656e64696e6741646d696e2e54696d656c6f636b3a3a73657450656e64696e6741646d696e3a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b2e54696d656c6f636b3a3a71756575655472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e54696d656c6f636b3a3a71756575655472616e73616374696f6e3a20457374696d6174656420657865637574696f6e20626c6f636b206d75737420736174697366792064656c61792e54696d656c6f636b3a3a73657444656c61793a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b2ea265627a7a72315820857dcadf7a4ab22dea128a6b9f63f6fae4511f638de8defc87353875ec71c25a64736f6c6343000510003254696d656c6f636b3a3a636f6e7374727563746f723a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e"; diff --git a/libs/chains/src/eth/types/factories/Token__factory.ts b/libs/chains/src/eth/types/factories/Token__factory.ts deleted file mode 100644 index dd6e41150b2..00000000000 --- a/libs/chains/src/eth/types/factories/Token__factory.ts +++ /dev/null @@ -1,308 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BigNumberish, - Overrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { Token } from "../Token"; - -export class Token__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - supply: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): Promise { - return super.deploy(supply, overrides || {}) as Promise; - } - getDeployTransaction( - supply: BigNumberish, - overrides?: Overrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(supply, overrides || {}); - } - attach(address: string): Token { - return super.attach(address) as Token; - } - connect(signer: Signer): Token__factory { - return super.connect(signer) as Token__factory; - } - static connect(address: string, signerOrProvider: Signer | Provider): Token { - return new Contract(address, _abi, signerOrProvider) as Token; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "uint256", - name: "supply", - type: "uint256", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "subtractedValue", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "addedValue", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: true, - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, - { - constant: false, - inputs: [ - { - internalType: "address", - name: "from", - type: "address", - }, - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b506040516106113803806106118339818101604052602081101561003357600080fd5b505161004833826001600160e01b0361004e16565b50610119565b6001600160a01b03821661006157600080fd5b61007a8160025461010060201b61049b1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546100aa91839061049b610100821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008282018381101561011257600080fd5b9392505050565b6104e9806101286000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a0823114610149578063a457c2d71461016f578063a9059cbb1461019b578063dd62ed3e146101c757610088565b8063095ea7b31461008d57806318160ddd146100cd57806323b872dd146100e7578063395093511461011d575b600080fd5b6100b9600480360360408110156100a357600080fd5b506001600160a01b0381351690602001356101f5565b604080519115158252519081900360200190f35b6100d561020b565b60408051918252519081900360200190f35b6100b9600480360360608110156100fd57600080fd5b506001600160a01b03813581169160208101359091169060400135610211565b6100b96004803603604081101561013357600080fd5b506001600160a01b038135169060200135610268565b6100d56004803603602081101561015f57600080fd5b50356001600160a01b03166102a4565b6100b96004803603604081101561018557600080fd5b506001600160a01b0381351690602001356102bf565b6100b9600480360360408110156101b157600080fd5b506001600160a01b0381351690602001356102fb565b6100d5600480360360408110156101dd57600080fd5b506001600160a01b0381358116916020013516610308565b6000610202338484610333565b50600192915050565b60025490565b600061021e8484846103bb565b6001600160a01b03841660009081526001602090815260408083203380855292529091205461025e918691610259908663ffffffff61048616565b610333565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610202918590610259908663ffffffff61049b16565b6001600160a01b031660009081526020819052604090205490565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610202918590610259908663ffffffff61048616565b60006102023384846103bb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03821661034657600080fd5b6001600160a01b03831661035957600080fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0382166103ce57600080fd5b6001600160a01b0383166000908152602081905260409020546103f7908263ffffffff61048616565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461042c908263ffffffff61049b16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282111561049557600080fd5b50900390565b6000828201838110156104ad57600080fd5b939250505056fea265627a7a723158206bbecad43cd5c6d84d9075117ba886f2f9777f7267fffe0899f5aa910f6b6ba064736f6c63430005100032"; diff --git a/libs/chains/src/eth/types/factories/UpgradeabilityProxy__factory.ts b/libs/chains/src/eth/types/factories/UpgradeabilityProxy__factory.ts deleted file mode 100644 index 347cbaecb0e..00000000000 --- a/libs/chains/src/eth/types/factories/UpgradeabilityProxy__factory.ts +++ /dev/null @@ -1,91 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import type { - Signer, - BytesLike, - PayableOverrides} from "ethers"; -import { - Contract, - ContractFactory -} from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; - -import type { UpgradeabilityProxy } from "../UpgradeabilityProxy"; - -export class UpgradeabilityProxy__factory extends ContractFactory { - constructor(signer?: Signer) { - super(_abi, _bytecode, signer); - } - - deploy( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise { - return super.deploy( - _logic, - _data, - overrides || {} - ) as Promise; - } - getDeployTransaction( - _logic: string, - _data: BytesLike, - overrides?: PayableOverrides & { from?: string | Promise } - ): TransactionRequest { - return super.getDeployTransaction(_logic, _data, overrides || {}); - } - attach(address: string): UpgradeabilityProxy { - return super.attach(address) as UpgradeabilityProxy; - } - connect(signer: Signer): UpgradeabilityProxy__factory { - return super.connect(signer) as UpgradeabilityProxy__factory; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): UpgradeabilityProxy { - return new Contract(address, _abi, signerOrProvider) as UpgradeabilityProxy; - } -} - -const _abi = [ - { - inputs: [ - { - internalType: "address", - name: "_logic", - type: "address", - }, - { - internalType: "bytes", - name: "_data", - type: "bytes", - }, - ], - stateMutability: "payable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "implementation", - type: "address", - }, - ], - name: "Upgraded", - type: "event", - }, - { - stateMutability: "payable", - type: "fallback", - }, -]; - -const _bytecode = - "0x608060405260405161037b38038061037b8339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ec826101ab565b8051156101a4576000826001600160a01b0316826040518082805190602001908083835b6020831061012f5780518252601f199092019160209182019101610110565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461018f576040519150601f19603f3d011682016040523d82523d6000602084013e610194565b606091505b50509050806101a257600080fd5b505b5050610259565b6101be8161021d60201b6100201760201c565b6101f95760405162461bcd60e51b815260040180806020018281038252603b815260200180610340603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061025157508115155b949350505050565b60d9806102676000396000f3fe6080604052600a600c565b005b6012601e565b601e601a605b565b6080565b565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590605357508115155b949350505050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015609e573d6000f35b3d6000fdfea2646970667358221220689b6635aacb183e8aaf9973d395782d593bad05bf942212a114a7024416a5d164736f6c6343000705003343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373"; diff --git a/libs/chains/src/eth/types/index.ts b/libs/chains/src/eth/types/index.ts deleted file mode 100644 index 6fec6fcb91d..00000000000 --- a/libs/chains/src/eth/types/index.ts +++ /dev/null @@ -1,190 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { IERC20 } from "./IERC20"; -export type { IGovernancePowerDelegationToken } from "./IGovernancePowerDelegationToken"; -export type { ITransferHook } from "./ITransferHook"; -export type { ERC20 } from "./ERC20"; -export type { AaveToken } from "./AaveToken"; -export type { AaveTokenV2 } from "./AaveTokenV2"; -export type { GovernancePowerDelegationERC20 } from "./GovernancePowerDelegationERC20"; -export type { AccessControl } from "./AccessControl"; -export type { IAccessControl } from "./IAccessControl"; -export type { GovernorCompatibilityBravo } from "./GovernorCompatibilityBravo"; -export type { IGovernorCompatibilityBravo } from "./IGovernorCompatibilityBravo"; -export type { GovernorCountingSimple } from "./GovernorCountingSimple"; -export type { GovernorProposalThreshold } from "./GovernorProposalThreshold"; -export type { GovernorTimelockCompound } from "./GovernorTimelockCompound"; -export type { ICompoundTimelock } from "./ICompoundTimelock"; -export type { GovernorTimelockControl } from "./GovernorTimelockControl"; -export type { GovernorVotes } from "./GovernorVotes"; -export type { GovernorVotesComp } from "./GovernorVotesComp"; -export type { GovernorVotesQuorumFraction } from "./GovernorVotesQuorumFraction"; -export type { IGovernorTimelock } from "./IGovernorTimelock"; -export type { Governor } from "./Governor"; -export type { IGovernor } from "./IGovernor"; -export type { TimelockController } from "./TimelockController"; -export type { ERC1155 } from "./ERC1155"; -export type { IERC1155MetadataURI } from "./IERC1155MetadataURI"; -export type { IERC1155 } from "./IERC1155"; -export type { IERC1155Receiver } from "./IERC1155Receiver"; -export type { ERC20Permit } from "./ERC20Permit"; -export type { IERC20Permit } from "./IERC20Permit"; -export type { ERC20Votes } from "./ERC20Votes"; -export type { ERC20VotesComp } from "./ERC20VotesComp"; -export type { IERC20Metadata } from "./IERC20Metadata"; -export type { ERC721 } from "./ERC721"; -export type { IERC721Metadata } from "./IERC721Metadata"; -export type { IERC721 } from "./IERC721"; -export type { IERC721Receiver } from "./IERC721Receiver"; -export type { ERC165 } from "./ERC165"; -export type { IERC165 } from "./IERC165"; -export type { Context } from "./Context"; -export type { IERC1820Registry } from "./IERC1820Registry"; -export type { Ownable } from "./Ownable"; -export type { ERC777 } from "./ERC777"; -export type { IERC777 } from "./IERC777"; -export type { IERC777Recipient } from "./IERC777Recipient"; -export type { IERC777Sender } from "./IERC777Sender"; -export type { BaseAdminUpgradeabilityProxy } from "./BaseAdminUpgradeabilityProxy"; -export type { BaseUpgradeabilityProxy } from "./BaseUpgradeabilityProxy"; -export type { InitializableAdminUpgradeabilityProxy } from "./InitializableAdminUpgradeabilityProxy"; -export type { InitializableUpgradeabilityProxy } from "./InitializableUpgradeabilityProxy"; -export type { Proxy } from "./Proxy"; -export type { UpgradeabilityProxy } from "./UpgradeabilityProxy"; -export type { AaveGovernanceV2 } from "./AaveGovernanceV2"; -export type { Executor } from "./Executor"; -export type { ExecutorWithTimelock } from "./ExecutorWithTimelock"; -export type { GovernanceStrategy } from "./GovernanceStrategy"; -export type { ProposalValidator } from "./ProposalValidator"; -export type { IAaveGovernanceV2 } from "./IAaveGovernanceV2"; -export type { IExecutorWithTimelock } from "./IExecutorWithTimelock"; -export type { IGovernanceStrategy } from "./IGovernanceStrategy"; -export type { IProposalValidator } from "./IProposalValidator"; -export type { IVotingStrategy } from "./IVotingStrategy"; -export type { AaveTokenV1Mock } from "./AaveTokenV1Mock"; -export type { AaveTokenV2Mock } from "./AaveTokenV2Mock"; -export type { FlashAttacks } from "./FlashAttacks"; -export type { SelfdestructTransfer } from "./SelfdestructTransfer"; -export type { ICuratedProject } from "./ICuratedProject"; -export type { ICuratedProjectFactory } from "./ICuratedProjectFactory"; -export type { IProjectBase } from "./IProjectBase"; -export type { IProjectBaseFactory } from "./IProjectBaseFactory"; -export type { ERC20VotesMock } from "./ERC20VotesMock"; -export type { FeiDAO } from "./FeiDAO"; -export type { GovernorAlpha } from "./GovernorAlpha"; -export type { MPondInterface } from "./MPondInterface"; -export type { TimelockInterface } from "./TimelockInterface"; -export type { GovernorAlphaMock } from "./GovernorAlphaMock"; -export type { GovernorBravoDelegate } from "./GovernorBravoDelegate"; -export type { GovernorBravoDelegateMock } from "./GovernorBravoDelegateMock"; -export type { GovernorBravoDelegator } from "./GovernorBravoDelegator"; -export type { GovernorBravoImmutable } from "./GovernorBravoImmutable"; -export type { CompInterface } from "./CompInterface"; -export type { GovernorBravoDelegateStorageV1 } from "./GovernorBravoDelegateStorageV1"; -export type { GovernorBravoDelegatorStorage } from "./GovernorBravoDelegatorStorage"; -export type { GovernorBravoEvents } from "./GovernorBravoEvents"; -export type { GovernorMock } from "./GovernorMock"; -export type { MPond } from "./MPond"; -export type { Timelock } from "./Timelock"; -export type { TimelockMock } from "./TimelockMock"; -export type { ERC1155Mintable } from "./ERC1155Mintable"; -export type { ERC721Mintable } from "./ERC721Mintable"; -export type { Migrations } from "./Migrations"; -export type { GuildBank1 } from "./GuildBank1"; -export type { Token } from "./Token"; -export type { GuildBank2 } from "./GuildBank2"; -export type { Helper } from "./Helper"; - -export { IERC20__factory } from "./factories/IERC20__factory"; -export { IGovernancePowerDelegationToken__factory } from "./factories/IGovernancePowerDelegationToken__factory"; -export { ITransferHook__factory } from "./factories/ITransferHook__factory"; -export { ERC20__factory } from "./factories/ERC20__factory"; -export { AaveToken__factory } from "./factories/AaveToken__factory"; -export { AaveTokenV2__factory } from "./factories/AaveTokenV2__factory"; -export { GovernancePowerDelegationERC20__factory } from "./factories/GovernancePowerDelegationERC20__factory"; -export { AccessControl__factory } from "./factories/AccessControl__factory"; -export { IAccessControl__factory } from "./factories/IAccessControl__factory"; -export { GovernorCompatibilityBravo__factory } from "./factories/GovernorCompatibilityBravo__factory"; -export { IGovernorCompatibilityBravo__factory } from "./factories/IGovernorCompatibilityBravo__factory"; -export { GovernorCountingSimple__factory } from "./factories/GovernorCountingSimple__factory"; -export { GovernorProposalThreshold__factory } from "./factories/GovernorProposalThreshold__factory"; -export { GovernorTimelockCompound__factory } from "./factories/GovernorTimelockCompound__factory"; -export { ICompoundTimelock__factory } from "./factories/ICompoundTimelock__factory"; -export { GovernorTimelockControl__factory } from "./factories/GovernorTimelockControl__factory"; -export { GovernorVotes__factory } from "./factories/GovernorVotes__factory"; -export { GovernorVotesComp__factory } from "./factories/GovernorVotesComp__factory"; -export { GovernorVotesQuorumFraction__factory } from "./factories/GovernorVotesQuorumFraction__factory"; -export { IGovernorTimelock__factory } from "./factories/IGovernorTimelock__factory"; -export { Governor__factory } from "./factories/Governor__factory"; -export { IGovernor__factory } from "./factories/IGovernor__factory"; -export { TimelockController__factory } from "./factories/TimelockController__factory"; -export { ERC1155__factory } from "./factories/ERC1155__factory"; -export { IERC1155MetadataURI__factory } from "./factories/IERC1155MetadataURI__factory"; -export { IERC1155__factory } from "./factories/IERC1155__factory"; -export { IERC1155Receiver__factory } from "./factories/IERC1155Receiver__factory"; -export { ERC20Permit__factory } from "./factories/ERC20Permit__factory"; -export { IERC20Permit__factory } from "./factories/IERC20Permit__factory"; -export { ERC20Votes__factory } from "./factories/ERC20Votes__factory"; -export { ERC20VotesComp__factory } from "./factories/ERC20VotesComp__factory"; -export { ERC721__factory } from "./factories/ERC721__factory"; -export { IERC721__factory } from "./factories/IERC721__factory"; -export { IERC721Receiver__factory } from "./factories/IERC721Receiver__factory"; -export { ERC165__factory } from "./factories/ERC165__factory"; -export { IERC165__factory } from "./factories/IERC165__factory"; -export { Context__factory } from "./factories/Context__factory"; -export { IERC1820Registry__factory } from "./factories/IERC1820Registry__factory"; -export { Ownable__factory } from "./factories/Ownable__factory"; -export { ERC777__factory } from "./factories/ERC777__factory"; -export { IERC777__factory } from "./factories/IERC777__factory"; -export { IERC777Recipient__factory } from "./factories/IERC777Recipient__factory"; -export { IERC777Sender__factory } from "./factories/IERC777Sender__factory"; -export { BaseAdminUpgradeabilityProxy__factory } from "./factories/BaseAdminUpgradeabilityProxy__factory"; -export { BaseUpgradeabilityProxy__factory } from "./factories/BaseUpgradeabilityProxy__factory"; -export { InitializableAdminUpgradeabilityProxy__factory } from "./factories/InitializableAdminUpgradeabilityProxy__factory"; -export { InitializableUpgradeabilityProxy__factory } from "./factories/InitializableUpgradeabilityProxy__factory"; -export { Proxy__factory } from "./factories/Proxy__factory"; -export { UpgradeabilityProxy__factory } from "./factories/UpgradeabilityProxy__factory"; -export { AaveGovernanceV2__factory } from "./factories/AaveGovernanceV2__factory"; -export { Executor__factory } from "./factories/Executor__factory"; -export { ExecutorWithTimelock__factory } from "./factories/ExecutorWithTimelock__factory"; -export { GovernanceStrategy__factory } from "./factories/GovernanceStrategy__factory"; -export { ProposalValidator__factory } from "./factories/ProposalValidator__factory"; -export { IAaveGovernanceV2__factory } from "./factories/IAaveGovernanceV2__factory"; -export { IExecutorWithTimelock__factory } from "./factories/IExecutorWithTimelock__factory"; -export { IGovernanceStrategy__factory } from "./factories/IGovernanceStrategy__factory"; -export { IProposalValidator__factory } from "./factories/IProposalValidator__factory"; -export { IVotingStrategy__factory } from "./factories/IVotingStrategy__factory"; -export { AaveTokenV1Mock__factory } from "./factories/AaveTokenV1Mock__factory"; -export { AaveTokenV2Mock__factory } from "./factories/AaveTokenV2Mock__factory"; -export { FlashAttacks__factory } from "./factories/FlashAttacks__factory"; -export { SelfdestructTransfer__factory } from "./factories/SelfdestructTransfer__factory"; -export { ICuratedProject__factory } from "./factories/ICuratedProject__factory"; -export { ICuratedProjectFactory__factory } from "./factories/ICuratedProjectFactory__factory"; -export { IProjectBase__factory } from "./factories/IProjectBase__factory"; -export { IProjectBaseFactory__factory } from "./factories/IProjectBaseFactory__factory"; -export { ERC20VotesMock__factory } from "./factories/ERC20VotesMock__factory"; -export { FeiDAO__factory } from "./factories/FeiDAO__factory"; -export { GovernorAlpha__factory } from "./factories/GovernorAlpha__factory"; -export { MPondInterface__factory } from "./factories/MPondInterface__factory"; -export { TimelockInterface__factory } from "./factories/TimelockInterface__factory"; -export { GovernorAlphaMock__factory } from "./factories/GovernorAlphaMock__factory"; -export { GovernorBravoDelegate__factory } from "./factories/GovernorBravoDelegate__factory"; -export { GovernorBravoDelegateMock__factory } from "./factories/GovernorBravoDelegateMock__factory"; -export { GovernorBravoDelegator__factory } from "./factories/GovernorBravoDelegator__factory"; -export { GovernorBravoImmutable__factory } from "./factories/GovernorBravoImmutable__factory"; -export { CompInterface__factory } from "./factories/CompInterface__factory"; -export { GovernorBravoDelegateStorageV1__factory } from "./factories/GovernorBravoDelegateStorageV1__factory"; -export { GovernorBravoDelegatorStorage__factory } from "./factories/GovernorBravoDelegatorStorage__factory"; -export { GovernorBravoEvents__factory } from "./factories/GovernorBravoEvents__factory"; -export { GovernorMock__factory } from "./factories/GovernorMock__factory"; -export { MPond__factory } from "./factories/MPond__factory"; -export { Timelock__factory } from "./factories/Timelock__factory"; -export { TimelockMock__factory } from "./factories/TimelockMock__factory"; -export { ERC1155Mintable__factory } from "./factories/ERC1155Mintable__factory"; -export { ERC721Mintable__factory } from "./factories/ERC721Mintable__factory"; -export { Migrations__factory } from "./factories/Migrations__factory"; -export { GuildBank1__factory } from "./factories/GuildBank1__factory"; -export { Token__factory } from "./factories/Token__factory"; -export { GuildBank2__factory } from "./factories/GuildBank2__factory"; -export { Helper__factory } from "./factories/Helper__factory"; diff --git a/libs/chains/src/index.ts b/libs/chains/src/index.ts index 044dfca2f76..760d4e7e524 100644 --- a/libs/chains/src/index.ts +++ b/libs/chains/src/index.ts @@ -20,7 +20,3 @@ export { LCDQueryClient as GovV1Client } from './cosmos-ts/src/codegen/cosmos/go export { createLCDClient } from './cosmos-ts/src/codegen/cosmos/lcd'; export * from './cosmos-ts/src/codegen/google/protobuf/any'; export * from './cosmos-ts/src/codegen/helpers'; -export * from './eth/types'; -export type { IGovernanceV2Helper } from './eth/types/IGovernanceV2Helper'; -export * from './eth/types/commons'; -export { IGovernanceV2Helper__factory } from './eth/types/factories/IGovernanceV2Helper__factory'; diff --git a/libs/evm-testing/src/sdk/chainTesting.ts b/libs/evm-testing/src/sdk/chainTesting.ts index 10bfdb3c987..d87f8833405 100644 --- a/libs/evm-testing/src/sdk/chainTesting.ts +++ b/libs/evm-testing/src/sdk/chainTesting.ts @@ -6,9 +6,6 @@ import erc_1155_abi from '../utils/abi/erc1155'; import erc_721_abi from '../utils/abi/erc721'; import { advanceTime, mineBlocks } from '../utils/chainUtil'; import getProvider from '../utils/getProvider'; -import { IGovernor } from '../utils/governance/IGovernor'; -import { aaveGovernor } from '../utils/governance/aaveGov'; -import { compoundGovernor } from '../utils/governance/compoundGov'; import { ERC1155 } from './erc1155'; import { ERC20 } from './erc20'; import { ERC721 } from './nft'; @@ -51,122 +48,6 @@ export class ChainTesting extends SdkBase { return new ERC20(tokenAddress); } - // Proposal - /** - * Get voting power via ERC20 token for a given wallet - * @param accountIndex account index of test chain to get tokens - * @param numberOfVotes amount of votes/tokens to receive - * @param govType type of governor. 'compound' || 'aave - */ - public async getVotingPower( - accountIndex: number, - numberOfVotes: string, - govType: 'compound' | 'aave' = 'compound', - ) { - const gov: IGovernor = - govType === 'compound' ? new compoundGovernor() : new aaveGovernor(); - return await gov.getVotes(accountIndex, numberOfVotes); - } - - /** - * Creates an arbitrary Compound proposal - * @param accountIndex the index of accounts to create from - * @param govType type of governor. 'compound' || 'aave - * @returns proposalId of create Proposal - */ - public async createProposal( - accountIndex: number, - govType = 'compound', - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const gov: IGovernor = - govType === 'compound' ? new compoundGovernor() : new aaveGovernor(); - return await gov.createArbitraryProposal(accountIndex); - } - - /** - * Cancel a proposal - * @param proposalId proposal Id to cancel - * @param govType type of governor. 'compound' || 'aave - * @returns proposalId of cancelled - */ - public async cancelProposal( - proposalId: string, - govType = 'compound', - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const gov: IGovernor = - govType === 'compound' ? new compoundGovernor() : new aaveGovernor(); - return await gov.cancelProposal(proposalId); - } - - /** - * Cast a vote for an account on a proposal - * @param proposalId proposal to vote on - * @param accountIndex account index to vote - * @param forAgainst vote for or against - * @param govType type of governor. 'compound' || 'aave - */ - public async castVote( - proposalId: string, - accountIndex: number, - forAgainst: boolean, - govType = 'compound', - ) { - const gov: IGovernor = - govType === 'compound' ? new compoundGovernor() : new aaveGovernor(); - return await gov.castVote(proposalId, accountIndex, forAgainst); - } - - /** - * Queue a proposal for execution - * @param proposalId - * @param govType type of governor. 'compound' || 'aave - */ - public async queueProposal( - proposalId: string, - govType = 'compound', - ): Promise<{ block: number }> { - const gov: IGovernor = - govType === 'compound' ? new compoundGovernor() : new aaveGovernor(); - return await gov.queueProposal(proposalId, true); - } - - /** - * execute a passed proposal - * @param proposalId - * @param govType type of governor. 'compound' || 'aave - */ - public async executeProposal(proposalId: string, govType = 'compound') { - const gov: IGovernor = - govType === 'compound' ? new compoundGovernor() : new aaveGovernor(); - return await gov.executeProposal(proposalId, true); - } - - /** - * Runs a full proposal cycle from getting voting power to execution - * @param govType type of governor. 'compound' || 'aave - */ - public async runProposalCycle(govType = 'compound') { - const gov: IGovernor = - govType === 'compound' ? new compoundGovernor() : new aaveGovernor(); - await gov.endToEndSim(); - - return true; - } - - /** - * get current details of a proposal - * @param proposalId - * @param govType type of governor. 'compound' || 'aave - * @returns JSON data of proposal - */ - public async getProposalDetails(proposalId: string, govType = 'compound') { - const gov: IGovernor = - govType === 'compound' ? new compoundGovernor() : new aaveGovernor(); - return await gov.getProposalDetails(proposalId); - } - // Chain Data /** * gets availble, unlocked test chain accounts diff --git a/libs/evm-testing/src/utils/abi/aaveGov.ts b/libs/evm-testing/src/utils/abi/aaveGov.ts deleted file mode 100644 index e1dcb57be95..00000000000 --- a/libs/evm-testing/src/utils/abi/aaveGov.ts +++ /dev/null @@ -1,483 +0,0 @@ -const aave_gov = [ - { - inputs: [ - { internalType: 'address', name: 'governanceStrategy', type: 'address' }, - { internalType: 'uint256', name: 'votingDelay', type: 'uint256' }, - { internalType: 'address', name: 'guardian', type: 'address' }, - { internalType: 'address[]', name: 'executors', type: 'address[]' }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'executor', - type: 'address', - }, - ], - name: 'ExecutorAuthorized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'executor', - type: 'address', - }, - ], - name: 'ExecutorUnauthorized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'newStrategy', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorChange', - type: 'address', - }, - ], - name: 'GovernanceStrategyChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'uint256', name: 'id', type: 'uint256' }, - ], - name: 'ProposalCanceled', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'uint256', name: 'id', type: 'uint256' }, - { - indexed: true, - internalType: 'address', - name: 'creator', - type: 'address', - }, - { - indexed: true, - internalType: 'contract IExecutorWithTimelock', - name: 'executor', - type: 'address', - }, - { - indexed: false, - internalType: 'address[]', - name: 'targets', - type: 'address[]', - }, - { - indexed: false, - internalType: 'uint256[]', - name: 'values', - type: 'uint256[]', - }, - { - indexed: false, - internalType: 'string[]', - name: 'signatures', - type: 'string[]', - }, - { - indexed: false, - internalType: 'bytes[]', - name: 'calldatas', - type: 'bytes[]', - }, - { - indexed: false, - internalType: 'bool[]', - name: 'withDelegatecalls', - type: 'bool[]', - }, - { - indexed: false, - internalType: 'uint256', - name: 'startBlock', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'endBlock', - type: 'uint256', - }, - { - indexed: false, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'ipfsHash', - type: 'bytes32', - }, - ], - name: 'ProposalCreated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'uint256', name: 'id', type: 'uint256' }, - { - indexed: true, - internalType: 'address', - name: 'initiatorExecution', - type: 'address', - }, - ], - name: 'ProposalExecuted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'uint256', name: 'id', type: 'uint256' }, - { - indexed: false, - internalType: 'uint256', - name: 'executionTime', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorQueueing', - type: 'address', - }, - ], - name: 'ProposalQueued', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'uint256', name: 'id', type: 'uint256' }, - { - indexed: true, - internalType: 'address', - name: 'voter', - type: 'address', - }, - { indexed: false, internalType: 'bool', name: 'support', type: 'bool' }, - { - indexed: false, - internalType: 'uint256', - name: 'votingPower', - type: 'uint256', - }, - ], - name: 'VoteEmitted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'newVotingDelay', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'initiatorChange', - type: 'address', - }, - ], - name: 'VotingDelayChanged', - type: 'event', - }, - { - inputs: [], - name: 'DOMAIN_TYPEHASH', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'NAME', - outputs: [{ internalType: 'string', name: '', type: 'string' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'VOTE_EMITTED_TYPEHASH', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: '__abdicate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { internalType: 'address[]', name: 'executors', type: 'address[]' }, - ], - name: 'authorizeExecutors', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'cancel', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'contract IExecutorWithTimelock', - name: 'executor', - type: 'address', - }, - { internalType: 'address[]', name: 'targets', type: 'address[]' }, - { internalType: 'uint256[]', name: 'values', type: 'uint256[]' }, - { internalType: 'string[]', name: 'signatures', type: 'string[]' }, - { internalType: 'bytes[]', name: 'calldatas', type: 'bytes[]' }, - { internalType: 'bool[]', name: 'withDelegatecalls', type: 'bool[]' }, - { internalType: 'bytes32', name: 'ipfsHash', type: 'bytes32' }, - ], - name: 'create', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'execute', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'getGovernanceStrategy', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getGuardian', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'getProposalById', - outputs: [ - { - components: [ - { internalType: 'uint256', name: 'id', type: 'uint256' }, - { internalType: 'address', name: 'creator', type: 'address' }, - { - internalType: 'contract IExecutorWithTimelock', - name: 'executor', - type: 'address', - }, - { internalType: 'address[]', name: 'targets', type: 'address[]' }, - { internalType: 'uint256[]', name: 'values', type: 'uint256[]' }, - { internalType: 'string[]', name: 'signatures', type: 'string[]' }, - { internalType: 'bytes[]', name: 'calldatas', type: 'bytes[]' }, - { internalType: 'bool[]', name: 'withDelegatecalls', type: 'bool[]' }, - { internalType: 'uint256', name: 'startBlock', type: 'uint256' }, - { internalType: 'uint256', name: 'endBlock', type: 'uint256' }, - { internalType: 'uint256', name: 'executionTime', type: 'uint256' }, - { internalType: 'uint256', name: 'forVotes', type: 'uint256' }, - { internalType: 'uint256', name: 'againstVotes', type: 'uint256' }, - { internalType: 'bool', name: 'executed', type: 'bool' }, - { internalType: 'bool', name: 'canceled', type: 'bool' }, - { internalType: 'address', name: 'strategy', type: 'address' }, - { internalType: 'bytes32', name: 'ipfsHash', type: 'bytes32' }, - ], - internalType: 'struct IAaveGovernanceV2.ProposalWithoutVotes', - name: '', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'getProposalState', - outputs: [ - { - internalType: 'enum IAaveGovernanceV2.ProposalState', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getProposalsCount', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { internalType: 'uint256', name: 'proposalId', type: 'uint256' }, - { internalType: 'address', name: 'voter', type: 'address' }, - ], - name: 'getVoteOnProposal', - outputs: [ - { - components: [ - { internalType: 'bool', name: 'support', type: 'bool' }, - { internalType: 'uint248', name: 'votingPower', type: 'uint248' }, - ], - internalType: 'struct IAaveGovernanceV2.Vote', - name: '', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getVotingDelay', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [{ internalType: 'address', name: 'executor', type: 'address' }], - name: 'isExecutorAuthorized', - outputs: [{ internalType: 'bool', name: '', type: 'bool' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'queue', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { internalType: 'address', name: 'governanceStrategy', type: 'address' }, - ], - name: 'setGovernanceStrategy', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [{ internalType: 'uint256', name: 'votingDelay', type: 'uint256' }], - name: 'setVotingDelay', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { internalType: 'uint256', name: 'proposalId', type: 'uint256' }, - { internalType: 'bool', name: 'support', type: 'bool' }, - ], - name: 'submitVote', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { internalType: 'uint256', name: 'proposalId', type: 'uint256' }, - { internalType: 'bool', name: 'support', type: 'bool' }, - { internalType: 'uint8', name: 'v', type: 'uint8' }, - { internalType: 'bytes32', name: 'r', type: 'bytes32' }, - { internalType: 'bytes32', name: 's', type: 'bytes32' }, - ], - name: 'submitVoteBySignature', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [{ internalType: 'address', name: 'newOwner', type: 'address' }], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { internalType: 'address[]', name: 'executors', type: 'address[]' }, - ], - name: 'unauthorizeExecutors', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, -]; -export default aave_gov; diff --git a/libs/evm-testing/src/utils/abi/compGov.ts b/libs/evm-testing/src/utils/abi/compGov.ts deleted file mode 100644 index b64fb683170..00000000000 --- a/libs/evm-testing/src/utils/abi/compGov.ts +++ /dev/null @@ -1,756 +0,0 @@ -const comp_gov = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'oldAdmin', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newAdmin', - type: 'address', - }, - ], - name: 'NewAdmin', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'oldImplementation', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newImplementation', - type: 'address', - }, - ], - name: 'NewImplementation', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'oldPendingAdmin', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newPendingAdmin', - type: 'address', - }, - ], - name: 'NewPendingAdmin', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'uint256', name: 'id', type: 'uint256' }, - ], - name: 'ProposalCanceled', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'uint256', name: 'id', type: 'uint256' }, - { - indexed: false, - internalType: 'address', - name: 'proposer', - type: 'address', - }, - { - indexed: false, - internalType: 'address[]', - name: 'targets', - type: 'address[]', - }, - { - indexed: false, - internalType: 'uint256[]', - name: 'values', - type: 'uint256[]', - }, - { - indexed: false, - internalType: 'string[]', - name: 'signatures', - type: 'string[]', - }, - { - indexed: false, - internalType: 'bytes[]', - name: 'calldatas', - type: 'bytes[]', - }, - { - indexed: false, - internalType: 'uint256', - name: 'startBlock', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'endBlock', - type: 'uint256', - }, - { - indexed: false, - internalType: 'string', - name: 'description', - type: 'string', - }, - ], - name: 'ProposalCreated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'uint256', name: 'id', type: 'uint256' }, - ], - name: 'ProposalExecuted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'uint256', name: 'id', type: 'uint256' }, - { indexed: false, internalType: 'uint256', name: 'eta', type: 'uint256' }, - ], - name: 'ProposalQueued', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'oldProposalThreshold', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'newProposalThreshold', - type: 'uint256', - }, - ], - name: 'ProposalThresholdSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'voter', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'proposalId', - type: 'uint256', - }, - { indexed: false, internalType: 'uint8', name: 'support', type: 'uint8' }, - { - indexed: false, - internalType: 'uint256', - name: 'votes', - type: 'uint256', - }, - { - indexed: false, - internalType: 'string', - name: 'reason', - type: 'string', - }, - ], - name: 'VoteCast', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'oldVotingDelay', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'newVotingDelay', - type: 'uint256', - }, - ], - name: 'VotingDelaySet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'oldVotingPeriod', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'newVotingPeriod', - type: 'uint256', - }, - ], - name: 'VotingPeriodSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'expiration', - type: 'uint256', - }, - ], - name: 'WhitelistAccountExpirationSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'oldGuardian', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newGuardian', - type: 'address', - }, - ], - name: 'WhitelistGuardianSet', - type: 'event', - }, - { - constant: true, - inputs: [], - name: 'BALLOT_TYPEHASH', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'DOMAIN_TYPEHASH', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MAX_PROPOSAL_THRESHOLD', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MAX_VOTING_DELAY', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MAX_VOTING_PERIOD', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MIN_PROPOSAL_THRESHOLD', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MIN_VOTING_DELAY', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MIN_VOTING_PERIOD', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [], - name: '_acceptAdmin', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'address', name: 'governorAlpha', type: 'address' }, - ], - name: '_initiate', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'address', name: 'newPendingAdmin', type: 'address' }, - ], - name: '_setPendingAdmin', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: 'newProposalThreshold', - type: 'uint256', - }, - ], - name: '_setProposalThreshold', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'uint256', name: 'newVotingDelay', type: 'uint256' }, - ], - name: '_setVotingDelay', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'uint256', name: 'newVotingPeriod', type: 'uint256' }, - ], - name: '_setVotingPeriod', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'address', name: 'account', type: 'address' }, - { internalType: 'uint256', name: 'expiration', type: 'uint256' }, - ], - name: '_setWhitelistAccountExpiration', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [{ internalType: 'address', name: 'account', type: 'address' }], - name: '_setWhitelistGuardian', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'admin', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'cancel', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'uint256', name: 'proposalId', type: 'uint256' }, - { internalType: 'uint8', name: 'support', type: 'uint8' }, - ], - name: 'castVote', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'uint256', name: 'proposalId', type: 'uint256' }, - { internalType: 'uint8', name: 'support', type: 'uint8' }, - { internalType: 'uint8', name: 'v', type: 'uint8' }, - { internalType: 'bytes32', name: 'r', type: 'bytes32' }, - { internalType: 'bytes32', name: 's', type: 'bytes32' }, - ], - name: 'castVoteBySig', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'uint256', name: 'proposalId', type: 'uint256' }, - { internalType: 'uint8', name: 'support', type: 'uint8' }, - { internalType: 'string', name: 'reason', type: 'string' }, - ], - name: 'castVoteWithReason', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'comp', - outputs: [ - { internalType: 'contract CompInterface', name: '', type: 'address' }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'execute', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'getActions', - outputs: [ - { internalType: 'address[]', name: 'targets', type: 'address[]' }, - { internalType: 'uint256[]', name: 'values', type: 'uint256[]' }, - { internalType: 'string[]', name: 'signatures', type: 'string[]' }, - { internalType: 'bytes[]', name: 'calldatas', type: 'bytes[]' }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { internalType: 'uint256', name: 'proposalId', type: 'uint256' }, - { internalType: 'address', name: 'voter', type: 'address' }, - ], - name: 'getReceipt', - outputs: [ - { - components: [ - { internalType: 'bool', name: 'hasVoted', type: 'bool' }, - { internalType: 'uint8', name: 'support', type: 'uint8' }, - { internalType: 'uint96', name: 'votes', type: 'uint96' }, - ], - internalType: 'struct GovernorBravoDelegateStorageV1.Receipt', - name: '', - type: 'tuple', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'implementation', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'initialProposalId', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'address', name: 'timelock_', type: 'address' }, - { internalType: 'address', name: 'comp_', type: 'address' }, - { internalType: 'uint256', name: 'votingPeriod_', type: 'uint256' }, - { internalType: 'uint256', name: 'votingDelay_', type: 'uint256' }, - { internalType: 'uint256', name: 'proposalThreshold_', type: 'uint256' }, - ], - name: 'initialize', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [{ internalType: 'address', name: 'account', type: 'address' }], - name: 'isWhitelisted', - outputs: [{ internalType: 'bool', name: '', type: 'bool' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [{ internalType: 'address', name: '', type: 'address' }], - name: 'latestProposalIds', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'name', - outputs: [{ internalType: 'string', name: '', type: 'string' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'pendingAdmin', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'proposalCount', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'proposalMaxOperations', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'proposalThreshold', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - name: 'proposals', - outputs: [ - { internalType: 'uint256', name: 'id', type: 'uint256' }, - { internalType: 'address', name: 'proposer', type: 'address' }, - { internalType: 'uint256', name: 'eta', type: 'uint256' }, - { internalType: 'uint256', name: 'startBlock', type: 'uint256' }, - { internalType: 'uint256', name: 'endBlock', type: 'uint256' }, - { internalType: 'uint256', name: 'forVotes', type: 'uint256' }, - { internalType: 'uint256', name: 'againstVotes', type: 'uint256' }, - { internalType: 'uint256', name: 'abstainVotes', type: 'uint256' }, - { internalType: 'bool', name: 'canceled', type: 'bool' }, - { internalType: 'bool', name: 'executed', type: 'bool' }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { internalType: 'address[]', name: 'targets', type: 'address[]' }, - { internalType: 'uint256[]', name: 'values', type: 'uint256[]' }, - { internalType: 'string[]', name: 'signatures', type: 'string[]' }, - { internalType: 'bytes[]', name: 'calldatas', type: 'bytes[]' }, - { internalType: 'string', name: 'description', type: 'string' }, - ], - name: 'propose', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'queue', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'quorumVotes', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [{ internalType: 'uint256', name: 'proposalId', type: 'uint256' }], - name: 'state', - outputs: [ - { - internalType: 'enum GovernorBravoDelegateStorageV1.ProposalState', - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'timelock', - outputs: [ - { internalType: 'contract TimelockInterface', name: '', type: 'address' }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'votingDelay', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'votingPeriod', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [{ internalType: 'address', name: '', type: 'address' }], - name: 'whitelistAccountExpirations', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'whitelistGuardian', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - payable: false, - stateMutability: 'view', - type: 'function', - }, -]; - -export default comp_gov; diff --git a/libs/evm-testing/src/utils/contracts.ts b/libs/evm-testing/src/utils/contracts.ts index 1ed3d420e2a..5f93b66d84f 100644 --- a/libs/evm-testing/src/utils/contracts.ts +++ b/libs/evm-testing/src/utils/contracts.ts @@ -2,8 +2,6 @@ import Web3 from 'web3'; import { AbiItem } from 'web3-utils'; import { communityStakesAbi } from './abi/CommunityStakesAbi'; import { namespaceFactoryAbi } from './abi/NamespaceFactoryAbi'; -import aave_gov_abi from './abi/aaveGov'; -import comp_gov_abi from './abi/compGov'; import dex_abi from './abi/dex'; import erc_1155_abi from './abi/erc1155'; import erc20_abi from './abi/erc20'; @@ -17,14 +15,6 @@ export const uniswapV2 = (address: string, provider: Web3) => { return new provider.eth.Contract(dex_abi as AbiItem[], address); }; -export const comp_gov = (address: string, provider: Web3) => { - return new provider.eth.Contract(comp_gov_abi as AbiItem[], address); -}; - -export const aave_gov = (address: string, provider: Web3) => { - return new provider.eth.Contract(aave_gov_abi as AbiItem[], address); -}; - export const erc_721 = (address: string, provider: Web3) => { return new provider.eth.Contract(erc_721_abi as AbiItem[], address); }; diff --git a/libs/evm-testing/src/utils/governance/IGovernor.ts b/libs/evm-testing/src/utils/governance/IGovernor.ts deleted file mode 100644 index 297a2249276..00000000000 --- a/libs/evm-testing/src/utils/governance/IGovernor.ts +++ /dev/null @@ -1,39 +0,0 @@ -export interface IGovernor { - readonly contractAddress: string; - - createArbitraryProposal: ( - accountIndex: number, - advanceDays?: number | string, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ) => Promise; - - queueProposal: ( - proposalId: string | number, - advanceTime?: boolean, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ) => Promise; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - cancelProposal(proposalId: string | number): Promise; - - castVote( - proposalId: string | number, - accountIndex: number, - forAgainst: boolean, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - getProposalDetails(proposalId: number | string): Promise; - - executeProposal( - proposalId: string | number, - advanceTime?: boolean, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise; - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - getVotes(accountIndex: number, numberOfVotes: string): Promise; - - endToEndSim(): Promise; -} diff --git a/libs/evm-testing/src/utils/governance/aaveGov.ts b/libs/evm-testing/src/utils/governance/aaveGov.ts deleted file mode 100644 index cc91c6a489c..00000000000 --- a/libs/evm-testing/src/utils/governance/aaveGov.ts +++ /dev/null @@ -1,199 +0,0 @@ -import Web3 from 'web3'; -import { advanceTime } from '../chainUtil'; -import { aave_gov, erc20 } from '../contracts'; -import getProvider from '../getProvider'; -import { IGovernor } from './IGovernor'; - -export class aaveGovernor implements IGovernor { - readonly contractAddress = '0xEC568fffba86c094cf06b22134B23074DFE2252c'; - readonly aaveToken = '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9'; - - public async createArbitraryProposal( - accountIndex: number, - advanceDays?: number | string, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const provider = getProvider(); - const contract = aave_gov(this.contractAddress, provider); - const accounts = (await provider.eth.getAccounts())[accountIndex]; - const aaveToken = erc20(this.aaveToken, provider); - // Get min AAVE tokens to propose - const propThershold = '80000'; - const bal = provider.utils.toBigInt( - await aaveToken.methods.balanceOf(accounts).call(), - ); - if ( - bal < provider.utils.toBigInt(Web3.utils.toWei(propThershold, 'ether')) - ) { - await aaveToken.methods - .transfer(accounts, Web3.utils.toWei(propThershold, 'ether')) - .send({ - from: '0xBE0eB53F46cd790Cd13851d5EFf43D12404d33E8', - gas: '500000', - }); - } - // Delegate to proposer - await aaveToken.methods - .delegate(accounts) - .send({ from: accounts, gas: '150000' }); - // Create Proposal - const proposalId = await contract.methods - .create( - '0xEE56e2B3D491590B5b31738cC34d5232F378a8D5', - ['0xB6E50599ba78c6cCd40dF8B903e3d76AE68dcc83'], - ['0'], - ['execute()'], - ['0x'], - [true], - '0x2426029bb07fa6f4c7c60d427f63abbca45cf592822b01c3f7910f3735560c2b', - ) - .send({ from: accounts, gas: '500000' }); - - if (advanceDays) { - // Advance time to make active - const secs = Number(advanceDays) * 86400; - const blocks = secs / 12 + 500; - await advanceTime(secs, blocks); - } - - return { - proposalId: String(proposalId.events?.ProposalCreated.returnValues[0]), - block: Number(proposalId['blockNumber']), - }; - } - - public async queueProposal( - proposalId: string | number, - _advanceTime?: boolean | undefined, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const secs = 3 * 86400; - const blocks = secs / 12 + 500; - await advanceTime(secs, blocks); - - const provider = getProvider(); - const contract = aave_gov(this.contractAddress, provider); - const accounts = (await provider.eth.getAccounts())[0]; - const queued = await contract.methods - .queue(proposalId) - .send({ from: accounts, gas: '500000' }); - console.log(queued); - return { block: Number(queued['blockNumber']) }; - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public async cancelProposal(proposalId: string | number): Promise { - const provider = getProvider(); - const contract = aave_gov(this.contractAddress, provider); - const aaveToken = erc20(this.aaveToken, provider); - const accounts = await provider.eth.getAccounts(); - await aaveToken.methods - .transfer(accounts[4], Web3.utils.toWei('80000', 'ether')) - .send({ from: accounts[0], gas: '400000' }); - const cancel = await contract.methods - .cancel(proposalId) - .send({ from: accounts[0], gas: '200000' }); - console.log(cancel); - return { block: Number(cancel['blockNumber']) }; - } - - public async castVote( - proposalId: string | number, - accountIndex: number, - forAgainst: boolean, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const provider = getProvider(); - const contract = aave_gov(this.contractAddress, provider); - const accounts = (await provider.eth.getAccounts())[accountIndex]; - const vote = await contract.methods - .submitVote(proposalId, Number(forAgainst)) - .send({ from: accounts, gas: '1000000' }); - console.log(vote); - return { block: Number(vote['blockNumber']) }; - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public async getProposalDetails(proposalId: string | number): Promise { - const provider = getProvider(); - const contract = aave_gov(this.contractAddress, provider); - const details = await contract.methods.getProposalById(proposalId).call(); - return details; - } - - public async executeProposal( - proposalId: string | number, - _advanceTime?: boolean | undefined, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const secs = 86400; - const blocks = secs / 12 + 500; - await advanceTime(secs, blocks); - const provider = getProvider(); - const contract = aave_gov(this.contractAddress, provider); - const accounts = (await provider.eth.getAccounts())[0]; - const executed = await contract.methods - .execute(proposalId) - .send({ from: accounts, value: '0', gas: '1000000' }); - console.log(executed); - return { block: Number(executed['blockNumber']) }; - } - - public async getVotes( - accountIndex: number, - numberOfVotes: string, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const provider = getProvider(); - const aaveToken = erc20(this.aaveToken, provider); - const accounts = (await provider.eth.getAccounts())[accountIndex]; - const currBalance = provider.utils.toBigInt( - await aaveToken.methods.balanceOf(accounts).call(), - ); - const tokensNeeded = provider.utils.toBigInt( - provider.utils.toWei(numberOfVotes, 'ether'), - ); - let txReceipt; - if (currBalance < tokensNeeded) { - try { - txReceipt = await aaveToken.methods - .transfer(accounts, tokensNeeded) - .send({ - from: '0xF977814e90dA44bFA03b6295A0616a897441aceC', - gas: '500000', - }); - } catch { - txReceipt = await aaveToken.methods - .transfer(accounts, tokensNeeded) - .send({ - from: '0xBE0eB53F46cd790Cd13851d5EFf43D12404d33E8', // Binance 7 - gas: '500000', - }); - } - } - try { - txReceipt = await aaveToken.methods - .delegate(accounts) - .send({ from: accounts, gas: '150000' }); - } catch { - console.log('already Delegated'); - } - return { block: Number(txReceipt?.blockNumber) }; - } - - public async endToEndSim(): Promise { - const accts = [4, 5, 6, 7]; - for (const idx of accts) { - await this.getVotes(idx, '100000'); - } - console.log('creating Prop'); - const proposalId = (await this.createArbitraryProposal(0))['proposalId']; - for (const idx of accts) { - await this.castVote(proposalId, idx, true); - } - console.log('queuing'); - await this.queueProposal(proposalId, true); - console.log('executing'); - await this.executeProposal(proposalId, true); - } -} diff --git a/libs/evm-testing/src/utils/governance/compoundGov.ts b/libs/evm-testing/src/utils/governance/compoundGov.ts deleted file mode 100644 index 9e31ca6f162..00000000000 --- a/libs/evm-testing/src/utils/governance/compoundGov.ts +++ /dev/null @@ -1,226 +0,0 @@ -import Web3 from 'web3'; -import { advanceTime } from '../chainUtil'; -import { comp_gov, erc20 } from '../contracts'; -import getProvider from '../getProvider'; -import { IGovernor } from './IGovernor'; - -export class compoundGovernor implements IGovernor { - readonly contractAddress = '0xc0Da02939E1441F497fd74F78cE7Decb17B66529'; - readonly compToken = '0xc00e94Cb662C3520282E6f5717214004A7f26888'; - readonly admin = '0x6d903f6003cca6255D85CcA4D3B5E5146dC33925'; - - public async createArbitraryProposal( - accountIndex: number, - advanceDays?: string | number, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const provider = getProvider(); - const contract = comp_gov(this.contractAddress, provider); - const accounts = (await provider.eth.getAccounts())[accountIndex]; - const compToken = erc20(this.compToken, provider); - // Get min proposal COMP from 'bank' - const bal = provider.utils.toBigInt( - await compToken.methods.balanceOf(accounts).call(), - ); - if (bal < provider.utils.toBigInt(Web3.utils.toWei('30000', 'ether'))) { - await compToken.methods - .transfer(accounts, Web3.utils.toWei('30000', 'ether')) - .send({ - from: '0xF977814e90dA44bFA03b6295A0616a897441aceC', - gas: '100000', - }); - } - // Delegate to proposer - await compToken.methods - .delegate(accounts) - .send({ from: accounts, gas: '150000' }); - // Create Proposal - const proposalId = await contract.methods - .propose( - ['0x316f9708bB98af7dA9c68C1C3b5e79039cD336E3'], - [0], - [''], - [ - // eslint-disable-next-line max-len - '0xecb9a875000000000000000000000000c3d688b66703497daa19211eedff47f25384cdc3000000000000000000000000c00e94cb662c3520282e6f5717214004a7f268880000000000000000000000000000000000000000000000000b84c09a3b930000', - ], - 'Liquidation ratio propoasl', - ) - .send({ from: accounts, gas: '1000000' }); - - // Advance blocks/timestamp to make proposal active - if (advanceDays) { - const secs = Number(advanceDays) * 86400; - const blocks = secs / 12 + 500; - await advanceTime(secs, blocks); - } - - return { - proposalId: String( - provider.eth.abi.decodeParameter( - 'uint256', - String(proposalId.events?.ProposalCreated?.raw?.data).slice(0, 66), - ), - ), - block: Number(proposalId['blockNumber']), - }; - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public async cancelProposal(proposalId: string | number): Promise { - const provider = getProvider(); - const contract = comp_gov(this.contractAddress, provider); - const accounts = await provider.eth.getAccounts(); - const cancel = await contract.methods - .cancel(proposalId) - .send({ from: accounts[0], gas: '150000' }); - return { block: Number(cancel['blockNumber']) }; - } - - public async castVote( - proposalId: string | number, - accountIndex: number, - forAgainst: boolean, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const provider = getProvider(); - const contract = comp_gov(this.contractAddress, provider); - const accounts = (await provider.eth.getAccounts())[accountIndex]; - const vote = await contract.methods - .castVote(proposalId, Number(forAgainst)) - .send({ from: accounts, gas: '1000000' }); - return { block: Number(vote['blockNumber']) }; - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - public async getProposalDetails(proposalId: number | string): Promise { - const provider = getProvider(); - const contract = comp_gov(this.contractAddress, provider); - const details = await contract.methods.proposals(proposalId).call(); - return details; - } - - public async queueProposal( - proposalId: string | number, - advanceTimeToo?: boolean, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - if (advanceTimeToo) { - const secs = Number(3) * 86400; - const blocks = secs / 12 + 500; - await advanceTime(secs, blocks); - } - const provider = getProvider(); - const contract = comp_gov(this.contractAddress, provider); - const accounts = (await provider.eth.getAccounts())[0]; - const queued = await contract.methods - .queue(proposalId) - .send({ from: accounts, gas: '500000' }); - return { block: Number(queued['blockNumber']) }; - } - - public async executeProposal( - proposalId: string | number, - advanceTimeToo?: boolean, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - if (advanceTimeToo) { - const secs = Number(5) * 86400; - const blocks = secs / 12 + 500; - await advanceTime(secs, blocks); - } - const provider = getProvider(); - const contract = comp_gov(this.contractAddress, provider); - const accounts = (await provider.eth.getAccounts())[0]; - const executed = await contract.methods - .execute(proposalId) - .send({ from: accounts, value: '0', gas: '1000000' }); - return { block: Number(executed['blockNumber']) }; - } - - public async getVotes( - accountIndex: number, - numberOfVotes: string, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): Promise { - const provider = getProvider(); - const compToken = erc20(this.compToken, provider); - const accounts = (await provider.eth.getAccounts())[accountIndex]; - const currBalance = provider.utils.toBigInt( - await compToken.methods.balanceOf(accounts).call(), - ); - const tokensNeeded = provider.utils.toBigInt( - provider.utils.toWei(numberOfVotes, 'ether'), - ); - let txReceipt; - if (currBalance < tokensNeeded) { - try { - const binanceWalletAddress = - '0xF977814e90dA44bFA03b6295A0616a897441aceC'; - const binanceWalletTokensAvailable = provider.utils.toBigInt( - await compToken.methods.balanceOf(binanceWalletAddress).call(), - ); - txReceipt = await compToken.methods - .transfer(accounts, binanceWalletTokensAvailable) - .send({ - from: binanceWalletAddress, - gas: '100000', - }); - } catch (e) { - console.error('Failed to transfer tokens from binance wallet', e); - } - - const newBalance = provider.utils.toBigInt( - await compToken.methods.balanceOf(accounts).call(), - ); - - if (newBalance < tokensNeeded) { - try { - const fundWalletAddress = - '0xfA9b5f7fDc8AB34AAf3099889475d47febF830D7'; - const fundWalletTokensAvailable = provider.utils.toBigInt( - await compToken.methods.balanceOf(fundWalletAddress).call(), - ); - txReceipt = await compToken.methods - .transfer(accounts, fundWalletTokensAvailable) - .send({ - from: fundWalletAddress, - gas: '100000', - }); - } catch (e) { - console.log('Failed to transfer tokens from fund wallet', e); - } - } - } - - const newBalance = provider.utils.toBigInt( - await compToken.methods.balanceOf(accounts).call(), - ); - if (newBalance < tokensNeeded) { - console.error('Not enough tokens in binance and fund wallet'); - return; - } - - try { - txReceipt = await compToken.methods - .delegate(accounts) - .send({ from: accounts, gas: '150000' }); - } catch { - console.log('already Delegated'); - } - return { block: Number(txReceipt?.blockNumber) }; - } - - public async endToEndSim(): Promise { - const accts = [4, 5, 6, 7]; - for (const idx of accts) { - await this.getVotes(idx, '120000'); - } - const proposalId = (await this.createArbitraryProposal(0, 3))['proposalId']; - for (const idx of accts) { - await this.castVote(proposalId, idx, true); - } - await this.queueProposal(proposalId, true); - await this.executeProposal(proposalId, true); - } -} diff --git a/libs/model/src/contest/Contests.projection.ts b/libs/model/src/contest/Contests.projection.ts index 45a2190f443..796e4f3d1c9 100644 --- a/libs/model/src/contest/Contests.projection.ts +++ b/libs/model/src/contest/Contests.projection.ts @@ -148,7 +148,7 @@ async function updateOrCreateWithAlert( contract_address: contest_address, event_signature: eventSignature, kind: signatureToKind[eventSignature], - abi_id: contestAbi.id, + abi_id: contestAbi.id!, }; }, ); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 090f97253f7..22cf583d8a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -455,42 +455,9 @@ importers: '@cosmjs/tendermint-rpc': specifier: ^0.31.3 version: 0.31.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@ethersproject/abi': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/address': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/bignumber': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/bytes': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/constants': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/hash': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/providers': - specifier: ^5.7.2 - version: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@ethersproject/strings': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/units': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/wallet': - specifier: ^5.7.0 - version: 5.7.0 '@osmonauts/lcd': specifier: ^0.10.0 version: 0.10.0 - ethers: - specifier: 5.7.2 - version: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) long: specifier: ^5.2.3 version: 5.2.3 @@ -500,40 +467,13 @@ importers: protobufjs: specifier: ^6.1.13 version: 6.11.4 - web3: - specifier: ^4.7.0 - version: 4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-core: - specifier: ^4.3.2 - version: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-utils: - specifier: ^4.2.2 - version: 4.2.3 devDependencies: - '@nomiclabs/hardhat-ethers': - specifier: ^2.0.2 - version: 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) - '@typechain/ethers-v5': - specifier: ^6.0.0 - version: 6.0.5(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@4.0.3(typescript@5.4.5))(typescript@5.4.5) '@types/moment': specifier: ^2.13.0 version: 2.13.0 - hardhat: - specifier: ^2.3.0 - version: 2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) - hardhat-typechain: - specifier: ^0.3.5 - version: 0.3.5(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(ts-generator@0.1.1)(typechain@4.0.3(typescript@5.4.5)) - ts-generator: - specifier: ^0.1.1 - version: 0.1.1 tsx: specifier: ^4.7.2 version: 4.9.3 - typechain: - specifier: ^4.0.1 - version: 4.0.3(typescript@5.4.5) libs/core: dependencies: @@ -4197,148 +4137,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nomicfoundation/edr-darwin-arm64@0.3.7': - resolution: {integrity: sha512-6tK9Lv/lSfyBvpEQ4nsTfgxyDT1y1Uv/x8Wa+aB+E8qGo3ToexQ1BMVjxJk6PChXCDOWxB3B4KhqaZFjdhl3Ow==} - engines: {node: '>= 18'} - cpu: [arm64] - os: [darwin] - - '@nomicfoundation/edr-darwin-x64@0.3.7': - resolution: {integrity: sha512-1RrQ/1JPwxrYO69e0tglFv5H+ggour5Ii3bb727+yBpBShrxtOTQ7fZyfxA5h62LCN+0Z9wYOPeQ7XFcVurMaQ==} - engines: {node: '>= 18'} - cpu: [x64] - os: [darwin] - - '@nomicfoundation/edr-linux-arm64-gnu@0.3.7': - resolution: {integrity: sha512-ds/CKlBoVXIihjhflhgPn13EdKWed6r5bgvMs/YwRqT5wldQAQJZWAfA2+nYm0Yi2gMGh1RUpBcfkyl4pq7G+g==} - engines: {node: '>= 18'} - cpu: [arm64] - os: [linux] - - '@nomicfoundation/edr-linux-arm64-musl@0.3.7': - resolution: {integrity: sha512-e29udiRaPujhLkM3+R6ju7QISrcyOqpcaxb2FsDWBkuD7H8uU9JPZEyyUIpEp5uIY0Jh1eEJPKZKIXQmQAEAuw==} - engines: {node: '>= 18'} - cpu: [arm64] - os: [linux] - - '@nomicfoundation/edr-linux-x64-gnu@0.3.7': - resolution: {integrity: sha512-/xkjmTyv+bbJ4akBCW0qzFKxPOV4AqLOmqurov+s9umHb16oOv72osSa3SdzJED2gHDaKmpMITT4crxbar4Axg==} - engines: {node: '>= 18'} - cpu: [x64] - os: [linux] - - '@nomicfoundation/edr-linux-x64-musl@0.3.7': - resolution: {integrity: sha512-QwBP9xlmsbf/ldZDGLcE4QiAb8Zt46E/+WLpxHBATFhGa7MrpJh6Zse+h2VlrT/SYLPbh2cpHgSmoSlqVxWG9g==} - engines: {node: '>= 18'} - cpu: [x64] - os: [linux] - - '@nomicfoundation/edr-win32-x64-msvc@0.3.7': - resolution: {integrity: sha512-j/80DEnkxrF2ewdbk/gQ2EOPvgF0XSsg8D0o4+6cKhUVAW6XwtWKzIphNL6dyD2YaWEPgIrNvqiJK/aln0ww4Q==} - engines: {node: '>= 18'} - cpu: [x64] - os: [win32] - - '@nomicfoundation/edr@0.3.7': - resolution: {integrity: sha512-v2JFWnFKRsnOa6PDUrD+sr8amcdhxnG/YbL7LzmgRGU1odWEyOF4/EwNeUajQr4ZNKVWrYnJ6XjydXtUge5OBQ==} - engines: {node: '>= 18'} - - '@nomicfoundation/ethereumjs-common@4.0.4': - resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==} - - '@nomicfoundation/ethereumjs-rlp@5.0.4': - resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==} - engines: {node: '>=18'} - hasBin: true - - '@nomicfoundation/ethereumjs-tx@5.0.4': - resolution: {integrity: sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==} - engines: {node: '>=18'} - peerDependencies: - c-kzg: ^2.1.2 - peerDependenciesMeta: - c-kzg: - optional: true - - '@nomicfoundation/ethereumjs-util@9.0.4': - resolution: {integrity: sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==} - engines: {node: '>=18'} - peerDependencies: - c-kzg: ^2.1.2 - peerDependenciesMeta: - c-kzg: - optional: true - - '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1': - resolution: {integrity: sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1': - resolution: {integrity: sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1': - resolution: {integrity: sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1': - resolution: {integrity: sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1': - resolution: {integrity: sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1': - resolution: {integrity: sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1': - resolution: {integrity: sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1': - resolution: {integrity: sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1': - resolution: {integrity: sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1': - resolution: {integrity: sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@nomicfoundation/solidity-analyzer@0.1.1': - resolution: {integrity: sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==} - engines: {node: '>= 12'} - - '@nomiclabs/hardhat-ethers@2.2.3': - resolution: {integrity: sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==} - peerDependencies: - ethers: ^5.0.0 - hardhat: ^2.0.0 - '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} @@ -5835,34 +5633,6 @@ packages: resolution: {integrity: sha512-DSu8oTPI0BJFH60jMOG9gM+oeNMoRALFmdAYg2PIXpL+Zbxd7L2GzQZtmf1jLy/8UBImkbB3D74TjiOBiLRK1w==} engines: {node: '>=6.0.0'} - '@sentry/core@5.30.0': - resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} - engines: {node: '>=6'} - - '@sentry/hub@5.30.0': - resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} - engines: {node: '>=6'} - - '@sentry/minimal@5.30.0': - resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} - engines: {node: '>=6'} - - '@sentry/node@5.30.0': - resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} - engines: {node: '>=6'} - - '@sentry/tracing@5.30.0': - resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} - engines: {node: '>=6'} - - '@sentry/types@5.30.0': - resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} - engines: {node: '>=6'} - - '@sentry/utils@5.30.0': - resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} - engines: {node: '>=6'} - '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -6504,13 +6274,6 @@ packages: resolution: {integrity: sha512-iUbTUwD4f4ibdLy5PWWb7ITEz4S4VAP9/mNjFhoRY3cKVVTDfmykrVTKjPOIHWzDgAmLtgrLvySIIC9ZBVENBw==} engines: {node: '>=18.0.0'} - '@typechain/ethers-v5@6.0.5': - resolution: {integrity: sha512-KJh+EWuxmX1a17fQWS1ba8DCYcqK7UpdbqMZZwyfiv9FQfn8ZQJX17anbkCMOSU8TV3EvRuJ/vFEKGzKnpkO8g==} - peerDependencies: - ethers: ^5.0.0 - typechain: ^4.0.0 - typescript: '>=4.0.0' - '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -6641,9 +6404,6 @@ packages: '@types/long@4.0.2': resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - '@types/lru-cache@5.1.1': - resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} - '@types/marked@4.3.2': resolution: {integrity: sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==} @@ -6656,9 +6416,6 @@ packages: '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/mkdirp@0.5.2': - resolution: {integrity: sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==} - '@types/moment@2.13.0': resolution: {integrity: sha512-DyuyYGpV6r+4Z1bUznLi/Y7HpGn4iQ4IVcGn8zrr1P4KotKLdH0sbK1TFR6RGyX6B+G8u83wCzL+bpawKU/hdQ==} deprecated: This is a stub types definition for Moment (https://github.com/moment/moment). Moment provides its own type definitions, so you don't need @types/moment installed! @@ -6732,9 +6489,6 @@ packages: '@types/phoenix@1.6.4': resolution: {integrity: sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==} - '@types/prettier@2.7.3': - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -6784,9 +6538,6 @@ packages: '@types/request@2.48.12': resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} - '@types/resolve@0.0.8': - resolution: {integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==} - '@types/secp256k1@4.0.6': resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} @@ -7278,10 +7029,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - adm-zip@0.4.16: - resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} - engines: {node: '>=0.3.0'} - aes-js@3.0.0: resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} @@ -7348,21 +7095,6 @@ packages: anser@2.1.1: resolution: {integrity: sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==} - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - - ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-fragments@0.2.1: resolution: {integrity: sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==} @@ -7432,14 +7164,6 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} - array-back@1.0.4: - resolution: {integrity: sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==} - engines: {node: '>=0.12.0'} - - array-back@2.0.0: - resolution: {integrity: sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==} - engines: {node: '>=4'} - array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} @@ -7716,10 +7440,6 @@ packages: bowser@2.11.0: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - boxen@5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -7742,9 +7462,6 @@ packages: browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} - browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} @@ -7951,10 +7668,6 @@ packages: resolution: {integrity: sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==} engines: {node: '>= 0.6'} - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -8009,10 +7722,6 @@ packages: resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} engines: {node: '>=14.16'} - cli-boxes@2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - cli-color@2.0.4: resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} engines: {node: '>=0.10'} @@ -8119,10 +7828,6 @@ packages: command-exists@1.2.9: resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} - command-line-args@4.0.7: - resolution: {integrity: sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==} - hasBin: true - commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -8134,9 +7839,6 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@3.0.2: - resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} - commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -8248,10 +7950,6 @@ packages: resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} engines: {node: '>= 0.6'} - cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -8491,10 +8189,6 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -8646,10 +8340,6 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} @@ -8839,10 +8529,6 @@ packages: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} - enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} - entities@1.1.2: resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} @@ -9428,17 +9114,9 @@ packages: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} - find-replace@1.0.3: - resolution: {integrity: sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==} - engines: {node: '>=4.0.0'} - find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -9461,10 +9139,6 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -9548,9 +9222,6 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - fp-ts@1.19.3: - resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} - fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -9561,9 +9232,6 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@0.30.0: - resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} - fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -9703,19 +9371,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - deprecated: Glob versions prior to v9 are no longer supported - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} @@ -9809,25 +9468,6 @@ packages: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} - hardhat-typechain@0.3.5: - resolution: {integrity: sha512-w9lm8sxqTJACY+V7vijiH+NkPExnmtiQEjsV9JKD1KgMdVk2q8y+RhvU/c4B7+7b1+HylRUCxpOIvFuB3rE4+w==} - peerDependencies: - hardhat: ^2.0.10 - ts-generator: ^0.1.1 - typechain: ^4.0.1 - - hardhat@2.22.3: - resolution: {integrity: sha512-k8JV2ECWNchD6ahkg2BR5wKVxY0OiKot7fuxiIpRK0frRqyOljcR2vKwgWSLw6YIeDcNNA4xybj7Og7NSxr2hA==} - hasBin: true - peerDependencies: - ts-node: '*' - typescript: '*' - peerDependenciesMeta: - ts-node: - optional: true - typescript: - optional: true - has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -10005,10 +9645,6 @@ packages: resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} engines: {node: '>= 6'} - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - https-proxy-agent@7.0.5: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} @@ -10160,9 +9796,6 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - io-ts@1.10.4: - resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} - ip-regex@2.1.0: resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} engines: {node: '>=4'} @@ -10815,9 +10448,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsonfile@2.4.0: - resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} - jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -10875,9 +10505,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - klaw@1.3.1: - resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} - kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -10969,10 +10596,6 @@ packages: localforage@1.10.0: resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} - locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -11103,9 +10726,6 @@ packages: lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} - lru_map@0.3.3: - resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -11568,17 +11188,9 @@ packages: mlly@1.7.0: resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==} - mnemonist@0.38.5: - resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} - mobile-detect@1.4.5: resolution: {integrity: sha512-yc0LhH6tItlvfLBugVUEtgawwFU2sIe+cSdmRJJCTMZ5GEJyLxNyC/NIOAOGk67Fa8GNpOttO3Xz/1bHpXFD/g==} - mocha@10.4.0: - resolution: {integrity: sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==} - engines: {node: '>= 14.0.0'} - hasBin: true - mock-express-request@0.2.2: resolution: {integrity: sha512-EymHjY1k1jWIsaVaCsPdFterWO18gcNwQMb99OryhSBtIA33SZJujOLeOe03Rf2DTV997xLPyl2I098WCFm/mA==} @@ -11901,9 +11513,6 @@ packages: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} - obliterator@2.0.4: - resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} - oboe@2.1.5: resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} @@ -11984,10 +11593,6 @@ packages: os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - outvariant@1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} @@ -12011,10 +11616,6 @@ packages: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} - p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -12027,10 +11628,6 @@ packages: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} engines: {node: '>=18'} - p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -12047,10 +11644,6 @@ packages: resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} engines: {node: '>=8'} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - p-map@5.5.0: resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} engines: {node: '>=12'} @@ -12067,10 +11660,6 @@ packages: resolution: {integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==} engines: {node: '>=14.16'} - p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -12510,11 +12099,6 @@ packages: vue-tsc: optional: true - prettier@2.7.1: - resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} - engines: {node: '>=10.13.0'} - hasBin: true - prettier@3.3.3: resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} @@ -13271,11 +12855,6 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -13489,9 +13068,6 @@ packages: resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} engines: {node: '>=0.10.0'} - serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -13649,11 +13225,6 @@ packages: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} - solc@0.7.3: - resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} - engines: {node: '>=8.0.0'} - hasBin: true - sonic-boom@2.8.0: resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} @@ -14077,10 +13648,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - test-value@2.1.0: - resolution: {integrity: sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==} - engines: {node: '>=0.10.0'} - text-encoding-utf-8@1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} @@ -14144,10 +13711,6 @@ packages: tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - tmp@0.2.3: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} @@ -14222,18 +13785,6 @@ packages: peerDependencies: typescript: '>=4.0.0' - ts-essentials@1.0.4: - resolution: {integrity: sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==} - - ts-essentials@7.0.3: - resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} - peerDependencies: - typescript: '>=3.7.0' - - ts-generator@0.1.1: - resolution: {integrity: sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==} - hasBin: true - ts-mixer@6.0.4: resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} @@ -14295,9 +13846,6 @@ packages: peerDependencies: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' - tsort@0.0.1: - resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} - tsutils@2.29.0: resolution: {integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==} peerDependencies: @@ -14339,10 +13887,6 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -14374,10 +13918,6 @@ packages: type@2.7.2: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - typechain@4.0.3: - resolution: {integrity: sha512-tmoHQeXZWHxIdeLK+i6dU0CU0vOd9Cndr3jFTZIMzak5/YpFZ8XoiYpTZcngygGBqZo+Z1EUmttLbW9KkFZLgQ==} - hasBin: true - typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -14416,9 +13956,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typical@2.6.1: - resolution: {integrity: sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==} - ua-parser-js@1.0.37: resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} @@ -15120,10 +14657,6 @@ packages: engines: {node: '>=8'} hasBin: true - widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - wif@2.0.6: resolution: {integrity: sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==} @@ -15134,9 +14667,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - workerpool@6.2.1: - resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -15367,10 +14897,6 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -20166,105 +19692,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nomicfoundation/edr-darwin-arm64@0.3.7': - optional: true - - '@nomicfoundation/edr-darwin-x64@0.3.7': - optional: true - - '@nomicfoundation/edr-linux-arm64-gnu@0.3.7': - optional: true - - '@nomicfoundation/edr-linux-arm64-musl@0.3.7': - optional: true - - '@nomicfoundation/edr-linux-x64-gnu@0.3.7': - optional: true - - '@nomicfoundation/edr-linux-x64-musl@0.3.7': - optional: true - - '@nomicfoundation/edr-win32-x64-msvc@0.3.7': - optional: true - - '@nomicfoundation/edr@0.3.7': - optionalDependencies: - '@nomicfoundation/edr-darwin-arm64': 0.3.7 - '@nomicfoundation/edr-darwin-x64': 0.3.7 - '@nomicfoundation/edr-linux-arm64-gnu': 0.3.7 - '@nomicfoundation/edr-linux-arm64-musl': 0.3.7 - '@nomicfoundation/edr-linux-x64-gnu': 0.3.7 - '@nomicfoundation/edr-linux-x64-musl': 0.3.7 - '@nomicfoundation/edr-win32-x64-msvc': 0.3.7 - - '@nomicfoundation/ethereumjs-common@4.0.4': - dependencies: - '@nomicfoundation/ethereumjs-util': 9.0.4 - transitivePeerDependencies: - - c-kzg - - '@nomicfoundation/ethereumjs-rlp@5.0.4': {} - - '@nomicfoundation/ethereumjs-tx@5.0.4': - dependencies: - '@nomicfoundation/ethereumjs-common': 4.0.4 - '@nomicfoundation/ethereumjs-rlp': 5.0.4 - '@nomicfoundation/ethereumjs-util': 9.0.4 - ethereum-cryptography: 0.1.3 - - '@nomicfoundation/ethereumjs-util@9.0.4': - dependencies: - '@nomicfoundation/ethereumjs-rlp': 5.0.4 - ethereum-cryptography: 0.1.3 - - '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1': - optional: true - - '@nomicfoundation/solidity-analyzer@0.1.1': - optionalDependencies: - '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.1 - '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.1 - '@nomicfoundation/solidity-analyzer-freebsd-x64': 0.1.1 - '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.1 - '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.1 - '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.1 - '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.1 - '@nomicfoundation/solidity-analyzer-win32-arm64-msvc': 0.1.1 - '@nomicfoundation/solidity-analyzer-win32-ia32-msvc': 0.1.1 - '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 - - '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))': - dependencies: - ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) - '@one-ini/wasm@0.1.1': {} '@open-draft/deferred-promise@2.2.0': {} @@ -22304,55 +21731,6 @@ snapshots: '@sendgrid/client': 6.5.5 '@sendgrid/helpers': 6.5.5 - '@sentry/core@5.30.0': - dependencies: - '@sentry/hub': 5.30.0 - '@sentry/minimal': 5.30.0 - '@sentry/types': 5.30.0 - '@sentry/utils': 5.30.0 - tslib: 1.14.1 - - '@sentry/hub@5.30.0': - dependencies: - '@sentry/types': 5.30.0 - '@sentry/utils': 5.30.0 - tslib: 1.14.1 - - '@sentry/minimal@5.30.0': - dependencies: - '@sentry/hub': 5.30.0 - '@sentry/types': 5.30.0 - tslib: 1.14.1 - - '@sentry/node@5.30.0': - dependencies: - '@sentry/core': 5.30.0 - '@sentry/hub': 5.30.0 - '@sentry/tracing': 5.30.0 - '@sentry/types': 5.30.0 - '@sentry/utils': 5.30.0 - cookie: 0.4.2 - https-proxy-agent: 5.0.1 - lru_map: 0.3.3 - tslib: 1.14.1 - transitivePeerDependencies: - - supports-color - - '@sentry/tracing@5.30.0': - dependencies: - '@sentry/hub': 5.30.0 - '@sentry/minimal': 5.30.0 - '@sentry/types': 5.30.0 - '@sentry/utils': 5.30.0 - tslib: 1.14.1 - - '@sentry/types@5.30.0': {} - - '@sentry/utils@5.30.0': - dependencies: - '@sentry/types': 5.30.0 - tslib: 1.14.1 - '@sideway/address@4.1.5': dependencies: '@hapi/hoek': 9.3.0 @@ -23342,12 +22720,6 @@ snapshots: dependencies: sha256-uint8array: 0.10.7 - '@typechain/ethers-v5@6.0.5(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@4.0.3(typescript@5.4.5))(typescript@5.4.5)': - dependencies: - ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - typechain: 4.0.3(typescript@5.4.5) - typescript: 5.4.5 - '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.5 @@ -23496,8 +22868,6 @@ snapshots: '@types/long@4.0.2': {} - '@types/lru-cache@5.1.1': {} - '@types/marked@4.3.2': {} '@types/mdast@4.0.4': @@ -23508,10 +22878,6 @@ snapshots: '@types/minimist@1.2.5': {} - '@types/mkdirp@0.5.2': - dependencies: - '@types/node': 20.12.10 - '@types/moment@2.13.0': dependencies: moment: 2.30.1 @@ -23595,8 +22961,6 @@ snapshots: '@types/phoenix@1.6.4': {} - '@types/prettier@2.7.3': {} - '@types/prop-types@15.7.12': {} '@types/qs@6.9.15': {} @@ -23667,10 +23031,6 @@ snapshots: '@types/tough-cookie': 4.0.5 form-data: 2.5.1 - '@types/resolve@0.0.8': - dependencies: - '@types/node': 20.12.10 - '@types/secp256k1@4.0.6': dependencies: '@types/node': 20.12.10 @@ -24907,8 +24267,6 @@ snapshots: acorn@8.12.1: {} - adm-zip@0.4.16: {} - aes-js@3.0.0: {} aes-js@3.1.2: {} @@ -25014,18 +24372,6 @@ snapshots: anser@2.1.1: {} - ansi-align@3.0.1: - dependencies: - string-width: 4.2.3 - - ansi-colors@4.1.1: {} - - ansi-colors@4.1.3: {} - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-fragments@0.2.1: dependencies: colorette: 1.4.0 @@ -25086,14 +24432,6 @@ snapshots: dependencies: tslib: 2.7.0 - array-back@1.0.4: - dependencies: - typical: 2.6.1 - - array-back@2.0.0: - dependencies: - typical: 2.6.1 - array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 @@ -25241,13 +24579,13 @@ snapshots: axios@0.21.4: dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6 transitivePeerDependencies: - debug axios@0.27.2: dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6 form-data: 4.0.0 transitivePeerDependencies: - debug @@ -25427,17 +24765,6 @@ snapshots: bowser@2.11.0: {} - boxen@5.1.2: - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 2.2.1 - string-width: 4.2.3 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -25463,8 +24790,6 @@ snapshots: dependencies: resolve: 1.22.8 - browser-stdout@1.3.1: {} - browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 @@ -25710,18 +25035,6 @@ snapshots: lodash: 4.17.21 parse5: 3.0.3 - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -25789,8 +25102,6 @@ snapshots: dependencies: escape-string-regexp: 5.0.0 - cli-boxes@2.2.1: {} - cli-color@2.0.4: dependencies: d: 1.0.2 @@ -25911,20 +25222,12 @@ snapshots: command-exists@1.2.9: {} - command-line-args@4.0.7: - dependencies: - array-back: 2.0.0 - find-replace: 1.0.3 - typical: 2.6.1 - commander@10.0.1: {} commander@12.0.0: {} commander@2.20.3: {} - commander@3.0.2: {} - commander@8.3.0: {} commander@9.5.0: {} @@ -26095,8 +25398,6 @@ snapshots: cookie@0.4.1: {} - cookie@0.4.2: {} - cookie@0.6.0: {} cookiejar@2.1.4: {} @@ -26381,8 +25682,6 @@ snapshots: decamelize@1.2.0: {} - decamelize@4.0.0: {} - decimal.js@10.4.3: {} decode-formdata@0.4.0: {} @@ -26547,8 +25846,6 @@ snapshots: diff@4.0.2: {} - diff@5.0.0: {} - diff@5.2.0: {} diffie-hellman@5.0.3: @@ -26791,11 +26088,6 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 - enquirer@2.4.1: - dependencies: - ansi-colors: 4.1.3 - strip-ansi: 6.0.1 - entities@1.1.2: {} entities@2.2.0: {} @@ -27779,17 +27071,8 @@ snapshots: make-dir: 3.1.0 pkg-dir: 4.2.0 - find-replace@1.0.3: - dependencies: - array-back: 1.0.4 - test-value: 2.1.0 - find-root@1.1.0: {} - find-up@2.1.0: - dependencies: - locate-path: 2.0.0 - find-up@3.0.0: dependencies: locate-path: 3.0.0 @@ -27847,8 +27130,6 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 - flat@5.0.2: {} - flatted@3.3.1: {} flow-enums-runtime@0.0.6: {} @@ -27863,6 +27144,8 @@ snapshots: transitivePeerDependencies: - encoding + follow-redirects@1.15.6: {} + follow-redirects@1.15.6(debug@4.3.4): optionalDependencies: debug: 4.3.4(supports-color@8.1.1) @@ -27933,22 +27216,12 @@ snapshots: forwarded@0.2.0: {} - fp-ts@1.19.3: {} - fresh@0.5.2: {} fromentries@1.3.2: {} fs-constants@1.0.0: {} - fs-extra@0.30.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 2.4.0 - klaw: 1.3.1 - path-is-absolute: 1.0.1 - rimraf: 2.7.1 - fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -28075,15 +27348,6 @@ snapshots: minipass: 7.1.0 path-scurry: 1.10.2 - glob@7.2.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -28093,14 +27357,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.0.1 - once: 1.4.0 - global-directory@4.0.1: dependencies: ini: 4.1.1 @@ -28197,66 +27453,6 @@ snapshots: hard-rejection@2.1.0: {} - hardhat-typechain@0.3.5(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(ts-generator@0.1.1)(typechain@4.0.3(typescript@5.4.5)): - dependencies: - hardhat: 2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) - ts-generator: 0.1.1 - typechain: 4.0.3(typescript@5.4.5) - - hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10): - dependencies: - '@ethersproject/abi': 5.7.0 - '@metamask/eth-sig-util': 4.0.1 - '@nomicfoundation/edr': 0.3.7 - '@nomicfoundation/ethereumjs-common': 4.0.4 - '@nomicfoundation/ethereumjs-tx': 5.0.4 - '@nomicfoundation/ethereumjs-util': 9.0.4 - '@nomicfoundation/solidity-analyzer': 0.1.1 - '@sentry/node': 5.30.0 - '@types/bn.js': 5.1.5 - '@types/lru-cache': 5.1.1 - adm-zip: 0.4.16 - aggregate-error: 3.1.0 - ansi-escapes: 4.3.2 - boxen: 5.1.2 - chalk: 2.4.2 - chokidar: 3.6.0 - ci-info: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) - enquirer: 2.4.1 - env-paths: 2.2.1 - ethereum-cryptography: 1.2.0 - ethereumjs-abi: 0.6.8 - find-up: 2.1.0 - fp-ts: 1.19.3 - fs-extra: 7.0.1 - glob: 7.2.0 - immutable: 4.3.5 - io-ts: 1.10.4 - keccak: 3.0.4 - lodash: 4.17.21 - mnemonist: 0.38.5 - mocha: 10.4.0 - p-map: 4.0.0 - raw-body: 2.5.2 - resolve: 1.22.8 - semver: 6.3.1 - solc: 0.7.3(debug@4.3.4) - source-map-support: 0.5.21 - stacktrace-parser: 0.1.10 - tsort: 0.0.1 - undici: 5.28.4 - uuid: 8.3.2 - ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) - optionalDependencies: - ts-node: 10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - bufferutil - - c-kzg - - supports-color - - utf-8-validate - has-bigints@1.0.2: {} has-dynamic-import@2.1.0: @@ -28453,13 +27649,6 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.3.5 - transitivePeerDependencies: - - supports-color - https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 @@ -28586,10 +27775,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - io-ts@1.10.4: - dependencies: - fp-ts: 1.19.3 - ip-regex@2.1.0: {} ip-regex@4.3.0: {} @@ -29343,10 +28528,6 @@ snapshots: json5@2.2.3: {} - jsonfile@2.4.0: - optionalDependencies: - graceful-fs: 4.2.11 - jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -29419,10 +28600,6 @@ snapshots: kind-of@6.0.3: {} - klaw@1.3.1: - optionalDependencies: - graceful-fs: 4.2.11 - kleur@3.0.3: {} kleur@4.1.5: {} @@ -29560,11 +28737,6 @@ snapshots: dependencies: lie: 3.1.1 - locate-path@2.0.0: - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -29674,8 +28846,6 @@ snapshots: dependencies: es5-ext: 0.10.64 - lru_map@0.3.3: {} - lz-string@1.5.0: {} magic-bytes.js@1.10.0: {} @@ -30489,35 +29659,8 @@ snapshots: pkg-types: 1.1.0 ufo: 1.5.3 - mnemonist@0.38.5: - dependencies: - obliterator: 2.0.4 - mobile-detect@1.4.5: {} - mocha@10.4.0: - dependencies: - ansi-colors: 4.1.1 - browser-stdout: 1.3.1 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@8.1.1) - diff: 5.0.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 8.1.0 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 5.0.1 - ms: 2.1.3 - serialize-javascript: 6.0.0 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 6.2.1 - yargs: 16.2.0 - yargs-parser: 20.2.4 - yargs-unparser: 2.0.0 - mock-express-request@0.2.2: dependencies: accepts: 1.3.8 @@ -30908,8 +30051,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 - obliterator@2.0.4: {} - oboe@2.1.5: dependencies: http-https: 1.0.0 @@ -31017,8 +30158,6 @@ snapshots: os-browserify@0.3.0: {} - os-tmpdir@1.0.2: {} - outvariant@1.4.0: {} p-defer@4.0.1: {} @@ -31037,10 +30176,6 @@ snapshots: p-finally@1.0.0: {} - p-limit@1.3.0: - dependencies: - p-try: 1.0.0 - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -31053,10 +30188,6 @@ snapshots: dependencies: yocto-queue: 1.0.0 - p-locate@2.0.0: - dependencies: - p-limit: 1.3.0 - p-locate@3.0.0: dependencies: p-limit: 2.3.0 @@ -31073,10 +30204,6 @@ snapshots: dependencies: aggregate-error: 3.1.0 - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - p-map@5.5.0: dependencies: aggregate-error: 4.0.1 @@ -31092,8 +30219,6 @@ snapshots: p-timeout@6.1.2: {} - p-try@1.0.0: {} - p-try@2.2.0: {} p-wait-for@5.0.2: @@ -31590,8 +30715,6 @@ snapshots: prettier: 3.3.3 typescript: 5.4.5 - prettier@2.7.1: {} - prettier@3.3.3: {} pretty-format@26.6.2: @@ -32542,10 +31665,6 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@2.7.1: - dependencies: - glob: 7.2.3 - rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -32811,10 +31930,6 @@ snapshots: serialize-error@2.1.0: {} - serialize-javascript@6.0.0: - dependencies: - randombytes: 2.1.0 - serve-static@1.15.0: dependencies: encodeurl: 1.0.2 @@ -33022,20 +32137,6 @@ snapshots: transitivePeerDependencies: - supports-color - solc@0.7.3(debug@4.3.4): - dependencies: - command-exists: 1.2.9 - commander: 3.0.2 - follow-redirects: 1.15.6(debug@4.3.4) - fs-extra: 0.30.0 - js-sha3: 0.8.0 - memorystream: 0.3.1 - require-from-string: 2.0.2 - semver: 5.7.2 - tmp: 0.0.33 - transitivePeerDependencies: - - debug - sonic-boom@2.8.0: dependencies: atomic-sleep: 1.0.0 @@ -33570,11 +32671,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - test-value@2.1.0: - dependencies: - array-back: 1.0.4 - typical: 2.6.1 - text-encoding-utf-8@1.0.2: {} text-table@0.2.0: {} @@ -33647,10 +32743,6 @@ snapshots: dependencies: tmp: 0.2.3 - tmp@0.0.33: - dependencies: - os-tmpdir: 1.0.2 - tmp@0.2.3: {} tmpl@1.0.5: {} @@ -33717,24 +32809,6 @@ snapshots: minimatch: 10.0.1 typescript: 5.4.5 - ts-essentials@1.0.4: {} - - ts-essentials@7.0.3(typescript@5.4.5): - dependencies: - typescript: 5.4.5 - - ts-generator@0.1.1: - dependencies: - '@types/mkdirp': 0.5.2 - '@types/prettier': 2.7.3 - '@types/resolve': 0.0.8 - chalk: 2.4.2 - glob: 7.2.3 - mkdirp: 0.5.6 - prettier: 2.7.1 - resolve: 1.22.8 - ts-essentials: 1.0.4 - ts-mixer@6.0.4: {} ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5): @@ -33809,8 +32883,6 @@ snapshots: tsutils: 2.29.0(typescript@5.4.5) typescript: 5.4.5 - tsort@0.0.1: {} - tsutils@2.29.0(typescript@5.4.5): dependencies: tslib: 1.14.1 @@ -33845,8 +32917,6 @@ snapshots: type-fest@0.20.2: {} - type-fest@0.21.3: {} - type-fest@0.6.0: {} type-fest@0.7.1: {} @@ -33866,19 +32936,6 @@ snapshots: type@2.7.2: {} - typechain@4.0.3(typescript@5.4.5): - dependencies: - command-line-args: 4.0.7 - debug: 4.3.4(supports-color@8.1.1) - fs-extra: 7.0.1 - js-sha3: 0.8.0 - lodash: 4.17.21 - ts-essentials: 7.0.3(typescript@5.4.5) - ts-generator: 0.1.1 - transitivePeerDependencies: - - supports-color - - typescript - typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 @@ -33927,8 +32984,6 @@ snapshots: typescript@5.4.5: {} - typical@2.6.1: {} - ua-parser-js@1.0.37: {} ufo@1.5.3: {} @@ -34566,22 +33621,6 @@ snapshots: web3-utils: 4.2.3 web3-validator: 2.0.5 - web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): - dependencies: - web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) - web3-types: 1.6.0 - web3-utils: 4.2.3 - web3-validator: 2.0.5 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - web3-eth-contract@4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -34614,24 +33653,6 @@ snapshots: - utf-8-validate - zod - web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): - dependencies: - '@adraffy/ens-normalize': 1.10.1 - web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-types: 1.6.0 - web3-utils: 4.2.3 - web3-validator: 2.0.5 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - web3-eth-ens@4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: '@adraffy/ens-normalize': 1.10.1 @@ -34680,21 +33701,6 @@ snapshots: web3-utils: 4.2.3 web3-validator: 2.0.5 - web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): - dependencies: - web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-rpc-methods: 1.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-types: 1.6.0 - web3-utils: 4.2.3 - web3-validator: 2.0.5 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - web3-eth-personal@4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -34725,26 +33731,6 @@ snapshots: - utf-8-validate - zod - web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): - dependencies: - setimmediate: 1.0.5 - web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-errors: 1.1.4 - web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) - web3-eth-accounts: 4.1.2 - web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-providers-ws: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-rpc-methods: 1.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-types: 1.6.0 - web3-utils: 4.2.3 - web3-validator: 2.0.5 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - web3-eth@4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: setimmediate: 1.0.5 @@ -34913,31 +33899,6 @@ snapshots: web3-types: 1.6.0 zod: 3.23.6 - web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10): - dependencies: - web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-errors: 1.1.4 - web3-eth: 4.6.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-eth-abi: 4.2.1(typescript@5.4.5)(zod@3.23.6) - web3-eth-accounts: 4.1.2 - web3-eth-contract: 4.4.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-eth-ens: 4.2.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-eth-iban: 4.0.7 - web3-eth-personal: 4.0.8(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) - web3-net: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-providers-http: 4.1.0 - web3-providers-ws: 4.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-rpc-methods: 1.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-types: 1.6.0 - web3-utils: 4.2.3 - web3-validator: 2.0.5 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - web3@4.8.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6): dependencies: web3-core: 4.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -35104,10 +34065,6 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - widest-line@3.1.0: - dependencies: - string-width: 4.2.3 - wif@2.0.6: dependencies: bs58check: 2.1.2 @@ -35118,8 +34075,6 @@ snapshots: word-wrap@1.2.5: {} - workerpool@6.2.1: {} - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -35307,13 +34262,6 @@ snapshots: yargs-parser@21.1.1: {} - yargs-unparser@2.0.0: - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - yargs@15.4.1: dependencies: cliui: 6.0.0 From fb4161c47f5473b5fe0d3edecc2b58032af67bab Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Wed, 9 Oct 2024 11:13:48 -0700 Subject: [PATCH 076/425] update farcaster docs --- common_knowledge/Farcaster-Contests.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/common_knowledge/Farcaster-Contests.md b/common_knowledge/Farcaster-Contests.md index e012d1f39e1..4404a0453f9 100644 --- a/common_knowledge/Farcaster-Contests.md +++ b/common_knowledge/Farcaster-Contests.md @@ -1,5 +1,7 @@ # Farcaster Local Development +Tags: #cw + ## Create a Farcaster account First, sign up for a Farcaster account. Warpcast is a Farcaster client that allows you to create an account. It works on mobile and browser. @@ -14,7 +16,7 @@ ngrok is a reverse proxy that allows you to create a publicly accessible URL tha - Go to `Domains` -> `New Domain` to generate a free static domain - Use this command to run ngrok: - `ngrok http --url=YOUR_NGROK_DOMAIN 8080` - - Save as shell alias or local bash script since you’ll need to run this often + - ⭐️ Save as shell alias or local bash script since you’ll need to run this later and often ## Setup Neynar webhook @@ -37,6 +39,10 @@ NEYNAR_REPLY_WEBHOOK_URL=https://YOUR_NGROK_DOMAIN/api/integration/farcaster/Rep FARCASTER_ACTION_URL=https://YOUR_NGROK_DOMAIN/api/integration/farcaster/CastUpvoteAction ``` +The `ALLOWED_EVENTS` env var contains a comma-seperated list of outbox events. Add these to the list: + +`FarcasterCastCreated,FarcasterReplyCastCreated,FarcasterVoteCreated` + ## Run local services Run services required for testing contests: @@ -46,7 +52,7 @@ Run services required for testing contests: - Consumer: `pnpm start-consumer` - App: `pnpm start` -Also ensure that ngrok is running. +Also ensure that ngrok is running. Don't copy-paste the command from the ngrok website– use the aforementioned script. ## Add the Upvote cast action @@ -55,7 +61,8 @@ Farcaster allows users to add a custom “action” to their account, which can - Paste URL into browser, you’ll see the Warpcast page, then click `Add Action` ## How to test the Farcaster/Contests integration -- First, post a farcaster contest URL on Farcaster. It has this format: `https://YOUR_DOMAIN/api/integration/farcaster/contests/CONTEST_ADDRESS/contestCard` +- For testing, you can use any contest that has an associated Topic. +- First, post a farcaster contest URL on Warpcast. It has this format: `https://YOUR_DOMAIN/api/integration/farcaster/contests/CONTEST_ADDRESS/contestCard` - Fill in your ngrok domain and contest address - Upon posting, it should trigger the `CastCreated` webhook and associate the Cast (message) with the contest. It’ll also create a new programatic webhook for `CastReplyCreated`. - Then, add a reply message to the contest cast. From e306d7ff0f1cd1c3df4898ae4f40f2e3c46de31e Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 9 Oct 2024 11:24:25 -0700 Subject: [PATCH 077/425] new buttons.. with tooltips. --- .../MarkdownEditorPage/MarkdownEditorPage.tsx | 2 ++ .../MarkdownEditorPage/NewButtonLayout.tsx | 5 ---- .../pages/MarkdownEditorPage/NewToolbar.scss | 6 +++++ .../pages/MarkdownEditorPage/NewToolbar.tsx | 25 +++++++++++++++++++ 4 files changed, 33 insertions(+), 5 deletions(-) delete mode 100644 packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewButtonLayout.tsx create mode 100644 packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss create mode 100644 packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx index 127b90fee79..cd490825d0b 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx @@ -12,6 +12,7 @@ import { MarkdownSubmitButton } from 'views/components/MarkdownEditor/MarkdownSu import overview from 'views/components/MarkdownEditor/markdown/editor_overview.md?raw'; import supported from 'views/components/MarkdownEditor/markdown/supported.md?raw'; import { useMarkdownEditorMethods } from 'views/components/MarkdownEditor/useMarkdownEditorMethods'; +import { NewToolbar } from 'views/pages/MarkdownEditorPage/NewToolbar'; function useParams() { const [searchParams] = useSearchParams(); @@ -30,6 +31,7 @@ export const MarkdownEditorPage = () => { if (mode === 'desktop') { return (
+
diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewButtonLayout.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewButtonLayout.tsx deleted file mode 100644 index 4439e12fb5c..00000000000 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewButtonLayout.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; - -export const NewButtonLayout = () => { - return
; -}; diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss new file mode 100644 index 00000000000..646b8c71719 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss @@ -0,0 +1,6 @@ +.NewToolbar { + button { + outline: none; + border: none; + } +} diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx new file mode 100644 index 00000000000..097a6807c3c --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; + +import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; +import './NewToolbar.scss'; + +export const NewToolbar = () => { + return ( +
+ +
+ ); +}; From a86968a23b078203d2440fd004b90c20a3d9cc8f Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 9 Oct 2024 11:29:47 -0700 Subject: [PATCH 078/425] this roughly works now... --- .../pages/MarkdownEditorPage/NewToolbar.scss | 8 ++++ .../pages/MarkdownEditorPage/NewToolbar.tsx | 41 +++++++++++++------ 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss index 646b8c71719..576e072f920 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss @@ -1,4 +1,12 @@ .NewToolbar { +} + +.FormattingPopover { + padding: 4px; + + margin-bottom: 8px; + margin-top: 8px; + button { outline: none; border: none; diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx index 097a6807c3c..202c09a5345 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx @@ -1,25 +1,42 @@ import React from 'react'; import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; +import CWPopover, { + usePopover, +} from 'views/components/component_kit/new_designs/CWPopover'; import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; import './NewToolbar.scss'; export const NewToolbar = () => { + const formattingPopoverProps = usePopover(); + return (
- + + + +
+ } + {...formattingPopoverProps} + />
); }; From 5dc6372618b51a77edef8bfd2d1d5d0ca1bcfda8 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 21:50:28 +0300 Subject: [PATCH 079/425] Remove governance proposal event handling --- libs/model/src/chainEventSignatures.ts | 10 -- .../knock/eventHandlers/chainEventCreated.ts | 6 -- .../handleGovnernanceProposalEvents.ts | 95 ------------------- 3 files changed, 111 deletions(-) delete mode 100644 packages/commonwealth/server/workers/knock/eventHandlers/chainEvents/handleGovnernanceProposalEvents.ts diff --git a/libs/model/src/chainEventSignatures.ts b/libs/model/src/chainEventSignatures.ts index 7db19ff4ab1..86fc8931787 100644 --- a/libs/model/src/chainEventSignatures.ts +++ b/libs/model/src/chainEventSignatures.ts @@ -3,13 +3,3 @@ export const deployedNamespaceEventSignature = export const communityStakeTradeEventSignature = '0xfc13c9a8a9a619ac78b803aecb26abdd009182411d51a986090f82519d88a89e'; - -export const proposalEventSignatures = [ - '0x11a0b38e70585e4b09b794bd1d9f9b1a51a802eb8ee2101eeee178d0349e73fe', - '0x712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f', - '0x789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c', - '0x7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0', - '0x9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892', - '0x9c85b616f29fca57a17eafe71cf9ff82ffef41766e2cf01ea7f8f7878dd3ec24', - '0xd272d67d2c8c66de43c1d2515abb064978a5020c173e15903b6a2ab3bf7440ec', -]; diff --git a/packages/commonwealth/server/workers/knock/eventHandlers/chainEventCreated.ts b/packages/commonwealth/server/workers/knock/eventHandlers/chainEventCreated.ts index cc3c5b78a14..bf0fd2e925e 100644 --- a/packages/commonwealth/server/workers/knock/eventHandlers/chainEventCreated.ts +++ b/packages/commonwealth/server/workers/knock/eventHandlers/chainEventCreated.ts @@ -3,11 +3,9 @@ import { communityStakeTradeEventSignature, deployedNamespaceEventSignature, models, - proposalEventSignatures, } from '@hicommonwealth/model'; import z from 'zod'; import { handleCommunityStakeTrades } from './chainEvents/handleCommunityStakeTrades'; -import { handleGovernanceProposalEvents } from './chainEvents/handleGovnernanceProposalEvents'; const log = logger(import.meta); @@ -26,10 +24,6 @@ export const processChainEventCreated: EventHandler< ) { log.info('Implementation not defined', { payload }); return false; - } else if ( - proposalEventSignatures.includes(payload.eventSource.eventSignature) - ) { - return await handleGovernanceProposalEvents(models, payload); } else { log.error('Attempted to process an unsupported chain-event', undefined, { event: payload, diff --git a/packages/commonwealth/server/workers/knock/eventHandlers/chainEvents/handleGovnernanceProposalEvents.ts b/packages/commonwealth/server/workers/knock/eventHandlers/chainEvents/handleGovnernanceProposalEvents.ts deleted file mode 100644 index 1038146c8e2..00000000000 --- a/packages/commonwealth/server/workers/knock/eventHandlers/chainEvents/handleGovnernanceProposalEvents.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { - events, - logger, - notificationsProvider, - WorkflowKeys, -} from '@hicommonwealth/core'; -import { CommunityAttributes, DB } from '@hicommonwealth/model'; -import { ETHERS_BIG_NUMBER } from '@hicommonwealth/schemas'; -import { QueryTypes } from 'sequelize'; -import Web3 from 'web3'; -import { z } from 'zod'; -import { getChainProposalUrl } from '../../util'; - -const log = logger(import.meta); -const web3 = new Web3(); - -export async function handleGovernanceProposalEvents( - models: DB, - event: z.infer, -) { - const community = await models.sequelize.query<{ - id: CommunityAttributes['id']; - name: CommunityAttributes['name']; - }>( - ` - SELECT CH.id as id, CH.name as name - FROM "Contracts" C - JOIN "CommunityContracts" CC on C.id = CC.contract_id - JOIN "Communities" CH ON CC.community_id = CH.id - WHERE C.address = :contractAddress - AND C.chain_node_id = :chainNodeId - LIMIT 1; - `, - { - type: QueryTypes.SELECT, - raw: true, - replacements: { - contractAddress: web3.utils.toChecksumAddress(event.rawLog.address), - chainNodeId: event.eventSource.chainNodeId, - }, - }, - ); - - if (community.length === 0) { - log.error( - 'No associated community found! Consider deactivating the event source', - undefined, - { event }, - ); - return false; - } - - const users = await models.sequelize.query<{ - id: string; - }>( - ` - SELECT user_id::TEXT as id - FROM "CommunityAlerts" - WHERE community_id = :communityId; - `, - { - type: QueryTypes.SELECT, - raw: true, - replacements: { - communityId: community[0].id, - }, - }, - ); - - if (users.length) { - const provider = notificationsProvider(); - - const res = await provider.triggerWorkflow({ - key: WorkflowKeys.ChainProposals, - users, - data: { - community_id: community[0].id, - community_name: community[0].name, - proposal_kind: event.eventSource.kind as - | 'proposal-created' - | 'proposal-canceled' - | 'proposal-executed' - | 'proposal-queued', - proposal_url: getChainProposalUrl( - community[0].id, - String(event.parsedArgs[0] as z.infer), - ), - }, - }); - - return !res.some((r) => r.status === 'rejected'); - } - - return true; -} From c83a6b24698dbce8786933173d846e1c8546002f Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 22:00:46 +0300 Subject: [PATCH 080/425] remove Contracts + CommunityContracts --- .../src/community/DeleteCommunity.command.ts | 1 - libs/model/src/models/associations.ts | 11 +- libs/model/src/models/community.ts | 3 - libs/model/src/models/community_contract.ts | 43 ------ libs/model/src/models/contract.ts | 68 ---------- libs/model/src/models/evmEventSource.ts | 2 - libs/model/src/models/factories.ts | 4 - libs/model/src/models/index.ts | 2 - libs/model/src/tester/seedDb.ts | 46 ------- libs/schemas/src/index.ts | 2 - .../update_community_id.ts | 1 - .../20241009185744-drop-contracts.js | 13 ++ .../knock/chainEventCreated.spec.ts | 124 ------------------ 13 files changed, 14 insertions(+), 306 deletions(-) delete mode 100644 libs/model/src/models/community_contract.ts delete mode 100644 libs/model/src/models/contract.ts create mode 100644 packages/commonwealth/server/migrations/20241009185744-drop-contracts.js diff --git a/libs/model/src/community/DeleteCommunity.command.ts b/libs/model/src/community/DeleteCommunity.command.ts index be5a6c5e512..2f3405534ab 100644 --- a/libs/model/src/community/DeleteCommunity.command.ts +++ b/libs/model/src/community/DeleteCommunity.command.ts @@ -115,7 +115,6 @@ export function DeleteCommunity(): Command< models.CommunityStake, models.DiscordBotConfig, models.Topic, - models.CommunityContract, models.Webhook, models.Vote, models.Poll, diff --git a/libs/model/src/models/associations.ts b/libs/model/src/models/associations.ts index 217d14f39b8..7c7fbed3a09 100644 --- a/libs/model/src/models/associations.ts +++ b/libs/model/src/models/associations.ts @@ -33,15 +33,11 @@ export const buildAssociations = (db: DB) => { }); db.ChainNode.withMany(db.Community) - .withMany(db.Contract, { asMany: 'contracts' }) .withMany(db.EvmEventSource) .withOne(db.LastProcessedEvmBlock) .withMany(db.Topic); - db.ContractAbi.withMany(db.Contract, { foreignKey: 'abi_id' }).withMany( - db.EvmEventSource, - { foreignKey: 'abi_id' }, - ); + db.ContractAbi.withMany(db.EvmEventSource, { foreignKey: 'abi_id' }); db.Community.withMany(db.Group, { asMany: 'groups' }) .withMany(db.Topic, { @@ -151,11 +147,6 @@ export const buildAssociations = (db: DB) => { { model: db.Thread, asMany: 'collaborators' }, ); - db.CommunityContract.withManyToMany( - { model: db.Community }, - { model: db.Contract }, - ); - db.StarredCommunity.withManyToMany( { model: db.Community, onUpdate: 'CASCADE' }, { model: db.User, onUpdate: 'CASCADE' }, diff --git a/libs/model/src/models/community.ts b/libs/model/src/models/community.ts index 9bc2267dda3..f7b258690b8 100644 --- a/libs/model/src/models/community.ts +++ b/libs/model/src/models/community.ts @@ -6,7 +6,6 @@ import type { ChainNodeAttributes, ChainNodeInstance } from './chain_node'; import type { CommentAttributes } from './comment'; import type { CommunityAlertAttributes } from './community_alerts'; import type { CommunityTagsAttributes } from './community_tags'; -import type { ContractInstance } from './contract'; import type { StarredCommunityAttributes } from './starred_community'; import type { ThreadAttributes } from './thread'; import type { TopicInstance } from './topic'; @@ -22,7 +21,6 @@ export type CommunityAttributes = z.infer & { Comments?: CommentAttributes[] | CommentAttributes['id'][]; Users?: UserAttributes[] | UserAttributes['id'][]; ChainObjectVersion?: any; // TODO - Contract?: ContractInstance; lifetime_thread_count?: number; profile_count?: number; count_updated?: boolean; @@ -42,7 +40,6 @@ export type CommunityInstance = ModelInstance & { TopicInstance, TopicInstance['id'] >; - getContracts: Sequelize.BelongsToManyGetAssociationsMixin; }; export default ( diff --git a/libs/model/src/models/community_contract.ts b/libs/model/src/models/community_contract.ts deleted file mode 100644 index 9e231276211..00000000000 --- a/libs/model/src/models/community_contract.ts +++ /dev/null @@ -1,43 +0,0 @@ -import Sequelize from 'sequelize'; // must use "* as" to avoid scope errors -import type { CommunityAttributes, CommunityInstance } from './community'; -import type { ContractAttributes, ContractInstance } from './contract'; -import type { ModelInstance } from './types'; - -export type CommunityContractAttributes = { - id?: number; - community_id: string; - contract_id: number; - created_at: Date; - updated_at: Date; - - // Associations - Contract?: ContractAttributes; - Community?: CommunityAttributes; -}; - -export type CommunityContractInstance = - ModelInstance & { - getCommunity: Sequelize.BelongsToGetAssociationMixin; - getContract: Sequelize.BelongsToGetAssociationMixin; - }; - -export default ( - sequelize: Sequelize.Sequelize, -): Sequelize.ModelStatic => - sequelize.define( - 'CommunityContract', - { - id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, - community_id: { type: Sequelize.STRING, allowNull: false }, - contract_id: { type: Sequelize.INTEGER, allowNull: false }, - created_at: { type: Sequelize.DATE, allowNull: false }, - updated_at: { type: Sequelize.DATE, allowNull: false }, - }, - { - tableName: 'CommunityContracts', - timestamps: true, - underscored: true, - createdAt: 'created_at', - updatedAt: 'updated_at', - }, - ); diff --git a/libs/model/src/models/contract.ts b/libs/model/src/models/contract.ts deleted file mode 100644 index 2dde357b476..00000000000 --- a/libs/model/src/models/contract.ts +++ /dev/null @@ -1,68 +0,0 @@ -import Sequelize from 'sequelize'; // must use "* as" to avoid scope errors -import type { ChainNodeAttributes, ChainNodeInstance } from './chain_node'; -import type { - CommunityContractAttributes, - CommunityContractInstance, -} from './community_contract'; -import type { ModelInstance } from './types'; - -export type ContractAttributes = { - id?: number; - address: string; - chain_node_id: number; - abi_id?: number; - decimals?: number; - token_name?: string; - symbol?: string; - type?: string; - is_factory?: boolean; - nickname?: string; - created_at?: Date; - updated_at?: Date; - - // associations - ChainNode?: ChainNodeAttributes; - CommunityContract?: CommunityContractAttributes; -}; - -export type ContractInstance = ModelInstance & { - getChainNode: Sequelize.BelongsToGetAssociationMixin; - getCommunityContract: Sequelize.BelongsToGetAssociationMixin; -}; - -export default ( - sequelize: Sequelize.Sequelize, -): Sequelize.ModelStatic => - sequelize.define( - 'Contract', - { - id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, - address: { type: Sequelize.STRING, allowNull: false }, - chain_node_id: { type: Sequelize.INTEGER, allowNull: false }, - decimals: { type: Sequelize.INTEGER, allowNull: true }, - token_name: { type: Sequelize.STRING, allowNull: true }, - symbol: { type: Sequelize.STRING, allowNull: true }, - type: { type: Sequelize.STRING, allowNull: true }, // for governance erc20, etc. formerly network - abi_id: { type: Sequelize.INTEGER, allowNull: true }, - created_at: { type: Sequelize.DATE, allowNull: false }, - updated_at: { type: Sequelize.DATE, allowNull: false }, - is_factory: { - type: Sequelize.BOOLEAN, - allowNull: false, - defaultValue: false, - }, - nickname: { type: Sequelize.STRING, allowNull: true }, - }, - { - tableName: 'Contracts', - indexes: [ - { - fields: ['address'], - }, - ], - timestamps: true, - underscored: true, - createdAt: 'created_at', - updatedAt: 'updated_at', - }, - ); diff --git a/libs/model/src/models/evmEventSource.ts b/libs/model/src/models/evmEventSource.ts index a30b7a43b40..0b693aa2d44 100644 --- a/libs/model/src/models/evmEventSource.ts +++ b/libs/model/src/models/evmEventSource.ts @@ -1,6 +1,5 @@ import Sequelize from 'sequelize'; import { ChainNodeAttributes } from './chain_node'; -import { ContractAttributes } from './contract'; import { ContractAbiAttributes } from './contract_abi'; import { ModelInstance } from './types'; @@ -16,7 +15,6 @@ export type EvmEventSourceAttributes = { abi_id: number; ContractAbi?: ContractAbiAttributes; - Contract?: ContractAttributes; ChainNode?: ChainNodeAttributes; }; diff --git a/libs/model/src/models/factories.ts b/libs/model/src/models/factories.ts index b92197182b1..f34feca3dbc 100644 --- a/libs/model/src/models/factories.ts +++ b/libs/model/src/models/factories.ts @@ -10,14 +10,12 @@ import CommentSubscription from './comment_subscriptions'; import CommentVersionHistory from './comment_version_history'; import Community from './community'; import CommunityAlert from './community_alerts'; -import CommunityContract from './community_contract'; import CommunityStake from './community_stake'; import CommunityTags from './community_tags'; import Contest from './contest'; import ContestAction from './contest_action'; import ContestManager from './contest_manager'; import ContestTopic from './contest_topic'; -import Contract from './contract'; import ContractAbi from './contract_abi'; import DiscordBotConfig from './discord_bot_config'; import EmailUpdateToken from './email_update_token'; @@ -55,14 +53,12 @@ export const Factories = { CommentSubscription, Community, CommunityAlert, - CommunityContract, CommunityStake, CommunityTags, Contest, ContestAction, ContestManager, ContestTopic, - Contract, ContractAbi, DiscordBotConfig, EmailUpdateToken, diff --git a/libs/model/src/models/index.ts b/libs/model/src/models/index.ts index 99c49cf8464..c591cd31be0 100644 --- a/libs/model/src/models/index.ts +++ b/libs/model/src/models/index.ts @@ -51,11 +51,9 @@ export * from './comment'; export * from './comment_subscriptions'; export * from './comment_version_history'; export * from './community'; -export * from './community_contract'; export * from './community_role'; export * from './community_stake'; export * from './community_tags'; -export * from './contract'; export * from './contract_abi'; export * from './discord_bot_config'; export * from './email_update_token'; diff --git a/libs/model/src/tester/seedDb.ts b/libs/model/src/tester/seedDb.ts index 4b6931d18ab..4a7116d3528 100644 --- a/libs/model/src/tester/seedDb.ts +++ b/libs/model/src/tester/seedDb.ts @@ -347,52 +347,6 @@ export const seedDb = async () => { })), ); - const [alexContract, yearnContract, sushiContract] = - await models.Contract.bulkCreate([ - { - address: '0xFab46E002BbF0b4509813474841E0716E6730136', - token_name: 'Alex', - symbol: 'ALEX', - type: ChainNetwork.ERC20, - chain_node_id: testnetNode.id!, - }, - { - address: '0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e', - token_name: 'yearn', - symbol: 'YFI', - type: ChainNetwork.ERC20, - chain_node_id: mainnetNode.id!, - }, - { - address: '0x6b3595068778dd592e39a122f4f5a5cf09c90fe2', - token_name: 'sushi', - symbol: 'SUSHI', - type: ChainNetwork.ERC20, - chain_node_id: mainnetNode.id!, - }, - ]); - - await models.CommunityContract.bulkCreate([ - { - community_id: alex.id!, - contract_id: alexContract.id!, - created_at: new Date(), - updated_at: new Date(), - }, - { - community_id: yearn.id!, - contract_id: yearnContract.id!, - created_at: new Date(), - updated_at: new Date(), - }, - { - community_id: sushi.id!, - contract_id: sushiContract.id!, - created_at: new Date(), - updated_at: new Date(), - }, - ]); - await models.CommunityStake.create({ // id: 1, –– ID doesn't exist on the DB table? community_id: 'ethereum', diff --git a/libs/schemas/src/index.ts b/libs/schemas/src/index.ts index d5c6785c811..a71671c5a03 100644 --- a/libs/schemas/src/index.ts +++ b/libs/schemas/src/index.ts @@ -18,8 +18,6 @@ export type Aggregates = Extract< | 'Topic' | 'CommentSubscription' | 'ThreadSubscription' - | 'Contract' - | 'CommunityContract' | 'Wallets' | 'GroupPermission' | 'Tags' diff --git a/packages/commonwealth/server/controllers/server_communities_methods/update_community_id.ts b/packages/commonwealth/server/controllers/server_communities_methods/update_community_id.ts index 6b450e3152b..1ef3a4eaed9 100644 --- a/packages/commonwealth/server/controllers/server_communities_methods/update_community_id.ts +++ b/packages/commonwealth/server/controllers/server_communities_methods/update_community_id.ts @@ -82,7 +82,6 @@ export async function __updateCommunityId( this.models.StarredCommunity, this.models.Vote, this.models.Webhook, - this.models.CommunityContract, this.models.CommunityStake, this.models.DiscordBotConfig, this.models.Group, diff --git a/packages/commonwealth/server/migrations/20241009185744-drop-contracts.js b/packages/commonwealth/server/migrations/20241009185744-drop-contracts.js new file mode 100644 index 00000000000..6d46451ae6f --- /dev/null +++ b/packages/commonwealth/server/migrations/20241009185744-drop-contracts.js @@ -0,0 +1,13 @@ +'use strict'; + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.dropTable('Contracts', { transaction }); + await queryInterface.dropTable('CommunityContracts', { transaction }); + }); + }, + + async down(queryInterface, Sequelize) {}, +}; diff --git a/packages/commonwealth/test/integration/knock/chainEventCreated.spec.ts b/packages/commonwealth/test/integration/knock/chainEventCreated.spec.ts index 91c962e19d7..61d1af1434c 100644 --- a/packages/commonwealth/test/integration/knock/chainEventCreated.spec.ts +++ b/packages/commonwealth/test/integration/knock/chainEventCreated.spec.ts @@ -29,7 +29,6 @@ import { } from 'vitest'; import z from 'zod'; import { processChainEventCreated } from '../../../server/workers/knock/eventHandlers/chainEventCreated'; -import { getChainProposalUrl } from '../../../server/workers/knock/util'; import { getCommunityUrl } from '../../../shared/utils'; chai.use(chaiAsPromised); @@ -66,15 +65,6 @@ describe('chainEventCreated Event Handler', () => { profile_count: 0, Addresses: [], }); - const [contract] = await tester.seed('Contract', { - address: communityStakesAddress, - chain_node_id: chainNode!.id!, - abi_id: null, - }); - await tester.seed('CommunityContract', { - community_id: community!.id, - contract_id: contract!.id, - }); }); beforeEach(async () => { @@ -206,118 +196,4 @@ describe('chainEventCreated Event Handler', () => { ).to.eventually.be.rejectedWith(ProviderError); }); }); - - describe('Chain Proposals', () => { - test('should not throw if the community is invalid', async () => { - const res = await processChainEventCreated({ - name: EventNames.ChainEventCreated, - payload: { - eventSource: { - eventSignature: proposalCreatedEventSignature, - chainNodeId: chainNode!.id, - }, - rawLog: { - address: '0x0000000000000000000000000000000000000000', - }, - parsedArgs: [proposalId], - } as unknown as z.infer, - }); - expect(res).to.be.false; - }); - - test('should do nothing if there are no relevant subscriptions', async () => { - sandbox = sinon.createSandbox(); - const provider = notificationsProvider({ - adapter: SpyNotificationsProvider(sandbox), - }); - - const res = await processChainEventCreated({ - name: EventNames.ChainEventCreated, - payload: { - eventSource: { - eventSignature: proposalCreatedEventSignature, - chainNodeId: chainNode!.id, - }, - rawLog: { - address: communityStakesAddress, - }, - parsedArgs: [proposalId], - } as unknown as z.infer, - }); - expect(res).to.be.true; - expect((provider.triggerWorkflow as sinon.SinonStub).notCalled).to.be - .true; - }); - - test('should execute triggerWorkflow with the appropriate data', async () => { - sandbox = sinon.createSandbox(); - const provider = notificationsProvider({ - adapter: SpyNotificationsProvider(sandbox), - }); - - await tester.seed('CommunityAlert', { - community_id: community!.id, - user_id: user!.id, - }); - - const res = await processChainEventCreated({ - name: EventNames.ChainEventCreated, - payload: { - eventSource: { - eventSignature: proposalCreatedEventSignature, - kind: 'proposal-created', - chainNodeId: chainNode!.id, - }, - rawLog: { - address: communityStakesAddress, - }, - parsedArgs: [proposalId], - } as unknown as z.infer, - }); - expect(res).to.be.true; - expect((provider.triggerWorkflow as sinon.SinonStub).calledOnce).to.be - .true; - expect( - (provider.triggerWorkflow as sinon.SinonStub).getCall(0).args[0], - ).to.deep.equal({ - key: WorkflowKeys.ChainProposals, - users: [{ id: String(user!.id) }], - data: { - community_id: community!.id, - community_name: community!.name, - proposal_kind: 'proposal-created', - proposal_url: getChainProposalUrl(community!.id, proposalId), - }, - }); - }); - - test('should throw if triggerWorkflow fails', async () => { - sandbox = sinon.createSandbox(); - notificationsProvider({ - adapter: ThrowingSpyNotificationsProvider(sandbox), - }); - - await tester.seed('CommunityAlert', { - community_id: community!.id, - user_id: user!.id, - }); - - await expect( - processChainEventCreated({ - name: EventNames.ChainEventCreated, - payload: { - eventSource: { - eventSignature: proposalCreatedEventSignature, - kind: 'proposal-created', - chainNodeId: chainNode!.id, - }, - rawLog: { - address: communityStakesAddress, - }, - parsedArgs: [proposalId], - } as unknown as z.infer, - }), - ).to.eventually.be.rejectedWith(ProviderError); - }); - }); }); From c6dfc9eba0f742d02cb2ff48608284575f641df5 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 22:11:07 +0300 Subject: [PATCH 081/425] fix migration + lint --- libs/model/src/tester/seedDb.ts | 2 +- .../test/integration/knock/chainEventCreated.spec.ts | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/libs/model/src/tester/seedDb.ts b/libs/model/src/tester/seedDb.ts index 4a7116d3528..fd61f8dbcff 100644 --- a/libs/model/src/tester/seedDb.ts +++ b/libs/model/src/tester/seedDb.ts @@ -128,7 +128,7 @@ export const seedDb = async () => { }), ); - const [alex, yearn, sushi] = await models.Community.bulkCreate( + await models.Community.bulkCreate( [ { id: 'alex', diff --git a/packages/commonwealth/test/integration/knock/chainEventCreated.spec.ts b/packages/commonwealth/test/integration/knock/chainEventCreated.spec.ts index 61d1af1434c..f05c526e24f 100644 --- a/packages/commonwealth/test/integration/knock/chainEventCreated.spec.ts +++ b/packages/commonwealth/test/integration/knock/chainEventCreated.spec.ts @@ -34,10 +34,6 @@ import { getCommunityUrl } from '../../../shared/utils'; chai.use(chaiAsPromised); const namespaceAddress = '0x123'; -const communityStakesAddress = '0x0000000000000000000000000000000000000001'; -const proposalId = '0x1'; -const proposalCreatedEventSignature = - '0xd272d67d2c8c66de43c1d2515abb064978a5020c173e15903b6a2ab3bf7440ec'; describe('chainEventCreated Event Handler', () => { let community: z.infer | undefined; From 89e0a098ed6235fe93ef20f48fc1b0dc0b862c8e Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 22:18:30 +0300 Subject: [PATCH 082/425] fix migration --- .../server/migrations/20241009185744-drop-contracts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/server/migrations/20241009185744-drop-contracts.js b/packages/commonwealth/server/migrations/20241009185744-drop-contracts.js index 6d46451ae6f..04f7a4c5f34 100644 --- a/packages/commonwealth/server/migrations/20241009185744-drop-contracts.js +++ b/packages/commonwealth/server/migrations/20241009185744-drop-contracts.js @@ -4,8 +4,8 @@ module.exports = { async up(queryInterface, Sequelize) { await queryInterface.sequelize.transaction(async (transaction) => { - await queryInterface.dropTable('Contracts', { transaction }); await queryInterface.dropTable('CommunityContracts', { transaction }); + await queryInterface.dropTable('Contracts', { transaction }); }); }, From 0ed6a17f91d57b31a31e8b116c600aad794ec19a Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 22:30:57 +0300 Subject: [PATCH 083/425] remove aave/compound event schemas --- .../src/integration/chain-event.schemas.ts | 50 -------------- libs/core/src/integration/events.schemas.ts | 68 +------------------ 2 files changed, 1 insertion(+), 117 deletions(-) diff --git a/libs/core/src/integration/chain-event.schemas.ts b/libs/core/src/integration/chain-event.schemas.ts index 8fab2c68b3a..91686a7776f 100644 --- a/libs/core/src/integration/chain-event.schemas.ts +++ b/libs/core/src/integration/chain-event.schemas.ts @@ -20,53 +20,3 @@ export const NamespaceDeployed = z.tuple([ z.string().describe('_signature'), EVM_ADDRESS.describe('_namespaceDeployer'), ]); - -export const AaveV2ProposalCreated = z.tuple([ - ETHERS_BIG_NUMBER.describe('id'), - EVM_ADDRESS.describe('creator'), - EVM_ADDRESS.describe('executor'), - z.array(EVM_ADDRESS).describe('targets'), - z.array(z.string()).describe('signatures'), - z.array(z.string()).describe('calldatas'), - z.array(z.boolean()).describe('withDelegatecalls'), - ETHERS_BIG_NUMBER.describe('startBlock'), - ETHERS_BIG_NUMBER.describe('endBlock'), - EVM_ADDRESS.describe('strategy'), - z.string().describe('ipfsHash'), -]); - -export const AaveV2ProposalQueued = z.tuple([ - ETHERS_BIG_NUMBER.describe('id'), - ETHERS_BIG_NUMBER.describe('executionTime'), - EVM_ADDRESS.describe('initiatorQueueing'), -]); - -export const AaveV2ProposalExecuted = z.tuple([ - ETHERS_BIG_NUMBER.describe('id'), - EVM_ADDRESS.describe('initiatorExecution'), -]); - -export const GovBravoProposalCreated = z.tuple([ - ETHERS_BIG_NUMBER.describe('proposalId'), - EVM_ADDRESS.describe('proposer'), - z.array(EVM_ADDRESS).describe('targets'), - z.array(ETHERS_BIG_NUMBER).describe('values'), - z.array(z.string()).describe('signatures'), - z.array(z.string()).describe('calldatas'), - ETHERS_BIG_NUMBER.describe('startBlock'), - ETHERS_BIG_NUMBER.describe('endBlock'), - z.string().describe('description'), -]); - -export const GovBravoProposalQueued = z.tuple([ - ETHERS_BIG_NUMBER.describe('proposalId'), - ETHERS_BIG_NUMBER.describe('eta'), -]); - -export const GovBravoProposalExecuted = z.tuple([ - ETHERS_BIG_NUMBER.describe('proposalId'), -]); - -export const GenericProposalCanceled = z.tuple([ - ETHERS_BIG_NUMBER.describe('proposalId'), -]); diff --git a/libs/core/src/integration/events.schemas.ts b/libs/core/src/integration/events.schemas.ts index ee0bfa1fe9f..aceb65fe13f 100644 --- a/libs/core/src/integration/events.schemas.ts +++ b/libs/core/src/integration/events.schemas.ts @@ -6,17 +6,7 @@ import { Thread, } from '@hicommonwealth/schemas'; import { z } from 'zod'; -import { - AaveV2ProposalCreated, - AaveV2ProposalExecuted, - AaveV2ProposalQueued, - CommunityStakeTrade, - GenericProposalCanceled, - GovBravoProposalCreated, - GovBravoProposalExecuted, - GovBravoProposalQueued, - NamespaceDeployed, -} from './chain-event.schemas'; +import { CommunityStakeTrade, NamespaceDeployed } from './chain-event.schemas'; import { EventMetadata } from './util.schemas'; export const ThreadCreated = Thread.omit({ search: true }).extend({ @@ -158,62 +148,6 @@ const ChainEventCreatedBase = z.object({ * Zod schema for EvmEvent type defined in workers/evmChainEvents/types.ts */ export const ChainEventCreated = z.union([ - ChainEventCreatedBase.extend({ - eventSource: ChainEventCreatedBase.shape.eventSource.extend({ - eventSignature: z.literal( - '0x7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0', - ), - }), - parsedArgs: GovBravoProposalCreated, - }), - ChainEventCreatedBase.extend({ - eventSource: ChainEventCreatedBase.shape.eventSource.extend({ - eventSignature: z.literal( - '0xd272d67d2c8c66de43c1d2515abb064978a5020c173e15903b6a2ab3bf7440ec', - ), - }), - parsedArgs: AaveV2ProposalCreated, - }), - ChainEventCreatedBase.extend({ - eventSource: ChainEventCreatedBase.shape.eventSource.extend({ - eventSignature: z.literal( - '0x11a0b38e70585e4b09b794bd1d9f9b1a51a802eb8ee2101eeee178d0349e73fe', - ), - }), - parsedArgs: AaveV2ProposalQueued, - }), - ChainEventCreatedBase.extend({ - eventSource: ChainEventCreatedBase.shape.eventSource.extend({ - eventSignature: z.literal( - '0x9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892', - ), - }), - parsedArgs: GovBravoProposalQueued, - }), - ChainEventCreatedBase.extend({ - eventSource: ChainEventCreatedBase.shape.eventSource.extend({ - eventSignature: z.literal( - '0x712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f', - ), - }), - parsedArgs: GovBravoProposalExecuted, - }), - ChainEventCreatedBase.extend({ - eventSource: ChainEventCreatedBase.shape.eventSource.extend({ - eventSignature: z.literal( - '0x9c85b616f29fca57a17eafe71cf9ff82ffef41766e2cf01ea7f8f7878dd3ec24', - ), - }), - parsedArgs: AaveV2ProposalExecuted, - }), - ChainEventCreatedBase.extend({ - eventSource: ChainEventCreatedBase.shape.eventSource.extend({ - eventSignature: z.literal( - '0x789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c', - ), - }), - parsedArgs: GenericProposalCanceled, - }), ChainEventCreatedBase.extend({ eventSource: ChainEventCreatedBase.shape.eventSource.extend({ eventSignature: z.literal( From 29dbf0d05ead19b455da1240b5420b0e6b628767 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 22:51:24 +0300 Subject: [PATCH 084/425] massive `commonwealth/shared/` clean-up --- .../cosmos/gov/v1beta1/proposal-v1beta1.ts | 4 - .../client/scripts/models/ChainEvent.ts | 35 ----- .../client/scripts/models/Proposal.ts | 3 - .../shared/adapters/chain/aave/types.ts | 19 --- .../adapters/chain/commonwealth/types.ts | 85 ------------ .../shared/adapters/chain/compound/types.ts | 17 --- .../shared/adapters/chain/ethereum/types.ts | 36 ----- .../shared/chain/labelers/aave.ts | 123 ------------------ .../shared/chain/labelers/compound.ts | 80 ------------ .../shared/chain/labelers/cosmos.ts | 54 -------- .../shared/chain/labelers/util.ts | 36 ----- .../commonwealth/shared/chain/types/aave.ts | 123 ------------------ .../shared/chain/types/compound.ts | 70 ---------- .../commonwealth/shared/chain/types/cosmos.ts | 52 -------- .../commonwealth/shared/chain/types/types.ts | 20 --- .../test/integration/api/index.spec.ts | 2 +- .../integration/api/verifyAddress.spec.ts | 2 +- .../chain/ethereum => test/util}/keys.ts | 2 - packages/commonwealth/test/util/modelUtils.ts | 2 +- 19 files changed, 3 insertions(+), 762 deletions(-) delete mode 100644 packages/commonwealth/client/scripts/models/ChainEvent.ts delete mode 100644 packages/commonwealth/shared/adapters/chain/aave/types.ts delete mode 100644 packages/commonwealth/shared/adapters/chain/commonwealth/types.ts delete mode 100644 packages/commonwealth/shared/adapters/chain/compound/types.ts delete mode 100644 packages/commonwealth/shared/chain/labelers/aave.ts delete mode 100644 packages/commonwealth/shared/chain/labelers/compound.ts delete mode 100644 packages/commonwealth/shared/chain/labelers/cosmos.ts delete mode 100644 packages/commonwealth/shared/chain/labelers/util.ts delete mode 100644 packages/commonwealth/shared/chain/types/aave.ts delete mode 100644 packages/commonwealth/shared/chain/types/compound.ts delete mode 100644 packages/commonwealth/shared/chain/types/types.ts rename packages/commonwealth/{shared/adapters/chain/ethereum => test/util}/keys.ts (79%) diff --git a/packages/commonwealth/client/scripts/controllers/chain/cosmos/gov/v1beta1/proposal-v1beta1.ts b/packages/commonwealth/client/scripts/controllers/chain/cosmos/gov/v1beta1/proposal-v1beta1.ts index de257fd1cd8..0ef21da4e30 100644 --- a/packages/commonwealth/client/scripts/controllers/chain/cosmos/gov/v1beta1/proposal-v1beta1.ts +++ b/packages/commonwealth/client/scripts/controllers/chain/cosmos/gov/v1beta1/proposal-v1beta1.ts @@ -146,10 +146,6 @@ export class CosmosProposal extends Proposal< this._Governance.store.add(this); } - public update() { - throw new Error('unimplemented'); - } - public init() { if (!this.initialized) { this._initialized = true; diff --git a/packages/commonwealth/client/scripts/models/ChainEvent.ts b/packages/commonwealth/client/scripts/models/ChainEvent.ts deleted file mode 100644 index 663a2ed675a..00000000000 --- a/packages/commonwealth/client/scripts/models/ChainEvent.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { SupportedNetwork } from '@hicommonwealth/shared'; -import _ from 'underscore'; -import type { IChainEventData } from '../../../shared/chain/types/types'; - -class ChainEvent { - public readonly id?: number; - public readonly blockNumber?: number; - public readonly data: IChainEventData; - public readonly chain: string; - public readonly network: SupportedNetwork; - - public eq(e: ChainEvent) { - return e.data.kind === this.data.kind && _.isEqual(this.data, e.data); - } - - constructor(data, id?, chain?, network?, blockNumber?) { - this.id = id; - this.blockNumber = blockNumber; - this.data = data; - this.chain = chain; - this.network = network; - } - - public static fromJSON(json) { - return new ChainEvent( - json.data || json.event_data, - json.id, - json.community_id, - json.network, - json.blockNumber || json.block_number, - ); - } -} - -export default ChainEvent; diff --git a/packages/commonwealth/client/scripts/models/Proposal.ts b/packages/commonwealth/client/scripts/models/Proposal.ts index cff7a27d5a8..7613da341ec 100644 --- a/packages/commonwealth/client/scripts/models/Proposal.ts +++ b/packages/commonwealth/client/scripts/models/Proposal.ts @@ -5,7 +5,6 @@ import { EventEmitter } from 'events'; import type moment from 'moment'; import type { ProposalStore } from '../stores'; import type Account from './Account'; -import type ChainEvent from './ChainEvent'; import type { ITXModalData, IUniqueId, IVote } from './interfaces'; import type { ProposalEndTime, @@ -86,8 +85,6 @@ abstract class Proposal< this.identifier = data.identifier; } - public abstract update(e: ChainEvent): any; - public updateVoters?: () => Promise; protected complete( diff --git a/packages/commonwealth/shared/adapters/chain/aave/types.ts b/packages/commonwealth/shared/adapters/chain/aave/types.ts deleted file mode 100644 index b3e5527fe82..00000000000 --- a/packages/commonwealth/shared/adapters/chain/aave/types.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { IProposalCreated, IVoteEmitted } from '../../../chain/types/aave'; -import type { ICompletable } from '../../shared'; -import { BigNumber } from 'ethers'; - -export type IAaveProposalResponse = Omit & - ICompletable & { - executionTime?: number; - queued: boolean; - executed: boolean; - cancelled: boolean; - minimumQuorum: BigNumber; - minimumDiff: BigNumber; - votingSupplyAtStart: BigNumber; - forVotes: BigNumber; - againstVotes: BigNumber; - executionTimeWithGracePeriod: BigNumber; - }; - -export type IAaveVoteResponse = Omit; diff --git a/packages/commonwealth/shared/adapters/chain/commonwealth/types.ts b/packages/commonwealth/shared/adapters/chain/commonwealth/types.ts deleted file mode 100644 index ed3330d58c9..00000000000 --- a/packages/commonwealth/shared/adapters/chain/commonwealth/types.ts +++ /dev/null @@ -1,85 +0,0 @@ -// TODO: figure out how to unify this with the query, so we don't need -// to manually provide the types of each response. There are tools that -// do this, but we'll need to think through them. Currently, this corresponds -// exactly to the format returned by the graphql query. - -// Represents all relevant fields of a member of a Moloch DAO -export interface ICommonwealthMember { - // address of the member - id: string; - - // // address of the member who invited them - // delegateKey: string; - - // // number of shares owned by member - // shares: string; - - // // highest proposal index on which the member voted YES - // highestIndexYesVote?: string; -} - -// export interface IMolochVote { -// // who voted -// memberAddress: string; - -// // when did they vote -// timestamp: string; - -// // 1 = yes, 2 = no, 0 = abstain -// uintVote: number; - -// // n shares held by member -// member: IMolochMember; -// } - -// // Every moloch proposal represents a request by an applicant to be added -// // into the DAO. They offer tribute in ETH and request shares, which are minted -// // upon success (diluting the value of all shareholders). In this way, applicants -// // can be either people who want to participate, or projects requesting funding, -// // where the "applicant" acts as escrow and offers no tribute. -// export interface IMolochProposalResponse { -// // dummy field required by interfaces -// identifier: string; - -// // unique identifier -// id: string; - -// // name of applicant/application project or ipfs hash -// details: string; - -// // time of submission -// timestamp: string; - -// // periodDuration: default = 17280 = 4.8 hours in seconds (5 periods per day) -// // votingPeriodLength: default = 35 periods (7 days) -// // currentPeriod = (now - summoning time) / periodDuration -// // absolute period when it starts, given above -// startingPeriod: string; - -// // sponsoring address -// delegateKey: string; - -// // address of applicant -// applicantAddress: string; - -// // how much ETH applicant is offering as tribute -// tokenTribute: string; - -// // how many shares applicant is requesting upon joining -// sharesRequested: string; - -// // was it completed? -// processed: boolean; - -// // proposal state -// status?: string; -// didPass?: boolean; -// aborted?: boolean; - -// // list of all votes -// votes: IMolochVote[]; - -// // used if votes cannot be fetched -// yesVotes?: string; -// noVotes?: string; -// } diff --git a/packages/commonwealth/shared/adapters/chain/compound/types.ts b/packages/commonwealth/shared/adapters/chain/compound/types.ts deleted file mode 100644 index 2dce775448a..00000000000 --- a/packages/commonwealth/shared/adapters/chain/compound/types.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { ICompletable } from '../../shared'; -import { BigNumber } from 'ethers'; -import type { - IProposalCreated, - IVoteCast, -} from '../../../chain/types/compound'; - -export type ICompoundProposalResponse = Omit & - ICompletable & { - eta?: number; - forVotes: BigNumber; - againstVotes: BigNumber; - abstainVotes?: BigNumber; - state: number; - }; - -export type ICompoundVoteResponse = Omit; diff --git a/packages/commonwealth/shared/adapters/chain/ethereum/types.ts b/packages/commonwealth/shared/adapters/chain/ethereum/types.ts index 7d472f647a9..9d906acd323 100644 --- a/packages/commonwealth/shared/adapters/chain/ethereum/types.ts +++ b/packages/commonwealth/shared/adapters/chain/ethereum/types.ts @@ -6,39 +6,3 @@ export class EthereumCoin extends Coin { super(denom, n, inDollars, new BN(10).pow(new BN(18))); } } - -export class MolochShares extends EthereumCoin { - public readonly contractAddress: string; - - constructor(contractAddress: string, n: number | BN | MolochShares) { - super('Shares', n, false); - this.contractAddress = contractAddress; - } -} - -export class ERC20Token extends EthereumCoin { - public readonly contractAddress: string; - - constructor(contractAddress: string, n: number | BN) { - super(`ERC20(${contractAddress.substr(0, 6)})`, n, false); - this.contractAddress = contractAddress; - } -} - -export class ERC721Token extends EthereumCoin { - public readonly contractAddress: string; - - constructor(contractAddress: string, n: number | BN) { - super(`ERC721(${contractAddress.substr(0, 6)})`, n, false); - this.contractAddress = contractAddress; - } -} - -export class MPond extends EthereumCoin { - public readonly contractAddress: string; - - constructor(contractAddress: string, n: number | BN | MPond) { - super('MPond', n, false); - this.contractAddress = contractAddress; - } -} diff --git a/packages/commonwealth/shared/chain/labelers/aave.ts b/packages/commonwealth/shared/chain/labelers/aave.ts deleted file mode 100644 index 2b16f97945d..00000000000 --- a/packages/commonwealth/shared/chain/labelers/aave.ts +++ /dev/null @@ -1,123 +0,0 @@ -import moment from 'moment'; - -import { SupportedNetwork } from '@hicommonwealth/shared'; -import type { IEventData } from '../types/aave'; -import { EventKind } from '../types/aave'; -import { IEventLabel, LabelerFilter } from './util'; - -function fmtAddr(addr: string) { - if (!addr) return ''; - if (addr.length < 16) return addr; - return `${addr.slice(0, 7)}…${addr.slice(addr.length - 3)}`; -} - -/** - * This a labeler function, which takes event data and describes it in "plain english", - * such that we can display a notification regarding its contents. - */ -export const Label: LabelerFilter = ( - chainId: string, - data: IEventData, - chain?: string, -): IEventLabel => { - switch (data.kind) { - case EventKind.ProposalCanceled: { - return { - heading: 'Proposal Canceled', - label: `Proposal ${data.id} was cancelled.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/onchainproposal/${data.id}` - : null, - }; - } - case EventKind.ProposalCreated: { - return { - heading: 'Proposal Created', - label: `Proposal ${data.id} was created.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/onchainproposal/${data.id}` - : null, - }; - } - case EventKind.ProposalExecuted: { - return { - heading: 'Proposal Executed', - label: `Proposal ${data.id} was executed.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/onchainproposal/${data.id}` - : null, - }; - } - case EventKind.ProposalQueued: { - return { - heading: 'Proposal Queued', - label: `Proposal ${data.id} queued up. Execution time: ${moment - .unix(data.executionTime) - .format()}.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/onchainproposal/${data.id}` - : null, - }; - } - case EventKind.VoteEmitted: { - return { - heading: 'Vote Emitted', - label: `Voter (${data.voter}) voted with weight ${data.votingPower} ${ - data.support ? 'against' : 'for' - } proposal ${data.id}.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/onchainproposal/${data.id}` - : null, - icon: 'vote', - }; - } - case EventKind.DelegateChanged: { - return { - heading: 'Delegate Changed', - label: `User ${fmtAddr(data.delegator)} delegated to ${fmtAddr( - data.delegatee, - )}.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId ? `/${chainId}/account/${data.delegator}` : null, - icon: 'delegate', - }; - } - case EventKind.DelegatedPowerChanged: { - return { - heading: 'Delegated Power Changed', - label: `User ${fmtAddr(data.who)} updated their delegation power.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId ? `/${chainId}/account/${data.who}` : null, - icon: 'delegate', - }; - } - case EventKind.Transfer: { - return { - heading: 'Token Transfer', - label: `Transfer of ${data.amount} tokens from ${data.from} to ${data.to}.`, - icon: 'transfer', - }; - } - case EventKind.Approval: { - return { - heading: 'Approval', - label: `${data.spender} approved ${data.amount} to ${data.owner}.`, - }; - } - default: { - // ensure exhaustive matching -- gives ts error if missing cases - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const _exhaustiveMatch: never = data; - throw new Error( - `[${SupportedNetwork.Aave}${ - chain ? `::${chain}` : '' - }]: Unknown event type!`, - ); - } - } -}; diff --git a/packages/commonwealth/shared/chain/labelers/compound.ts b/packages/commonwealth/shared/chain/labelers/compound.ts deleted file mode 100644 index c80b41d4d5f..00000000000 --- a/packages/commonwealth/shared/chain/labelers/compound.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { SupportedNetwork } from '@hicommonwealth/shared'; -import type { IEventData } from '../types/compound'; -import { EventKind } from '../types/compound'; -import { IEventLabel, LabelerFilter } from './util'; - -/** - * This a labeler function, which takes event data and describes it in "plain english", - * such that we can display a notification regarding its contents. - */ -export const Label: LabelerFilter = ( - chainId: string, - data: IEventData, - chain?: string, -): IEventLabel => { - switch (data.kind) { - case EventKind.ProposalCanceled: { - return { - heading: 'Proposal Canceled', - label: `Proposal ${data.id} was cancelled.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/compoundproposal/${data.id}` - : null, - }; - } - case EventKind.ProposalCreated: { - return { - heading: 'Proposal Created', - label: `Proposal ${data.id} was created.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/compoundproposal/${data.id}` - : null, - }; - } - case EventKind.ProposalExecuted: { - return { - heading: 'Proposal Executed', - label: `Proposal ${data.id} was executed.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/compoundproposal/${data.id}` - : null, - }; - } - case EventKind.ProposalQueued: { - return { - heading: 'Proposal Queued', - label: `Proposal ${data.id} queued up. ETA: Block ${data.eta}.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/compoundproposal/${data.id}` - : null, - }; - } - case EventKind.VoteCast: { - return { - heading: 'Vote Cast', - label: `Voter (${data.voter}) cast ${data.votes} votes ${ - data.support ? 'not' : null - } in support of proposal ${data.id}.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId - ? `/${chainId}/proposal/compoundproposal/${data.id}` - : null, - icon: 'vote', - }; - } - default: { - // ensure exhaustive matching -- gives ts error if missing cases - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const _exhaustiveMatch: never = data; - throw new Error( - `[${SupportedNetwork.Compound}${ - chain ? `::${chain}` : '' - }]: Unknown event type`, - ); - } - } -}; diff --git a/packages/commonwealth/shared/chain/labelers/cosmos.ts b/packages/commonwealth/shared/chain/labelers/cosmos.ts deleted file mode 100644 index ad4b52789ab..00000000000 --- a/packages/commonwealth/shared/chain/labelers/cosmos.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { SupportedNetwork } from '@hicommonwealth/shared'; -import type { IEventData } from '../types/cosmos'; -import { EventKind } from '../types/cosmos'; -import { IEventLabel, LabelerFilter } from './util'; - -function fmtAddr(addr: string) { - if (!addr) return ''; - if (addr.length < 16) return addr; - return `${addr.slice(0, 9)}…${addr.slice(addr.length - 3)}`; -} - -/** - * This a labeler function, which takes event data and describes it in "plain english", - * such that we can display a notification regarding its contents. - */ -export const Label: LabelerFilter = ( - chainId: string, - data: IEventData, -): IEventLabel => { - switch (data.kind) { - case EventKind.SubmitProposal: - return { - heading: 'Proposal Submitted', - label: `Proposal ${data.id} was submitted!`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId ? `/${chainId}/proposal/${data.id}` : null, - }; - case EventKind.Deposit: - return { - heading: 'Deposit', - label: `${fmtAddr(data.depositor)} made a deposit on proposal ${ - data.id - }.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId ? `/${chainId}/proposal/${data.id}` : null, - }; - case EventKind.Vote: - return { - heading: 'Vote', - label: `${fmtAddr(data.voter)} voted on proposal ${data.id}.`, - // @ts-expect-error StrictNullChecks - linkUrl: chainId ? `/${chainId}/proposal/${data.id}` : null, - icon: 'vote', - }; - default: { - // ensure exhaustive matching -- gives ts error if missing cases - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const _exhaustiveMatch: never = data; - throw new Error( - `[${SupportedNetwork.Cosmos}::${chainId}]: Unknown event type`, - ); - } - } -}; diff --git a/packages/commonwealth/shared/chain/labelers/util.ts b/packages/commonwealth/shared/chain/labelers/util.ts deleted file mode 100644 index 94dd9102253..00000000000 --- a/packages/commonwealth/shared/chain/labelers/util.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { SupportedNetwork } from '@hicommonwealth/shared'; -import type { CWEvent, IChainEventData } from '../types/types'; -import { Label as AaveLabel } from './aave'; -import { Label as CompoundLabel } from './compound'; -import { Label as CosmosLabel } from './cosmos'; - -// a set of labels used to display notifications -export interface IEventLabel { - heading: string; - label: string; - linkUrl?: string; - icon?: string; -} - -// a function that prepares chain data for user display -export type LabelerFilter = ( - chainId: string, - data: IChainEventData, - ...formatters -) => IEventLabel; - -export function Label( - chain: string, - event: Omit, -): IEventLabel { - switch (event.network) { - case SupportedNetwork.Aave: - return AaveLabel(chain, event.data); - case SupportedNetwork.Compound: - return CompoundLabel(chain, event.data); - case SupportedNetwork.Cosmos: - return CosmosLabel(chain, event.data); - default: - throw new Error(`Invalid network: ${event.network}`); - } -} diff --git a/packages/commonwealth/shared/chain/types/aave.ts b/packages/commonwealth/shared/chain/types/aave.ts deleted file mode 100644 index 1f17ec61929..00000000000 --- a/packages/commonwealth/shared/chain/types/aave.ts +++ /dev/null @@ -1,123 +0,0 @@ -// eslint-disable-next-line no-shadow -export enum EventKind { - // governance - ProposalCanceled = 'proposal-canceled', - ProposalCreated = 'proposal-created', - ProposalExecuted = 'proposal-executed', - ProposalQueued = 'proposal-queued', - VoteEmitted = 'vote-emitted', - - // tokens - DelegateChanged = 'delegate-changed', - DelegatedPowerChanged = 'delegated-power-changed', - Transfer = 'transfer', - Approval = 'approval', -} - -interface IEvent { - kind: EventKind; -} - -type Address = string; -type Balance = string; - -// eslint-disable-next-line no-shadow -export enum ProposalState { - PENDING = 0, - CANCELED = 1, - ACTIVE = 2, - FAILED = 3, - SUCCEEDED = 4, - QUEUED = 5, - EXPIRED = 6, - EXECUTED = 7, -} - -// eslint-disable-next-line no-shadow -export enum DelegationType { - VOTING_POWER = 0, - PROPOSITION_POWER = 1, -} - -// GovernorAlpha Event Interfaces -export interface IProposalCanceled extends IEvent { - kind: EventKind.ProposalCanceled; - id: number; -} - -export interface IProposalCreated extends IEvent { - kind: EventKind.ProposalCreated; - id: number; - proposer: Address; - executor: Address; - targets: Address[]; - values: Balance[]; - signatures: Address[]; - calldatas: string[]; - startBlock: number; - endBlock: number; - strategy: string; - ipfsHash: string; -} - -export interface IProposalExecuted extends IEvent { - kind: EventKind.ProposalExecuted; - id: number; -} - -export interface IProposalQueued extends IEvent { - kind: EventKind.ProposalQueued; - id: number; - executionTime: number; // timestamp -} - -export interface IVoteEmitted extends IEvent { - kind: EventKind.VoteEmitted; - id: number; - voter: Address; - support: boolean; - votingPower: Balance; -} - -export interface IDelegateChanged extends IEvent { - kind: EventKind.DelegateChanged; - tokenAddress: Address; - delegator: Address; - delegatee: Address; - type: DelegationType; -} - -export interface IDelegatedPowerChanged { - kind: EventKind.DelegatedPowerChanged; - tokenAddress: Address; - who: Address; - amount: Balance; - type: DelegationType; -} - -export interface ITransfer { - kind: EventKind.Transfer; - tokenAddress: Address; - from: Address; - to: Address; - amount: Balance; -} - -export interface IApproval { - kind: EventKind.Approval; - tokenAddress: Address; - owner: Address; - spender: Address; - amount: Balance; -} - -export type IEventData = - | IProposalCanceled - | IProposalCreated - | IProposalExecuted - | IProposalQueued - | IVoteEmitted - | IDelegateChanged - | IDelegatedPowerChanged - | ITransfer - | IApproval; diff --git a/packages/commonwealth/shared/chain/types/compound.ts b/packages/commonwealth/shared/chain/types/compound.ts deleted file mode 100644 index c66e3fb8165..00000000000 --- a/packages/commonwealth/shared/chain/types/compound.ts +++ /dev/null @@ -1,70 +0,0 @@ -export enum ProposalState { - Pending = 0, - Active = 1, - Canceled = 2, - Defeated = 3, - Succeeded = 4, - Queued = 5, - Expired = 6, - Executed = 7, -} - -export enum EventKind { - ProposalExecuted = 'proposal-executed', - ProposalCreated = 'proposal-created', - ProposalCanceled = 'proposal-canceled', - ProposalQueued = 'proposal-queued', - VoteCast = 'vote-cast', -} - -interface IEvent { - kind: EventKind; -} - -type Address = string; -type Balance = string; // queried as BigNumber - -export interface IProposalCanceled extends IEvent { - kind: EventKind.ProposalCanceled; - id: string; -} - -export interface IProposalCreated extends IEvent { - kind: EventKind.ProposalCreated; - id: string; - proposer: Address; - targets: Address[]; - values: Balance[]; - signatures: string[]; - calldatas: string[]; - startBlock: number; - endBlock: number; - description: string; -} - -export interface IProposalExecuted extends IEvent { - kind: EventKind.ProposalExecuted; - id: string; -} - -export interface IProposalQueued extends IEvent { - kind: EventKind.ProposalQueued; - id: string; - eta: number; -} - -export interface IVoteCast extends IEvent { - kind: EventKind.VoteCast; - voter: Address; - id: string; - support: number; // handle alpha and bravo support types - votes: Balance; - reason?: string; -} - -export type IEventData = - | IProposalCanceled - | IProposalCreated - | IProposalExecuted - | IProposalQueued - | IVoteCast; diff --git a/packages/commonwealth/shared/chain/types/cosmos.ts b/packages/commonwealth/shared/chain/types/cosmos.ts index d7f763be87f..cf1caf3c8c5 100644 --- a/packages/commonwealth/shared/chain/types/cosmos.ts +++ b/packages/commonwealth/shared/chain/types/cosmos.ts @@ -1,6 +1,4 @@ -import type { Coin } from '@cosmjs/stargate'; import { GovV1Client } from '@hicommonwealth/chains'; -import type { TallyResult } from 'cosmjs-types/cosmos/gov/v1beta1/gov'; // currently just used for gov v1, but this can be expanded export type LCD = { @@ -10,53 +8,3 @@ export type LCD = { }; }; }; - -// eslint-disable-next-line no-shadow -export enum EventKind { - SubmitProposal = 'msg-submit-proposal', - Deposit = 'msg-deposit', - Vote = 'msg-vote', -} - -interface IEvent { - kind: EventKind; -} - -type UnixDate = number; -type Coins = { [denom: string]: string }; -export function coinToCoins(cs: Coin[]): Coins { - const res: Coins = {}; - for (const c of cs) { - res[c.denom] = c.amount; - } - return res; -} - -export interface ISubmitProposal extends IEvent { - kind: EventKind.SubmitProposal; - id: string; - proposer?: string; - content?: { typeUrl: string; value: string }; // hex-encoded protobuf Any value - submitTime?: UnixDate; - depositEndTime?: UnixDate; - votingStartTime?: UnixDate; - votingEndTime?: UnixDate; - totalDeposit?: Coins; - finalTallyResult?: TallyResult; -} - -export interface IDeposit extends IEvent { - kind: EventKind.Deposit; - id: string; - depositor: string; - amount: Coins; -} - -export interface IVote extends IEvent { - kind: EventKind.Vote; - id: string; - voter: string; - option: number; -} - -export type IEventData = ISubmitProposal | IDeposit | IVote; diff --git a/packages/commonwealth/shared/chain/types/types.ts b/packages/commonwealth/shared/chain/types/types.ts deleted file mode 100644 index cb9bda04956..00000000000 --- a/packages/commonwealth/shared/chain/types/types.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { SupportedNetwork } from '@hicommonwealth/shared'; -import { IEventData as AaveEventData } from '../../../shared/chain/types/aave'; -import { IEventData as CompoundEventData } from '../../../shared/chain/types/compound'; -import { IEventData as CosmosEventData } from '../../../shared/chain/types/cosmos'; - -export type IChainEventData = - | CompoundEventData - | AaveEventData - | CosmosEventData; - -export interface CWEvent { - blockNumber: number; - includeAddresses?: string[]; - excludeAddresses?: string[]; - - data: IEventData; - network: SupportedNetwork; - chain?: string; - received?: number; -} diff --git a/packages/commonwealth/test/integration/api/index.spec.ts b/packages/commonwealth/test/integration/api/index.spec.ts index 2ad6e329568..759cf70c800 100644 --- a/packages/commonwealth/test/integration/api/index.spec.ts +++ b/packages/commonwealth/test/integration/api/index.spec.ts @@ -10,7 +10,7 @@ import chai from 'chai'; import chaiHttp from 'chai-http'; import { afterAll, beforeAll, describe, test } from 'vitest'; import { TestServer, testServer } from '../../../server-test'; -import { TEST_BLOCK_INFO_STRING } from '../../../shared/adapters/chain/ethereum/keys'; +import { TEST_BLOCK_INFO_STRING } from '../../util/keys'; chai.use(chaiHttp); const { expect } = chai; diff --git a/packages/commonwealth/test/integration/api/verifyAddress.spec.ts b/packages/commonwealth/test/integration/api/verifyAddress.spec.ts index 29676ad153d..7d28dc2895b 100644 --- a/packages/commonwealth/test/integration/api/verifyAddress.spec.ts +++ b/packages/commonwealth/test/integration/api/verifyAddress.spec.ts @@ -6,7 +6,7 @@ import chaiHttp from 'chai-http'; import { Wallet } from 'ethers'; import { afterAll, beforeAll, describe, test } from 'vitest'; import { TestServer, testServer } from '../../../server-test'; -import { TEST_BLOCK_INFO_STRING } from '../../../shared/adapters/chain/ethereum/keys'; +import { TEST_BLOCK_INFO_STRING } from '../../util/keys'; chai.use(chaiHttp); const { expect } = chai; diff --git a/packages/commonwealth/shared/adapters/chain/ethereum/keys.ts b/packages/commonwealth/test/util/keys.ts similarity index 79% rename from packages/commonwealth/shared/adapters/chain/ethereum/keys.ts rename to packages/commonwealth/test/util/keys.ts index 945e0eb04fa..5712b1cfefe 100644 --- a/packages/commonwealth/shared/adapters/chain/ethereum/keys.ts +++ b/packages/commonwealth/test/util/keys.ts @@ -1,4 +1,2 @@ export const TEST_BLOCK_INFO_STRING = '{"number":1,"hash":"0x0f927bde6fb00940895178da0d32948714ea6e76f6374f03ffbbd7e0787e15bf","timestamp":1665083987891}'; - -export const SiweMessageVersion = '1'; diff --git a/packages/commonwealth/test/util/modelUtils.ts b/packages/commonwealth/test/util/modelUtils.ts index cd07f5bf444..26a8a172060 100644 --- a/packages/commonwealth/test/util/modelUtils.ts +++ b/packages/commonwealth/test/util/modelUtils.ts @@ -30,7 +30,7 @@ import { import chai from 'chai'; import type { Application } from 'express'; import { z } from 'zod'; -import { TEST_BLOCK_INFO_STRING } from '../../shared/adapters/chain/ethereum/keys'; +import { TEST_BLOCK_INFO_STRING } from './keys'; function createCanvasSignResult({ session, sign, action }): CanvasSignResult { const sessionMessage = { From 69f78d12199138aaa143f19ea6265d34c1a552cb Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 23:01:18 +0300 Subject: [PATCH 085/425] more shared clean-up + remove unneeded global deps --- libs/evm-testing/src/sdk/chainTesting.ts | 11 ---- libs/shared/src/types/proposal.ts | 26 --------- libs/shared/src/types/protocol.ts | 26 --------- package.json | 3 -- .../commonwealth/shared/analytics/types.ts | 4 -- pnpm-lock.yaml | 53 +++++-------------- 6 files changed, 12 insertions(+), 111 deletions(-) diff --git a/libs/evm-testing/src/sdk/chainTesting.ts b/libs/evm-testing/src/sdk/chainTesting.ts index d87f8833405..6fecc391b4e 100644 --- a/libs/evm-testing/src/sdk/chainTesting.ts +++ b/libs/evm-testing/src/sdk/chainTesting.ts @@ -20,17 +20,6 @@ const testErc1155Bytecode = '608060405234801562000010575f80fd5b506040518060400160405280600381526020017f757269000000000000000000000000000000000000000000000000000000000081525062000058816200005f60201b60201c565b50620003bc565b8060029081620000709190620002d8565b5050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620000f057607f821691505b602082108103620001065762000105620000ab565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200016a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200012d565b6200017686836200012d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620001c0620001ba620001b4846200018e565b62000197565b6200018e565b9050919050565b5f819050919050565b620001db83620001a0565b620001f3620001ea82620001c7565b84845462000139565b825550505050565b5f90565b62000209620001fb565b62000216818484620001d0565b505050565b5b818110156200023d57620002315f82620001ff565b6001810190506200021c565b5050565b601f8211156200028c5762000256816200010c565b62000261846200011e565b8101602085101562000271578190505b6200028962000280856200011e565b8301826200021b565b50505b505050565b5f82821c905092915050565b5f620002ae5f198460080262000291565b1980831691505092915050565b5f620002c883836200029d565b9150826002028217905092915050565b620002e38262000074565b67ffffffffffffffff811115620002ff57620002fe6200007e565b5b6200030b8254620000d8565b6200031882828562000241565b5f60209050601f8311600181146200034e575f841562000339578287015190505b620003458582620002bb565b865550620003b4565b601f1984166200035e866200010c565b5f5b82811015620003875784890151825560018201915060208501945060208101905062000360565b86831015620003a75784890151620003a3601f8916826200029d565b8355505b6001600288020188555050505b505050505050565b611fb980620003ca5f395ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c80632eb2c2d6116100645780632eb2c2d6146101405780634e1273f41461015c578063a22cb4651461018c578063e985e9c5146101a8578063f242432a146101d857610090565b8062fdd58e1461009457806301ffc9a7146100c45780630e89341c146100f4578063156e29f614610124575b5f80fd5b6100ae60048036038101906100a991906113d6565b6101f4565b6040516100bb9190611423565b60405180910390f35b6100de60048036038101906100d99190611491565b610249565b6040516100eb91906114d6565b60405180910390f35b61010e600480360381019061010991906114ef565b61032a565b60405161011b91906115a4565b60405180910390f35b61013e600480360381019061013991906115c4565b6103bc565b005b61015a60048036038101906101559190611804565b6103db565b005b6101766004803603810190610171919061198f565b610482565b6040516101839190611abc565b60405180910390f35b6101a660048036038101906101a19190611b06565b61058f565b005b6101c260048036038101906101bd9190611b44565b6105a5565b6040516101cf91906114d6565b60405180910390f35b6101f260048036038101906101ed9190611b82565b610633565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061031357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103235750610322826106da565b5b9050919050565b60606002805461033990611c42565b80601f016020809104026020016040519081016040528092919081815260200182805461036590611c42565b80156103b05780601f10610387576101008083540402835291602001916103b0565b820191905f5260205f20905b81548152906001019060200180831161039357829003601f168201915b50505050509050919050565b6103d683838360405180602001604052805f815250610743565b505050565b5f6103e46107d8565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610429575061042786826105a5565b155b1561046d5780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610464929190611c81565b60405180910390fd5b61047a86868686866107df565b505050505050565b606081518351146104ce57815183516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016104c5929190611ca8565b60405180910390fd5b5f835167ffffffffffffffff8111156104ea576104e9611618565b5b6040519080825280602002602001820160405280156105185781602001602082028036833780820191505090505b5090505f5b84518110156105845761055461053c82876108d390919063ffffffff16565b61054f83876108e690919063ffffffff16565b6101f4565b82828151811061056757610566611ccf565b5b6020026020010181815250508061057d90611d29565b905061051d565b508091505092915050565b6105a161059a6107d8565b83836108f9565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f61063c6107d8565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610681575061067f86826105a5565b155b156106c55780866040517fe237d9220000000000000000000000000000000000000000000000000000000081526004016106bc929190611c81565b60405180910390fd5b6106d28686868686610a62565b505050505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036107b3575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016107aa9190611d70565b60405180910390fd5b5f806107bf8585610b68565b915091506107d05f87848487610b98565b505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361084f575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016108469190611d70565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036108bf575f6040517f01a835140000000000000000000000000000000000000000000000000000000081526004016108b69190611d70565b60405180910390fd5b6108cc8585858585610b98565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610969575f6040517fced3e1000000000000000000000000000000000000000000000000000000000081526004016109609190611d70565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a5591906114d6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ad2575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610ac99190611d70565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610b42575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401610b399190611d70565b60405180910390fd5b5f80610b4e8585610b68565b91509150610b5f8787848487610b98565b50505050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b610ba485858585610c44565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610c3d575f610be06107d8565b90506001845103610c2c575f610bff5f866108e690919063ffffffff16565b90505f610c155f866108e690919063ffffffff16565b9050610c25838989858589610fda565b5050610c3b565b610c3a818787878787611189565b5b505b5050505050565b8051825114610c8e57815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610c85929190611ca8565b60405180910390fd5b5f610c976107d8565b90505f5b8351811015610e99575f610cb882866108e690919063ffffffff16565b90505f610cce83866108e690919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610df1575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610d9d57888183856040517f03dee4c5000000000000000000000000000000000000000000000000000000008152600401610d949493929190611d89565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610e8657805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e7e9190611dcc565b925050819055505b505080610e9290611d29565b9050610c9b565b506001835103610f54575f610eb75f856108e690919063ffffffff16565b90505f610ecd5f856108e690919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051610f45929190611ca8565b60405180910390a45050610fd3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610fca929190611dff565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115611181578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161103a959493929190611e86565b6020604051808303815f875af192505050801561107557506040513d601f19601f820116820180604052508101906110729190611ef2565b60015b6110f6573d805f81146110a3576040519150601f19603f3d011682016040523d82523d5f602084013e6110a8565b606091505b505f8151036110ee57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016110e59190611d70565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461117f57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016111769190611d70565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115611330578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016111e9959493929190611f1d565b6020604051808303815f875af192505050801561122457506040513d601f19601f820116820180604052508101906112219190611ef2565b60015b6112a5573d805f8114611252576040519150601f19603f3d011682016040523d82523d5f602084013e611257565b606091505b505f81510361129d57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016112949190611d70565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461132e57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016113259190611d70565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61137282611349565b9050919050565b61138281611368565b811461138c575f80fd5b50565b5f8135905061139d81611379565b92915050565b5f819050919050565b6113b5816113a3565b81146113bf575f80fd5b50565b5f813590506113d0816113ac565b92915050565b5f80604083850312156113ec576113eb611341565b5b5f6113f98582860161138f565b925050602061140a858286016113c2565b9150509250929050565b61141d816113a3565b82525050565b5f6020820190506114365f830184611414565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6114708161143c565b811461147a575f80fd5b50565b5f8135905061148b81611467565b92915050565b5f602082840312156114a6576114a5611341565b5b5f6114b38482850161147d565b91505092915050565b5f8115159050919050565b6114d0816114bc565b82525050565b5f6020820190506114e95f8301846114c7565b92915050565b5f6020828403121561150457611503611341565b5b5f611511848285016113c2565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611551578082015181840152602081019050611536565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6115768261151a565b6115808185611524565b9350611590818560208601611534565b6115998161155c565b840191505092915050565b5f6020820190508181035f8301526115bc818461156c565b905092915050565b5f805f606084860312156115db576115da611341565b5b5f6115e88682870161138f565b93505060206115f9868287016113c2565b925050604061160a868287016113c2565b9150509250925092565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61164e8261155c565b810181811067ffffffffffffffff8211171561166d5761166c611618565b5b80604052505050565b5f61167f611338565b905061168b8282611645565b919050565b5f67ffffffffffffffff8211156116aa576116a9611618565b5b602082029050602081019050919050565b5f80fd5b5f6116d16116cc84611690565b611676565b905080838252602082019050602084028301858111156116f4576116f36116bb565b5b835b8181101561171d578061170988826113c2565b8452602084019350506020810190506116f6565b5050509392505050565b5f82601f83011261173b5761173a611614565b5b813561174b8482602086016116bf565b91505092915050565b5f80fd5b5f67ffffffffffffffff82111561177257611771611618565b5b61177b8261155c565b9050602081019050919050565b828183375f83830152505050565b5f6117a86117a384611758565b611676565b9050828152602081018484840111156117c4576117c3611754565b5b6117cf848285611788565b509392505050565b5f82601f8301126117eb576117ea611614565b5b81356117fb848260208601611796565b91505092915050565b5f805f805f60a0868803121561181d5761181c611341565b5b5f61182a8882890161138f565b955050602061183b8882890161138f565b945050604086013567ffffffffffffffff81111561185c5761185b611345565b5b61186888828901611727565b935050606086013567ffffffffffffffff81111561188957611888611345565b5b61189588828901611727565b925050608086013567ffffffffffffffff8111156118b6576118b5611345565b5b6118c2888289016117d7565b9150509295509295909350565b5f67ffffffffffffffff8211156118e9576118e8611618565b5b602082029050602081019050919050565b5f61190c611907846118cf565b611676565b9050808382526020820190506020840283018581111561192f5761192e6116bb565b5b835b818110156119585780611944888261138f565b845260208401935050602081019050611931565b5050509392505050565b5f82601f83011261197657611975611614565b5b81356119868482602086016118fa565b91505092915050565b5f80604083850312156119a5576119a4611341565b5b5f83013567ffffffffffffffff8111156119c2576119c1611345565b5b6119ce85828601611962565b925050602083013567ffffffffffffffff8111156119ef576119ee611345565b5b6119fb85828601611727565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611a37816113a3565b82525050565b5f611a488383611a2e565b60208301905092915050565b5f602082019050919050565b5f611a6a82611a05565b611a748185611a0f565b9350611a7f83611a1f565b805f5b83811015611aaf578151611a968882611a3d565b9750611aa183611a54565b925050600181019050611a82565b5085935050505092915050565b5f6020820190508181035f830152611ad48184611a60565b905092915050565b611ae5816114bc565b8114611aef575f80fd5b50565b5f81359050611b0081611adc565b92915050565b5f8060408385031215611b1c57611b1b611341565b5b5f611b298582860161138f565b9250506020611b3a85828601611af2565b9150509250929050565b5f8060408385031215611b5a57611b59611341565b5b5f611b678582860161138f565b9250506020611b788582860161138f565b9150509250929050565b5f805f805f60a08688031215611b9b57611b9a611341565b5b5f611ba88882890161138f565b9550506020611bb98882890161138f565b9450506040611bca888289016113c2565b9350506060611bdb888289016113c2565b925050608086013567ffffffffffffffff811115611bfc57611bfb611345565b5b611c08888289016117d7565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c5957607f821691505b602082108103611c6c57611c6b611c15565b5b50919050565b611c7b81611368565b82525050565b5f604082019050611c945f830185611c72565b611ca16020830184611c72565b9392505050565b5f604082019050611cbb5f830185611414565b611cc86020830184611414565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d33826113a3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d6557611d64611cfc565b5b600182019050919050565b5f602082019050611d835f830184611c72565b92915050565b5f608082019050611d9c5f830187611c72565b611da96020830186611414565b611db66040830185611414565b611dc36060830184611414565b95945050505050565b5f611dd6826113a3565b9150611de1836113a3565b9250828201905080821115611df957611df8611cfc565b5b92915050565b5f6040820190508181035f830152611e178185611a60565b90508181036020830152611e2b8184611a60565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f611e5882611e34565b611e628185611e3e565b9350611e72818560208601611534565b611e7b8161155c565b840191505092915050565b5f60a082019050611e995f830188611c72565b611ea66020830187611c72565b611eb36040830186611414565b611ec06060830185611414565b8181036080830152611ed28184611e4e565b90509695505050505050565b5f81519050611eec81611467565b92915050565b5f60208284031215611f0757611f06611341565b5b5f611f1484828501611ede565b91505092915050565b5f60a082019050611f305f830188611c72565b611f3d6020830187611c72565b8181036040830152611f4f8186611a60565b90508181036060830152611f638185611a60565b90508181036080830152611f778184611e4e565b9050969550505050505056fea264697066735822122099aa1b36b2fc8a8527592b546d55920ee3a56c886051eafdede445b7a1480d1164736f6c63430008140033'; export class ChainTesting extends SdkBase { - public contractAddrs = { - compound: { - governance: '0xc0Da02939E1441F497fd74F78cE7Decb17B66529'.toLowerCase(), - token: '0xc00e94Cb662C3520282E6f5717214004A7f26888'.toLowerCase(), - }, - aave: { - governance: '0xEC568fffba86c094cf06b22134B23074DFE2252c'.toLowerCase(), - token: '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9'.toLowerCase(), - }, - }; - // Object where keys are snapshot ids and the boolean variable indicates // whether a snapshot id was already used to revert (cannot use id more than // once). diff --git a/libs/shared/src/types/proposal.ts b/libs/shared/src/types/proposal.ts index bfa5e0756a3..80160344ac7 100644 --- a/libs/shared/src/types/proposal.ts +++ b/libs/shared/src/types/proposal.ts @@ -1,37 +1,11 @@ export enum ProposalType { Thread = 'discussion', CosmosProposal = 'cosmosproposal', - CompoundProposal = 'compoundproposal', - AaveProposal = 'onchainproposal', } -export type SnapshotProposalAttributes = { - id: string; - title?: string; - body?: string; - choices?: string[]; - space: string; - event: string; - start?: string; - expire: string; - is_upstream_deleted?: boolean; -}; - export const enum SnapshotEventType { Created = 'proposal/created', Deleted = 'proposal/deleted', Ended = 'proposal/end', Started = 'proposal/start', } - -export interface ISnapshotNotificationData { - id?: string; - title?: string; - body?: string; - choices?: string[]; - space?: string; - event?: string; - start?: string; - expire?: string; - eventType: SnapshotEventType; -} diff --git a/libs/shared/src/types/protocol.ts b/libs/shared/src/types/protocol.ts index 2e98babff14..4f46fd33585 100644 --- a/libs/shared/src/types/protocol.ts +++ b/libs/shared/src/types/protocol.ts @@ -18,16 +18,6 @@ export enum BalanceType { Substrate = 'substrate', } -export enum SupportedNetwork { - Substrate = 'substrate', - Aave = 'aave', - Compound = 'compound', - ERC20 = 'erc20', - ERC721 = 'erc721', - ERC1155 = 'erc1155', - Cosmos = 'cosmos', -} - export type ContractSource = { source_type: | BalanceSourceType.ERC20 @@ -104,16 +94,6 @@ export enum ChainBase { Solana = 'solana', } -export enum ContractType { - AAVE = 'aave', - COMPOUND = 'compound', - ERC20 = 'erc20', - ERC721 = 'erc721', - MARLINTESTNET = 'marlin-testnet', - SPL = 'spl', - COMMONPROTOCOL = 'common-protocol', -} - export enum ChainType { Chain = 'chain', DAO = 'dao', @@ -121,12 +101,6 @@ export enum ChainType { Offchain = 'offchain', } -// TODO: this type should be deprecated as community tags/categories are dynamic -export enum CommunityCategoryType { - DeFi = 'DeFi', - DAO = 'DAO', -} - // This enum represents known values for the "network" field on Community, which can be used for // switched functionality against specific groups of communities (so we could e.g. group together all // communities on a specific testnet, or all ERC20s). In practice this field is deprecated, and should be diff --git a/package.json b/package.json index c2638114a2a..912e8c9270b 100644 --- a/package.json +++ b/package.json @@ -46,14 +46,11 @@ "extensionless": "^1.9.6" }, "devDependencies": { - "@aave/aave-token": "^1.0.4", "@cosmjs/encoding": "0.32.3", "@hicommonwealth/eslint-plugin": "workspace:*", "@istanbuljs/nyc-config-typescript": "^0.1.3", "@knocklabs/node": "^0.6.10", "@openfeature/web-sdk": "^1.0.2", - "@openzeppelin/contracts": "^2.4.0", - "@openzeppelin/contracts-governance": "npm:@openzeppelin/contracts@^4.3.2", "@osmonauts/lcd": "^0.10.0", "@playwright/test": "^1.43.1", "@polkadot/util": "12.6.2", diff --git a/packages/commonwealth/shared/analytics/types.ts b/packages/commonwealth/shared/analytics/types.ts index ab4c6f611a1..f2ac69fb7da 100644 --- a/packages/commonwealth/shared/analytics/types.ts +++ b/packages/commonwealth/shared/analytics/types.ts @@ -78,11 +78,7 @@ export const enum MixpanelSnapshotEvents { } export const enum MixpanelGovernanceEvents { - AAVE_PROPOSAL_CREATED = 'Aave Proposal Created', - COMPOUND_PROPOSAL_CREATED = 'Compound Proposal Created', COSMOS_PROPOSAL_CREATED = 'Cosmos Proposal Created', - AAVE_VOTE_OCCURRED = 'Aave Vote Occurred', - COMPOUND_VOTE_OCCURRED = 'Compund Vote Occurred', COSMOS_VOTE_OCCURRED = 'Cosmos Vote Occurred', } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22cf583d8a7..ca0cf6aa195 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,9 +21,6 @@ importers: specifier: ^0.15.12 version: 0.15.18 devDependencies: - '@aave/aave-token': - specifier: ^1.0.4 - version: 1.0.4 '@cosmjs/encoding': specifier: 0.32.3 version: 0.32.3 @@ -39,12 +36,6 @@ importers: '@openfeature/web-sdk': specifier: ^1.0.2 version: 1.0.3(@openfeature/core@1.1.0) - '@openzeppelin/contracts': - specifier: ^2.4.0 - version: 2.5.1 - '@openzeppelin/contracts-governance': - specifier: npm:@openzeppelin/contracts@^4.3.2 - version: '@openzeppelin/contracts@4.9.6' '@osmonauts/lcd': specifier: ^0.10.0 version: 0.10.0 @@ -1456,9 +1447,6 @@ importers: packages: - '@aave/aave-token@1.0.4': - resolution: {integrity: sha512-4uhKVfDuzWZnI+EBe85+oUk3X4LKLaP+nuR6ErD1VKkfz22drwc/UOYWoXJTxWCo1JaNi4quKgXSa4dy5nuCIQ==} - '@acuminous/bitsyntax@0.1.2': resolution: {integrity: sha512-29lUK80d1muEQqiUsSo+3A0yP6CdspgC95EnKBMi22Xlwt79i/En4Vr67+cXhU+cZjbti3TgGGC5wy1stIywVQ==} engines: {node: '>=0.8'} @@ -4167,12 +4155,6 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@openzeppelin/contracts@2.5.1': - resolution: {integrity: sha512-qIy6tLx8rtybEsIOAlrM4J/85s2q2nPkDqj/Rx46VakBZ0LwtFhXIVub96LXHczQX0vaqmAueDqNPXtbSXSaYQ==} - - '@openzeppelin/contracts@4.9.6': - resolution: {integrity: sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==} - '@osmonauts/lcd@0.10.0': resolution: {integrity: sha512-PzmXk9x9MHyLn2fUztpAqWqvDmMiEJaQv/JcAoAOE8VdHrD9Hf/KWnE1RZtamuS2ngQRqvQPD0xotCGXW7eTxA==} @@ -13708,9 +13690,6 @@ packages: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} - tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - tmp@0.2.3: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} @@ -14985,10 +14964,6 @@ packages: snapshots: - '@aave/aave-token@1.0.4': - dependencies: - tmp-promise: 3.0.3 - '@acuminous/bitsyntax@0.1.2': dependencies: buffer-more-ints: 1.0.0 @@ -19713,10 +19688,6 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@openzeppelin/contracts@2.5.1': {} - - '@openzeppelin/contracts@4.9.6': {} - '@osmonauts/lcd@0.10.0': dependencies: '@babel/runtime': 7.24.5 @@ -23116,7 +23087,7 @@ snapshots: '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -23134,7 +23105,7 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.57.0 optionalDependencies: typescript: 5.4.5 @@ -23277,7 +23248,7 @@ snapshots: '@vitest/coverage-istanbul@1.6.0(vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0))': dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.2 istanbul-lib-report: 3.0.1 @@ -24592,7 +24563,7 @@ snapshots: axios@1.6.8: dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -25656,6 +25627,10 @@ snapshots: dependencies: ms: 2.0.0 + debug@4.3.4: + dependencies: + ms: 2.1.2 + debug@4.3.4(supports-color@8.1.1): dependencies: ms: 2.1.2 @@ -26427,7 +26402,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -32433,7 +32408,7 @@ snapshots: colord: 2.9.3 cosmiconfig: 7.1.0 css-functions-list: 3.2.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 fast-glob: 3.3.2 fastest-levenshtein: 1.0.16 file-entry-cache: 6.0.1 @@ -32739,10 +32714,6 @@ snapshots: tinyspy@2.2.1: {} - tmp-promise@3.0.3: - dependencies: - tmp: 0.2.3 - tmp@0.2.3: {} tmpl@1.0.5: {} @@ -33381,7 +33352,7 @@ snapshots: vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)): dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globrex: 0.1.2 tsconfck: 3.1.0(typescript@5.4.5) optionalDependencies: @@ -33410,7 +33381,7 @@ snapshots: '@vitest/utils': 1.6.0 acorn-walk: 8.3.2 chai: 4.4.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 execa: 8.0.1 local-pkg: 0.5.0 magic-string: 0.30.10 From 457f877edea86af2225ce0d9debdb5b1635d103e Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Wed, 9 Oct 2024 23:02:19 +0300 Subject: [PATCH 086/425] compound reference removal --- libs/shared/src/types/protocol.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/shared/src/types/protocol.ts b/libs/shared/src/types/protocol.ts index 4f46fd33585..0d90cae4952 100644 --- a/libs/shared/src/types/protocol.ts +++ b/libs/shared/src/types/protocol.ts @@ -117,7 +117,6 @@ export enum ChainNetwork { Terra = 'terra', NEAR = 'near', Stargaze = 'stargaze', - Compound = 'compound', Evmos = 'evmos', Kava = 'kava', Kyve = 'kyve', From 0e3fbe56cc1345b6b78b275cbb5efa55ea419eee Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 9 Oct 2024 13:53:41 -0700 Subject: [PATCH 087/425] rough implementation o a full toolbar using all our components. --- .../toolbars/BlockSelectorButton.scss | 6 ++ .../toolbars/BlockSelectorButton.tsx | 35 +++++++++ .../toolbars/CWHeadingButton.scss | 3 + .../toolbars/CWHeadingButton.tsx | 57 ++++++++++++++ .../toolbars/NewDesktopToolbar.tsx | 11 +++ .../MarkdownEditor/toolbars}/NewToolbar.scss | 0 .../toolbars/ToolbarForDesktop.tsx | 74 ++++++++++--------- .../component_kit/cw_icons/cw_icon_lookup.ts | 1 + .../MarkdownEditorPage/MarkdownEditorPage.tsx | 2 - .../pages/MarkdownEditorPage/NewToolbar.tsx | 42 ----------- 10 files changed, 152 insertions(+), 79 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.scss create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx rename packages/commonwealth/client/scripts/views/{pages/MarkdownEditorPage => components/MarkdownEditor/toolbars}/NewToolbar.scss (100%) delete mode 100644 packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss new file mode 100644 index 00000000000..66c7729ce83 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss @@ -0,0 +1,6 @@ +.BlockSelectorButton { + button { + outline: none; + border: none; + } +} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx new file mode 100644 index 00000000000..7338bbfea8a --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -0,0 +1,35 @@ +import { currentBlockType$, useCellValue } from 'commonwealth-mdxeditor'; +import React from 'react'; +import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; +import CWPopover, { + usePopover, +} from 'views/components/component_kit/new_designs/CWPopover'; + +import './BlockSelectorButton.scss'; + +export const BlockSelectorButton = () => { + const formattingPopoverProps = usePopover(); + + const currentBlockType = useCellValue(currentBlockType$); + + return ( +
+ + + + + + + +
+ } + {...formattingPopoverProps} + /> +
+ ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.scss new file mode 100644 index 00000000000..a8fd63641e0 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.scss @@ -0,0 +1,3 @@ +.CWHeadingButtonActive { + font-weight: bold; +} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx new file mode 100644 index 00000000000..0b652ab6d4f --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx @@ -0,0 +1,57 @@ +import { $createHeadingNode, $createQuoteNode } from '@lexical/rich-text'; +import { + convertSelectionToNode$, + currentBlockType$, + useCellValue, + usePublisher, +} from 'commonwealth-mdxeditor'; +import { $createParagraphNode } from 'lexical'; +import React, { useCallback } from 'react'; +import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; +import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; + +export type HeadingButtonProps = Readonly<{ + blockType: 'h1' | 'h2' | 'h3' | 'quote'; +}>; + +export const CWHeadingButton = (props: HeadingButtonProps) => { + const { blockType } = props; + + const currentBlockType = useCellValue(currentBlockType$); + const convertSelectionToNode = usePublisher(convertSelectionToNode$); + + const active = currentBlockType === blockType; + + const toggleFormat = useCallback(() => { + if (!active) { + switch (blockType) { + case 'h1': + case 'h2': + case 'h3': + convertSelectionToNode(() => $createHeadingNode(blockType)); + break; + case 'quote': + convertSelectionToNode(() => $createQuoteNode()); + break; + } + } else { + convertSelectionToNode(() => $createParagraphNode()); + } + }, [active, blockType, convertSelectionToNode]); + + return ( + ( + + )} + /> + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx new file mode 100644 index 00000000000..c3c184b06e4 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/BlockSelectorButton'; +import './NewToolbar.scss'; + +export const NewDesktopToolbar = () => { + return ( +
+ +
+ ); +}; diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss similarity index 100% rename from packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.scss rename to packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index 065a0a59906..910215c531a 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -12,6 +12,7 @@ import { import React from 'react'; import { HeadingButton } from 'views/components/MarkdownEditor/toolbars/HeadingButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; +import { NewDesktopToolbar } from 'views/components/MarkdownEditor/toolbars/NewDesktopToolbar'; import { QuoteButton } from 'views/components/MarkdownEditor/toolbars/QuoteButton'; import './ToolbarForDesktop.scss'; @@ -23,46 +24,49 @@ export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => { const { onImage } = props; return ( -
- editor?.editorType === 'codeblock', - contents: () => , - }, - { - fallback: () => ( - <> -
- - - -
+ <> + +
+ editor?.editorType === 'codeblock', + contents: () => , + }, + { + fallback: () => ( + <> +
+ + + +
- - - + + + - + - + - + - + -
- - - - - -
- - ), - }, - ]} - /> -
+
+ + + + + +
+ + ), + }, + ]} + /> +
+ ); }; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts index 6bf24e89a6d..1ea926e5d0e 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts @@ -104,6 +104,7 @@ export const iconLookup = { h1: withPhosphorIcon(TextHOne), h2: withPhosphorIcon(TextHTwo), h3: withPhosphorIcon(TextHThree), + quote: withPhosphorIcon(Quotes), quotes: withPhosphorIcon(Quotes), table: withPhosphorIcon(Table), image: withPhosphorIcon(Image), diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx index cd490825d0b..127b90fee79 100644 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/MarkdownEditorPage.tsx @@ -12,7 +12,6 @@ import { MarkdownSubmitButton } from 'views/components/MarkdownEditor/MarkdownSu import overview from 'views/components/MarkdownEditor/markdown/editor_overview.md?raw'; import supported from 'views/components/MarkdownEditor/markdown/supported.md?raw'; import { useMarkdownEditorMethods } from 'views/components/MarkdownEditor/useMarkdownEditorMethods'; -import { NewToolbar } from 'views/pages/MarkdownEditorPage/NewToolbar'; function useParams() { const [searchParams] = useSearchParams(); @@ -31,7 +30,6 @@ export const MarkdownEditorPage = () => { if (mode === 'desktop') { return (
-
diff --git a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx b/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx deleted file mode 100644 index 202c09a5345..00000000000 --- a/packages/commonwealth/client/scripts/views/pages/MarkdownEditorPage/NewToolbar.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; - -import CWPopover, { - usePopover, -} from 'views/components/component_kit/new_designs/CWPopover'; -import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; -import './NewToolbar.scss'; - -export const NewToolbar = () => { - const formattingPopoverProps = usePopover(); - - return ( -
- - - - -
- } - {...formattingPopoverProps} - /> -
- ); -}; From e3b2521e19715f92037ee6e1c9047616dd51a30f Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Wed, 9 Oct 2024 14:36:54 -0700 Subject: [PATCH 088/425] update imports --- .../src/contest/CreateContestManagerMetadata.command.ts | 5 ++++- libs/model/src/contest/FarcasterUpvoteAction.command.ts | 3 +-- libs/model/src/models/reaction.ts | 2 +- libs/model/src/policies/FarcasterWorker.policy.ts | 3 +-- libs/model/src/utils/buildFarcasterContestFrameUrl.ts | 3 +++ libs/model/src/utils/index.ts | 3 +++ 6 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 libs/model/src/utils/buildFarcasterContestFrameUrl.ts diff --git a/libs/model/src/contest/CreateContestManagerMetadata.command.ts b/libs/model/src/contest/CreateContestManagerMetadata.command.ts index 190e9af60bd..599921ffc49 100644 --- a/libs/model/src/contest/CreateContestManagerMetadata.command.ts +++ b/libs/model/src/contest/CreateContestManagerMetadata.command.ts @@ -7,6 +7,7 @@ import { models } from '../database'; import { isAuthorized, type AuthContext } from '../middleware'; import { mustExist } from '../middleware/guards'; import { TopicAttributes } from '../models'; +import { buildFarcasterContestFrameUrl } from '../utils'; const Errors = { InvalidTopics: 'Invalid topics', @@ -56,7 +57,9 @@ export function CreateContestManagerMetadata(): Command< })); } - const farcaster_frame_url = `/api/farcaster/contests/${payload.contest_address}`; + const farcaster_frame_url = buildFarcasterContestFrameUrl( + payload.contest_address, + ); const contestManager = await models.sequelize.transaction( async (transaction) => { diff --git a/libs/model/src/contest/FarcasterUpvoteAction.command.ts b/libs/model/src/contest/FarcasterUpvoteAction.command.ts index f5cd9c3982a..6b0f6733d20 100644 --- a/libs/model/src/contest/FarcasterUpvoteAction.command.ts +++ b/libs/model/src/contest/FarcasterUpvoteAction.command.ts @@ -2,8 +2,7 @@ import { EventNames, type Command } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; import { models } from '../database'; import { mustExist } from '../middleware/guards'; -import { emitEvent } from '../utils'; -import { buildFarcasterContentUrl } from '../utils/buildFarcasterContentUrl'; +import { buildFarcasterContentUrl, emitEvent } from '../utils'; // This webhook processes the cast action event export function FarcasterUpvoteAction(): Command< diff --git a/libs/model/src/models/reaction.ts b/libs/model/src/models/reaction.ts index 80a78be7ae5..63bff3986d6 100644 --- a/libs/model/src/models/reaction.ts +++ b/libs/model/src/models/reaction.ts @@ -8,7 +8,7 @@ import type { ModelInstance, ThreadInstance, } from '.'; -import { emitEvent, getThreadContestManagers } from '../utils'; +import { emitEvent, getThreadContestManagers } from '../utils/utils'; export type ReactionAttributes = z.infer; export type ReactionInstance = ModelInstance; diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts index 69b528ddf62..2fe04beb166 100644 --- a/libs/model/src/policies/FarcasterWorker.policy.ts +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -3,8 +3,7 @@ import { NeynarAPIClient } from '@neynar/nodejs-sdk'; import { Op } from 'sequelize'; import { config, models } from '..'; import { mustExist } from '../middleware/guards'; -import { buildFarcasterContentUrl } from '../utils/buildFarcasterContentUrl'; -import { buildFarcasterWebhookName } from '../utils/buildFarcasterWebhookName'; +import { buildFarcasterContentUrl, buildFarcasterWebhookName } from '../utils'; import { createOnchainContestContent, createOnchainContestVote } from './utils'; const log = logger(import.meta); diff --git a/libs/model/src/utils/buildFarcasterContestFrameUrl.ts b/libs/model/src/utils/buildFarcasterContestFrameUrl.ts new file mode 100644 index 00000000000..c104cde8c05 --- /dev/null +++ b/libs/model/src/utils/buildFarcasterContestFrameUrl.ts @@ -0,0 +1,3 @@ +export function buildFarcasterContestFrameUrl(contestAddress: string) { + return `/api/integration/farcaster/contests/${contestAddress}/contestCard`; +} diff --git a/libs/model/src/utils/index.ts b/libs/model/src/utils/index.ts index 669692896c9..0ca17f7ff6f 100644 --- a/libs/model/src/utils/index.ts +++ b/libs/model/src/utils/index.ts @@ -1,3 +1,6 @@ +export * from './buildFarcasterContentUrl'; +export * from './buildFarcasterContestFrameUrl'; +export * from './buildFarcasterWebhookName'; export * from './decodeContent'; export * from './denormalizedCountUtils'; export * from './getDelta'; From a4377e08eb98beba17e7ffd737147f9085ac8e38 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Wed, 9 Oct 2024 15:21:53 -0700 Subject: [PATCH 089/425] fix dep --- libs/model/src/models/thread.ts | 2 +- libs/model/src/policies/FarcasterWorker.policy.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/model/src/models/thread.ts b/libs/model/src/models/thread.ts index 521b877b832..dcc40e05c27 100644 --- a/libs/model/src/models/thread.ts +++ b/libs/model/src/models/thread.ts @@ -3,7 +3,7 @@ import { Thread } from '@hicommonwealth/schemas'; import { getDecodedString } from '@hicommonwealth/shared'; import Sequelize from 'sequelize'; import { z } from 'zod'; -import { emitEvent, getThreadContestManagers } from '../utils'; +import { emitEvent, getThreadContestManagers } from '../utils/utils'; import { AddressAttributes } from './address'; import type { CommunityAttributes } from './community'; import type { ThreadSubscriptionAttributes } from './thread_subscriptions'; diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts index 2fe04beb166..a1a05e413b1 100644 --- a/libs/model/src/policies/FarcasterWorker.policy.ts +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -8,8 +8,6 @@ import { createOnchainContestContent, createOnchainContestVote } from './utils'; const log = logger(import.meta); -const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); - const inputs = { FarcasterCastCreated: events.FarcasterCastCreated, FarcasterReplyCastCreated: events.FarcasterReplyCastCreated, @@ -52,6 +50,7 @@ export function FarcasterWorker(): Policy { ); // if webhook exists, update target hashes, otherwise create new webhook + const client = new NeynarAPIClient(config.CONTESTS.NEYNAR_API_KEY!); if (contestManager.neynar_webhook_id) { await client.updateWebhook( contestManager.neynar_webhook_id, From deec13bfe680cb968211998ce84122b45fb09c8a Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Wed, 9 Oct 2024 16:01:08 -0700 Subject: [PATCH 090/425] lint --- .../src/contest/GetFarcasterUpvoteActionMetadata.query.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts b/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts index b0a78ece671..fdc7f71f1f6 100644 --- a/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts +++ b/libs/model/src/contest/GetFarcasterUpvoteActionMetadata.query.ts @@ -10,7 +10,7 @@ export function GetFarcasterUpvoteActionMetadata(): Query< auth: [], secure: false, body: async () => { - return { + return await Promise.resolve({ name: 'Upvote Content', icon: 'thumbsup', description: 'Upvote content on a Commonwealth contest', @@ -19,7 +19,7 @@ export function GetFarcasterUpvoteActionMetadata(): Query< type: 'post', postUrl: config.CONTESTS.FARCASTER_ACTION_URL!, }, - }; + }); }, }; } From d435de18edd7ce1843dec3ced1b29c2de061978f Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 10 Oct 2024 06:57:16 -0700 Subject: [PATCH 091/425] add neynar webhook verification --- .../server/api/integration-router.ts | 4 +++ .../middleware/validateNeynarWebhook.ts | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 packages/commonwealth/server/middleware/validateNeynarWebhook.ts diff --git a/packages/commonwealth/server/api/integration-router.ts b/packages/commonwealth/server/api/integration-router.ts index 1124bc316f6..97ac9b39a18 100644 --- a/packages/commonwealth/server/api/integration-router.ts +++ b/packages/commonwealth/server/api/integration-router.ts @@ -2,6 +2,7 @@ import { express } from '@hicommonwealth/adapters'; import { ChainEvents, Contest, Snapshot, config } from '@hicommonwealth/model'; import { Router, raw } from 'express'; import farcasterRouter from 'server/farcaster/router'; +import { validateNeynarWebhook } from 'server/middleware/validateNeynarWebhook'; const PATH = '/api/integration'; @@ -32,11 +33,13 @@ function build() { // Farcaster webhooks/actions router.post( '/farcaster/CastCreated', + validateNeynarWebhook(config.CONTESTS.NEYNAR_CAST_CREATED_WEBHOOK_SECRET), express.command(Contest.FarcasterCastCreatedWebhook()), ); router.post( '/farcaster/ReplyCastCreated', + validateNeynarWebhook(config.CONTESTS.NEYNAR_CAST_CREATED_WEBHOOK_SECRET), express.command(Contest.FarcasterReplyCastCreatedWebhook()), ); @@ -47,6 +50,7 @@ function build() { router.post( '/farcaster/CastUpvoteAction', + validateNeynarWebhook(config.CONTESTS.NEYNAR_CAST_CREATED_WEBHOOK_SECRET), express.command(Contest.FarcasterUpvoteAction()), ); } diff --git a/packages/commonwealth/server/middleware/validateNeynarWebhook.ts b/packages/commonwealth/server/middleware/validateNeynarWebhook.ts new file mode 100644 index 00000000000..715e5b21f00 --- /dev/null +++ b/packages/commonwealth/server/middleware/validateNeynarWebhook.ts @@ -0,0 +1,27 @@ +import { createHmac } from 'crypto'; + +export function validateNeynarWebhook( + webhookSecret: string | null | undefined, +) { + return (req, _, next) => { + if (!webhookSecret) { + throw new Error('Neynar webhook secret not set'); + } + + const sig = req.headers['X-Neynar-Signature']; + if (!sig) { + throw new Error('Neynar signature missing from request headers'); + } + + const hmac = createHmac('sha512', webhookSecret); + hmac.update(JSON.stringify(req.body)); + + const generatedSignature = hmac.digest('hex'); + + const isValid = generatedSignature === sig; + if (!isValid) { + throw new Error('Invalid webhook signature'); + } + next(); + }; +} From 4350c7bc9d738ba5c77ab7c3973ce080d4feef78 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 10 Oct 2024 06:57:59 -0700 Subject: [PATCH 092/425] add env --- libs/model/src/config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libs/model/src/config.ts b/libs/model/src/config.ts index 6566fdbd905..3cb26b589c4 100644 --- a/libs/model/src/config.ts +++ b/libs/model/src/config.ts @@ -36,6 +36,7 @@ const { MEMBERSHIP_REFRESH_BATCH_SIZE, MEMBERSHIP_REFRESH_TTL_SECONDS, NEYNAR_API_KEY, + NEYNAR_CAST_CREATED_WEBHOOK_SECRET, NEYNAR_REPLY_WEBHOOK_URL, FARCASTER_ACTION_URL, } = process.env; @@ -90,6 +91,7 @@ export const config = configure( : 2, FLAG_FARCASTER_CONTEST: FLAG_FARCASTER_CONTEST === 'true', NEYNAR_API_KEY: NEYNAR_API_KEY, + NEYNAR_CAST_CREATED_WEBHOOK_SECRET: NEYNAR_CAST_CREATED_WEBHOOK_SECRET, NEYNAR_REPLY_WEBHOOK_URL: NEYNAR_REPLY_WEBHOOK_URL, FARCASTER_ACTION_URL: FARCASTER_ACTION_URL, }, @@ -191,6 +193,7 @@ export const config = configure( MAX_USER_POSTS_PER_CONTEST: z.number().int(), FLAG_FARCASTER_CONTEST: z.boolean().nullish(), NEYNAR_API_KEY: z.string().nullish(), + NEYNAR_CAST_CREATED_WEBHOOK_SECRET: z.string().nullish(), NEYNAR_REPLY_WEBHOOK_URL: z.string().nullish(), FARCASTER_ACTION_URL: z.string().nullish(), }), From 64dca36a405d9ed7a7388786a5c23b6fe0e5346d Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 10 Oct 2024 07:00:01 -0700 Subject: [PATCH 093/425] contest utils filename + fix contest worker onchain vote --- libs/model/src/policies/ContestWorker.policy.ts | 7 +++++-- libs/model/src/policies/FarcasterWorker.policy.ts | 5 ++++- libs/model/src/policies/{utils.ts => contest-utils.ts} | 0 3 files changed, 9 insertions(+), 3 deletions(-) rename libs/model/src/policies/{utils.ts => contest-utils.ts} (100%) diff --git a/libs/model/src/policies/ContestWorker.policy.ts b/libs/model/src/policies/ContestWorker.policy.ts index 22186aeef31..4d16cefca58 100644 --- a/libs/model/src/policies/ContestWorker.policy.ts +++ b/libs/model/src/policies/ContestWorker.policy.ts @@ -1,6 +1,9 @@ import { events, Policy } from '@hicommonwealth/core'; import { buildThreadContentUrl } from '../utils'; -import { createOnchainContestContent } from './utils'; +import { + createOnchainContestContent, + createOnchainContestVote, +} from './contest-utils'; const inputs = { ThreadCreated: events.ThreadCreated, @@ -28,7 +31,7 @@ export function ContestWorker(): Policy { payload.community_id, payload.thread_id, ); - await createOnchainContestContent({ + await createOnchainContestVote({ community_id: payload.community_id, topic_id: payload.topic_id!, content_url, diff --git a/libs/model/src/policies/FarcasterWorker.policy.ts b/libs/model/src/policies/FarcasterWorker.policy.ts index a1a05e413b1..a06c9916fc4 100644 --- a/libs/model/src/policies/FarcasterWorker.policy.ts +++ b/libs/model/src/policies/FarcasterWorker.policy.ts @@ -4,7 +4,10 @@ import { Op } from 'sequelize'; import { config, models } from '..'; import { mustExist } from '../middleware/guards'; import { buildFarcasterContentUrl, buildFarcasterWebhookName } from '../utils'; -import { createOnchainContestContent, createOnchainContestVote } from './utils'; +import { + createOnchainContestContent, + createOnchainContestVote, +} from './contest-utils'; const log = logger(import.meta); diff --git a/libs/model/src/policies/utils.ts b/libs/model/src/policies/contest-utils.ts similarity index 100% rename from libs/model/src/policies/utils.ts rename to libs/model/src/policies/contest-utils.ts From ac8f0ef732460b0a728cb5e0742801000f6076e2 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 10 Oct 2024 10:12:15 -0400 Subject: [PATCH 094/425] publish v0.0.2 --- libs/api-client/README.md | 14 +- libs/api-client/fern/fern.config.json | 2 +- libs/api-client/fern/openapi/openapi.yml | 49 - libs/api-client/package.json | 5 +- libs/api-client/src/Client.d.ts | 8 - libs/api-client/src/Client.js | 5 - .../api/resources/comment/client/Client.d.ts | 9 - .../api/resources/comment/client/Client.js | 10 - .../client/requests/CreateCommentRequest.d.ts | 1 - .../client/requests/GetCommentsRequest.d.ts | 1 - .../CreateCommentRequestDiscordMeta.d.ts | 1 - .../comment/types/CreateCommentResponse.d.ts | 2 - .../types/CreateCommentResponseAddress.d.ts | 1 - .../CreateCommentResponseAddressUser.d.ts | 1 - ...reateCommentResponseAddressUserApiKey.d.ts | 10 + .../CreateCommentResponseAddressUserApiKey.js | 4 + ...eateCommentResponseAddressUserProfile.d.ts | 1 - .../CreateCommentResponseDiscordMeta.d.ts | 1 - .../types/CreateCommentResponseReaction.d.ts | 1 - .../CreateCommentResponseReactionAddress.d.ts | 1 - ...ateCommentResponseReactionAddressUser.d.ts | 1 - ...mentResponseReactionAddressUserApiKey.d.ts | 10 + ...ommentResponseReactionAddressUserApiKey.js | 4 + ...entResponseReactionAddressUserProfile.d.ts | 1 - .../types/CreateCommentResponseThread.d.ts | 12 +- .../CreateCommentResponseThreadAddress.d.ts | 1 - ...reateCommentResponseThreadAddressUser.d.ts | 1 - ...ommentResponseThreadAddressUserApiKey.d.ts | 10 + ...eCommentResponseThreadAddressUserApiKey.js | 4 + ...mmentResponseThreadAddressUserProfile.d.ts | 1 - ...ommentResponseThreadCollaboratorsItem.d.ts | 1 - ...ntResponseThreadCollaboratorsItemUser.d.ts | 1 - ...onseThreadCollaboratorsItemUserApiKey.d.ts | 10 + ...sponseThreadCollaboratorsItemUserApiKey.js | 4 + ...nseThreadCollaboratorsItemUserProfile.d.ts | 1 - ...reateCommentResponseThreadDiscordMeta.d.ts | 1 - .../CreateCommentResponseThreadLinksItem.d.ts | 1 - ...ateCommentResponseThreadReactionsItem.d.ts | 1 - ...entResponseThreadReactionsItemAddress.d.ts | 1 - ...esponseThreadReactionsItemAddressUser.d.ts | 1 - ...eThreadReactionsItemAddressUserApiKey.d.ts | 10 + ...nseThreadReactionsItemAddressUserApiKey.js | 4 + ...ThreadReactionsItemAddressUserProfile.d.ts | 1 - .../CreateCommentResponseThreadTopic.d.ts | 1 - .../comment/types/GetCommentsResponse.d.ts | 1 - .../types/GetCommentsResponseResultsItem.d.ts | 2 - ...GetCommentsResponseResultsItemAddress.d.ts | 1 - ...ommentsResponseResultsItemAddressUser.d.ts | 1 - ...sResponseResultsItemAddressUserApiKey.d.ts | 10 + ...ntsResponseResultsItemAddressUserApiKey.js | 4 + ...ResponseResultsItemAddressUserProfile.d.ts | 1 - ...ommentsResponseResultsItemDiscordMeta.d.ts | 1 - ...etCommentsResponseResultsItemReaction.d.ts | 1 - ...ntsResponseResultsItemReactionAddress.d.ts | 1 - ...esponseResultsItemReactionAddressUser.d.ts | 1 - ...eResultsItemReactionAddressUserApiKey.d.ts | 10 + ...nseResultsItemReactionAddressUserApiKey.js | 4 + ...ResultsItemReactionAddressUserProfile.d.ts | 1 - .../GetCommentsResponseResultsItemThread.d.ts | 12 +- ...mentsResponseResultsItemThreadAddress.d.ts | 1 - ...sResponseResultsItemThreadAddressUser.d.ts | 1 - ...nseResultsItemThreadAddressUserApiKey.d.ts | 10 + ...ponseResultsItemThreadAddressUserApiKey.js | 4 + ...seResultsItemThreadAddressUserProfile.d.ts | 1 - ...nseResultsItemThreadCollaboratorsItem.d.ts | 1 - ...esultsItemThreadCollaboratorsItemUser.d.ts | 1 - ...ItemThreadCollaboratorsItemUserApiKey.d.ts | 10 + ...tsItemThreadCollaboratorsItemUserApiKey.js | 4 + ...temThreadCollaboratorsItemUserProfile.d.ts | 1 - ...sResponseResultsItemThreadDiscordMeta.d.ts | 1 - ...ntsResponseResultsItemThreadLinksItem.d.ts | 1 - ...esponseResultsItemThreadReactionsItem.d.ts | 1 - ...ResultsItemThreadReactionsItemAddress.d.ts | 1 - ...ltsItemThreadReactionsItemAddressUser.d.ts | 1 - ...mThreadReactionsItemAddressUserApiKey.d.ts | 10 + ...temThreadReactionsItemAddressUserApiKey.js | 4 + ...ThreadReactionsItemAddressUserProfile.d.ts | 1 - ...ommentsResponseResultsItemThreadTopic.d.ts | 1 - .../comment/types/UpdateCommentResponse.d.ts | 2 - .../types/UpdateCommentResponseAddress.d.ts | 1 - .../UpdateCommentResponseAddressUser.d.ts | 1 - ...pdateCommentResponseAddressUserApiKey.d.ts | 10 + .../UpdateCommentResponseAddressUserApiKey.js | 4 + ...dateCommentResponseAddressUserProfile.d.ts | 1 - .../UpdateCommentResponseDiscordMeta.d.ts | 1 - .../types/UpdateCommentResponseReaction.d.ts | 1 - .../UpdateCommentResponseReactionAddress.d.ts | 1 - ...ateCommentResponseReactionAddressUser.d.ts | 1 - ...mentResponseReactionAddressUserApiKey.d.ts | 10 + ...ommentResponseReactionAddressUserApiKey.js | 4 + ...entResponseReactionAddressUserProfile.d.ts | 1 - .../types/UpdateCommentResponseThread.d.ts | 12 +- .../UpdateCommentResponseThreadAddress.d.ts | 1 - ...pdateCommentResponseThreadAddressUser.d.ts | 1 - ...ommentResponseThreadAddressUserApiKey.d.ts | 10 + ...eCommentResponseThreadAddressUserApiKey.js | 4 + ...mmentResponseThreadAddressUserProfile.d.ts | 1 - ...ommentResponseThreadCollaboratorsItem.d.ts | 1 - ...ntResponseThreadCollaboratorsItemUser.d.ts | 1 - ...onseThreadCollaboratorsItemUserApiKey.d.ts | 10 + ...sponseThreadCollaboratorsItemUserApiKey.js | 4 + ...nseThreadCollaboratorsItemUserProfile.d.ts | 1 - ...pdateCommentResponseThreadDiscordMeta.d.ts | 1 - .../UpdateCommentResponseThreadLinksItem.d.ts | 1 - ...ateCommentResponseThreadReactionsItem.d.ts | 1 - ...entResponseThreadReactionsItemAddress.d.ts | 1 - ...esponseThreadReactionsItemAddressUser.d.ts | 1 - ...eThreadReactionsItemAddressUserApiKey.d.ts | 10 + ...nseThreadReactionsItemAddressUserApiKey.js | 4 + ...ThreadReactionsItemAddressUserProfile.d.ts | 1 - .../UpdateCommentResponseThreadTopic.d.ts | 1 - .../resources/community/client/Client.d.ts | 17 - .../api/resources/community/client/Client.js | 18 - .../requests/CreateCommunityRequest.d.ts | 1 - .../client/requests/CreateGroupRequest.d.ts | 1 - .../client/requests/CreateTopicRequest.d.ts | 1 - .../requests/GetCommunitiesRequest.d.ts | 1 - .../client/requests/GetMembersRequest.d.ts | 1 - .../client/requests/JoinCommunityRequest.d.ts | 12 + .../client/requests/JoinCommunityRequest.js | 4 + .../requests/UpdateCommunityRequest.d.ts | 1 - .../client/requests/UpdateGroupRequest.d.ts | 1 - .../types/CreateCommunityResponse.d.ts | 1 - .../CreateCommunityResponseCommunity.d.ts | 1 - ...mmunityResponseCommunityAddressesItem.d.ts | 1 - ...ityResponseCommunityAddressesItemUser.d.ts | 1 - ...ponseCommunityAddressesItemUserApiKey.d.ts | 10 + ...esponseCommunityAddressesItemUserApiKey.js | 4 + ...onseCommunityAddressesItemUserProfile.d.ts | 1 - ...teCommunityResponseCommunityChainNode.d.ts | 1 - ...yResponseCommunityCommunityStakesItem.d.ts | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...ityResponseCommunityCommunityTagsItem.d.ts | 1 - ...yResponseCommunityContestManagersItem.d.ts | 1 - ...munityContestManagersItemContestsItem.d.ts | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...ommunityContestManagersItemTopicsItem.d.ts | 1 - ...eCommunityResponseCommunityGroupsItem.d.ts | 1 - ...seCommunityGroupsItemRequirementsItem.d.ts | 2 - ...munityGroupsItemRequirementsItemAllow.d.ts | 1 - ...tyGroupsItemRequirementsItemThreshold.d.ts | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...CreateCommunityResponseCommunityTerms.d.ts | 1 - ...eCommunityResponseCommunityTopicsItem.d.ts | 1 - .../CreateGroupRequestRequirementsItem.d.ts | 2 - ...eateGroupRequestRequirementsItemAllow.d.ts | 1 - ...GroupRequestRequirementsItemThreshold.d.ts | 1 - ...pRequestRequirementsItemThresholdData.d.ts | 1 - ...stRequirementsItemThresholdDataSource.d.ts | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - .../community/types/CreateGroupResponse.d.ts | 1 - .../CreateGroupResponseAddressesItem.d.ts | 1 - .../CreateGroupResponseAddressesItemUser.d.ts | 1 - ...eGroupResponseAddressesItemUserApiKey.d.ts | 10 + ...ateGroupResponseAddressesItemUserApiKey.js | 4 + ...GroupResponseAddressesItemUserProfile.d.ts | 1 - .../types/CreateGroupResponseChainNode.d.ts | 1 - ...reateGroupResponseCommunityStakesItem.d.ts | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - .../CreateGroupResponseCommunityTagsItem.d.ts | 1 - ...reateGroupResponseContestManagersItem.d.ts | 1 - ...sponseContestManagersItemContestsItem.d.ts | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...ResponseContestManagersItemTopicsItem.d.ts | 1 - .../types/CreateGroupResponseGroupsItem.d.ts | 1 - ...oupResponseGroupsItemRequirementsItem.d.ts | 2 - ...sponseGroupsItemRequirementsItemAllow.d.ts | 1 - ...seGroupsItemRequirementsItemThreshold.d.ts | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - .../types/CreateGroupResponseTerms.d.ts | 1 - .../types/CreateGroupResponseTopicsItem.d.ts | 1 - .../community/types/CreateTopicResponse.d.ts | 1 - .../types/CreateTopicResponseTopic.d.ts | 1 - .../types/GetCommunitiesResponse.d.ts | 1 - .../GetCommunitiesResponseResultsItem.d.ts | 1 - ...itiesResponseResultsItemAddressesItem.d.ts | 1 - ...sResponseResultsItemAddressesItemUser.d.ts | 1 - ...nseResultsItemAddressesItemUserApiKey.d.ts | 10 + ...ponseResultsItemAddressesItemUserApiKey.js | 4 + ...seResultsItemAddressesItemUserProfile.d.ts | 1 - ...mmunitiesResponseResultsItemChainNode.d.ts | 1 - ...esponseResultsItemCommunityStakesItem.d.ts | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...sResponseResultsItemCommunityTagsItem.d.ts | 1 - ...esponseResultsItemContestManagersItem.d.ts | 1 - ...tsItemContestManagersItemContestsItem.d.ts | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...ultsItemContestManagersItemTopicsItem.d.ts | 1 - ...munitiesResponseResultsItemGroupsItem.d.ts | 1 - ...ResultsItemGroupsItemRequirementsItem.d.ts | 2 - ...tsItemGroupsItemRequirementsItemAllow.d.ts | 1 - ...emGroupsItemRequirementsItemThreshold.d.ts | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...etCommunitiesResponseResultsItemTerms.d.ts | 1 - ...munitiesResponseResultsItemTopicsItem.d.ts | 1 - .../community/types/GetCommunityResponse.d.ts | 1 - .../types/GetCommunityResponseAddresses.d.ts | 1 - ...mmunityResponseAddressesAddressesItem.d.ts | 1 - ...ityResponseAddressesAddressesItemUser.d.ts | 1 - ...ponseAddressesAddressesItemUserApiKey.d.ts | 10 + ...esponseAddressesAddressesItemUserApiKey.js | 4 + ...onseAddressesAddressesItemUserProfile.d.ts | 1 - ...ityResponseAddressesAdminsAndModsItem.d.ts | 1 - ...etCommunityResponseAddressesChainNode.d.ts | 1 - ...yResponseAddressesCommunityStakesItem.d.ts | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...ityResponseAddressesCommunityTagsItem.d.ts | 1 - ...yResponseAddressesContestManagersItem.d.ts | 1 - ...ressesContestManagersItemContestsItem.d.ts | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...ddressesContestManagersItemTopicsItem.d.ts | 1 - ...tCommunityResponseAddressesGroupsItem.d.ts | 1 - ...seAddressesGroupsItemRequirementsItem.d.ts | 2 - ...ressesGroupsItemRequirementsItemAllow.d.ts | 1 - ...esGroupsItemRequirementsItemThreshold.d.ts | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - .../GetCommunityResponseAddressesTerms.d.ts | 1 - ...tCommunityResponseAddressesTopicsItem.d.ts | 1 - .../community/types/GetMembersResponse.d.ts | 1 - .../types/GetMembersResponseResultsItem.d.ts | 1 - .../types/JoinCommunityResponse.d.ts | 12 + .../community/types/JoinCommunityResponse.js | 4 + .../types/JoinCommunityResponseBase.d.ts | 16 + .../types/JoinCommunityResponseBase.js | 10 + .../types/JoinCommunityResponseWalletId.d.ts | 32 + .../types/JoinCommunityResponseWalletId.js | 18 + .../UpdateCommunityRequestAddressesItem.d.ts | 1 - ...dateCommunityRequestAddressesItemUser.d.ts | 1 - ...mmunityRequestAddressesItemUserApiKey.d.ts | 10 + ...CommunityRequestAddressesItemUserApiKey.js | 4 + ...munityRequestAddressesItemUserProfile.d.ts | 1 - .../UpdateCommunityRequestChainNode.d.ts | 1 - ...teCommunityRequestCommunityStakesItem.d.ts | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...dateCommunityRequestCommunityTagsItem.d.ts | 1 - ...teCommunityRequestContestManagersItem.d.ts | 1 - ...equestContestManagersItemContestsItem.d.ts | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...yRequestContestManagersItemTopicsItem.d.ts | 1 - .../UpdateCommunityRequestGroupsItem.d.ts | 1 - ...nityRequestGroupsItemRequirementsItem.d.ts | 2 - ...equestGroupsItemRequirementsItemAllow.d.ts | 1 - ...stGroupsItemRequirementsItemThreshold.d.ts | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - .../types/UpdateCommunityRequestTerms.d.ts | 1 - .../UpdateCommunityRequestTopicsItem.d.ts | 1 - .../types/UpdateCommunityResponse.d.ts | 1 - .../UpdateCommunityResponseAddressesItem.d.ts | 1 - ...ateCommunityResponseAddressesItemUser.d.ts | 1 - ...munityResponseAddressesItemUserApiKey.d.ts | 10 + ...ommunityResponseAddressesItemUserApiKey.js | 4 + ...unityResponseAddressesItemUserProfile.d.ts | 1 - .../UpdateCommunityResponseChainNode.d.ts | 1 - ...eCommunityResponseCommunityStakesItem.d.ts | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...ateCommunityResponseCommunityTagsItem.d.ts | 1 - ...eCommunityResponseContestManagersItem.d.ts | 1 - ...sponseContestManagersItemContestsItem.d.ts | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...ResponseContestManagersItemTopicsItem.d.ts | 1 - .../UpdateCommunityResponseGroupsItem.d.ts | 1 - ...ityResponseGroupsItemRequirementsItem.d.ts | 2 - ...sponseGroupsItemRequirementsItemAllow.d.ts | 1 - ...seGroupsItemRequirementsItemThreshold.d.ts | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - .../types/UpdateCommunityResponseTerms.d.ts | 1 - .../UpdateCommunityResponseTopicsItem.d.ts | 1 - .../UpdateGroupRequestRequirementsItem.d.ts | 2 - ...dateGroupRequestRequirementsItemAllow.d.ts | 1 - ...GroupRequestRequirementsItemThreshold.d.ts | 1 - ...pRequestRequirementsItemThresholdData.d.ts | 1 - ...stRequirementsItemThresholdDataSource.d.ts | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - .../community/types/UpdateGroupResponse.d.ts | 1 - .../UpdateGroupResponseRequirementsItem.d.ts | 2 - ...ateGroupResponseRequirementsItemAllow.d.ts | 1 - ...roupResponseRequirementsItemThreshold.d.ts | 1 - ...ResponseRequirementsItemThresholdData.d.ts | 1 - ...seRequirementsItemThresholdDataSource.d.ts | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - .../community/types/UpdateTopicResponse.d.ts | 1 - .../types/UpdateTopicResponseTopic.d.ts | 1 - .../api/resources/reaction/client/Client.d.ts | 8 - .../api/resources/reaction/client/Client.js | 9 - .../types/CreateCommentReactionResponse.d.ts | 1 - .../CreateCommentReactionResponseAddress.d.ts | 1 - ...ateCommentReactionResponseAddressUser.d.ts | 1 - ...mentReactionResponseAddressUserApiKey.d.ts | 10 + ...ommentReactionResponseAddressUserApiKey.js | 4 + ...entReactionResponseAddressUserProfile.d.ts | 1 - .../types/CreateThreadReactionResponse.d.ts | 1 - .../CreateThreadReactionResponseAddress.d.ts | 1 - ...eateThreadReactionResponseAddressUser.d.ts | 1 - ...readReactionResponseAddressUserApiKey.d.ts | 10 + ...ThreadReactionResponseAddressUserApiKey.js | 4 + ...eadReactionResponseAddressUserProfile.d.ts | 1 - .../api/resources/thread/client/Client.d.ts | 8 - .../src/api/resources/thread/client/Client.js | 9 - .../client/requests/CreateThreadRequest.d.ts | 1 - .../client/requests/UpdateThreadRequest.d.ts | 1 - .../types/CreateThreadRequestDiscordMeta.d.ts | 1 - .../thread/types/CreateThreadResponse.d.ts | 12 +- .../types/CreateThreadResponseAddress.d.ts | 1 - .../CreateThreadResponseAddressUser.d.ts | 1 - ...CreateThreadResponseAddressUserApiKey.d.ts | 10 + .../CreateThreadResponseAddressUserApiKey.js | 4 + ...reateThreadResponseAddressUserProfile.d.ts | 1 - ...CreateThreadResponseCollaboratorsItem.d.ts | 1 - ...teThreadResponseCollaboratorsItemUser.d.ts | 1 - ...adResponseCollaboratorsItemUserApiKey.d.ts | 10 + ...readResponseCollaboratorsItemUserApiKey.js | 4 + ...dResponseCollaboratorsItemUserProfile.d.ts | 1 - .../CreateThreadResponseDiscordMeta.d.ts | 1 - .../types/CreateThreadResponseLinksItem.d.ts | 1 - .../CreateThreadResponseReactionsItem.d.ts | 1 - ...ateThreadResponseReactionsItemAddress.d.ts | 1 - ...hreadResponseReactionsItemAddressUser.d.ts | 1 - ...esponseReactionsItemAddressUserApiKey.d.ts | 10 + ...dResponseReactionsItemAddressUserApiKey.js | 4 + ...sponseReactionsItemAddressUserProfile.d.ts | 1 - .../types/CreateThreadResponseTopic.d.ts | 1 - .../thread/types/UpdateThreadResponse.d.ts | 12 +- .../types/UpdateThreadResponseAddress.d.ts | 1 - .../UpdateThreadResponseAddressUser.d.ts | 1 - ...UpdateThreadResponseAddressUserApiKey.d.ts | 10 + .../UpdateThreadResponseAddressUserApiKey.js | 4 + ...pdateThreadResponseAddressUserProfile.d.ts | 1 - ...UpdateThreadResponseCollaboratorsItem.d.ts | 1 - ...teThreadResponseCollaboratorsItemUser.d.ts | 1 - ...adResponseCollaboratorsItemUserApiKey.d.ts | 10 + ...readResponseCollaboratorsItemUserApiKey.js | 4 + ...dResponseCollaboratorsItemUserProfile.d.ts | 1 - .../UpdateThreadResponseDiscordMeta.d.ts | 1 - .../types/UpdateThreadResponseLinksItem.d.ts | 1 - .../UpdateThreadResponseReactionsItem.d.ts | 1 - ...ateThreadResponseReactionsItemAddress.d.ts | 1 - ...hreadResponseReactionsItemAddressUser.d.ts | 1 - ...esponseReactionsItemAddressUserApiKey.d.ts | 10 + ...dResponseReactionsItemAddressUserApiKey.js | 4 + ...sponseReactionsItemAddressUserProfile.d.ts | 1 - .../types/UpdateThreadResponseTopic.d.ts | 1 - .../src/core/fetcher/APIResponse.d.ts | 2 - libs/api-client/src/core/fetcher/Fetcher.d.ts | 8 - libs/api-client/src/core/fetcher/Fetcher.js | 6 - libs/api-client/src/core/fetcher/Supplier.js | 4 - .../src/core/fetcher/createRequestUrl.js | 1 - .../api-client/src/core/fetcher/getFetchFn.js | 5 - .../src/core/fetcher/getRequestBody.d.ts | 1 - .../src/core/fetcher/getRequestBody.js | 5 - .../src/core/fetcher/getResponseBody.js | 5 - .../src/core/fetcher/makeRequest.js | 5 - .../src/core/fetcher/requestWithRetries.js | 5 - libs/api-client/src/core/fetcher/signals.d.ts | 1 - libs/api-client/src/core/fetcher/signals.js | 2 - .../Node18UniversalStreamWrapper.d.ts | 17 - .../Node18UniversalStreamWrapper.js | 24 - .../NodePre18StreamWrapper.d.ts | 16 - .../stream-wrappers/NodePre18StreamWrapper.js | 21 - .../stream-wrappers/UndiciStreamWrapper.d.ts | 19 - .../stream-wrappers/UndiciStreamWrapper.js | 24 - .../stream-wrappers/chooseStreamWrapper.d.ts | 15 - .../stream-wrappers/chooseStreamWrapper.js | 5 - libs/api-client/src/core/runtime/runtime.d.ts | 1 - libs/api-client/src/core/runtime/runtime.js | 1 - libs/api-client/src/core/schemas/Schema.d.ts | 7 - .../src/core/schemas/builders/date/date.d.ts | 1 - .../src/core/schemas/builders/date/date.js | 1 - .../src/core/schemas/builders/enum/enum.d.ts | 1 - .../src/core/schemas/builders/enum/enum.js | 1 - .../src/core/schemas/builders/lazy/lazy.d.ts | 4 - .../src/core/schemas/builders/lazy/lazy.js | 3 - .../schemas/builders/lazy/lazyObject.d.ts | 1 - .../core/schemas/builders/lazy/lazyObject.js | 1 - .../src/core/schemas/builders/list/list.d.ts | 1 - .../src/core/schemas/builders/list/list.js | 2 - .../builders/literals/booleanLiteral.d.ts | 1 - .../builders/literals/booleanLiteral.js | 1 - .../builders/literals/stringLiteral.d.ts | 1 - .../builders/literals/stringLiteral.js | 1 - .../object-like/getObjectLikeUtils.d.ts | 2 - .../object-like/getObjectLikeUtils.js | 2 - .../schemas/builders/object-like/types.d.ts | 2 - .../core/schemas/builders/object/object.d.ts | 2 - .../core/schemas/builders/object/object.js | 6 - .../objectWithoutOptionalProperties.d.ts | 2 - .../object/objectWithoutOptionalProperties.js | 1 - .../schemas/builders/object/property.d.ts | 3 - .../core/schemas/builders/object/property.js | 1 - .../core/schemas/builders/object/types.d.ts | 4 - .../core/schemas/builders/primitives/any.js | 1 - .../schemas/builders/primitives/boolean.js | 1 - .../schemas/builders/primitives/number.js | 1 - .../schemas/builders/primitives/string.js | 1 - .../schemas/builders/primitives/unknown.js | 1 - .../core/schemas/builders/record/record.d.ts | 1 - .../core/schemas/builders/record/record.js | 2 - .../core/schemas/builders/record/types.d.ts | 1 - .../builders/schema-utils/JsonError.d.ts | 2 - .../builders/schema-utils/JsonError.js | 1 - .../builders/schema-utils/ParseError.d.ts | 2 - .../builders/schema-utils/ParseError.js | 1 - .../builders/schema-utils/getSchemaUtils.d.ts | 5 - .../builders/schema-utils/getSchemaUtils.js | 3 - .../stringifyValidationErrors.d.ts | 1 - .../src/core/schemas/builders/set/set.d.ts | 1 - .../src/core/schemas/builders/set/set.js | 1 - .../builders/undiscriminated-union/types.d.ts | 1 - .../undiscriminatedUnion.d.ts | 1 - .../undiscriminatedUnion.js | 2 - .../schemas/builders/union/discriminant.d.ts | 1 - .../core/schemas/builders/union/types.d.ts | 1 - .../core/schemas/builders/union/union.d.ts | 1 - .../src/core/schemas/builders/union/union.js | 2 - .../utils/createIdentitySchemaCreator.d.ts | 1 - .../utils/createIdentitySchemaCreator.js | 1 - .../utils/getErrorMessageForIncorrectType.js | 1 - .../schemas/utils/maybeSkipValidation.d.ts | 1 - .../core/schemas/utils/maybeSkipValidation.js | 1 - .../api-client/src/errors/CommonApiError.d.ts | 1 - libs/api-client/src/errors/CommonApiError.js | 1 - .../client/requests/CreateCommentRequest.d.ts | 1 - .../client/requests/CreateCommentRequest.js | 1 - .../client/requests/DeleteCommentRequest.d.ts | 1 - .../client/requests/DeleteCommentRequest.js | 1 - .../client/requests/UpdateCommentRequest.d.ts | 1 - .../client/requests/UpdateCommentRequest.js | 1 - .../CreateCommentRequestDiscordMeta.d.ts | 1 - .../types/CreateCommentRequestDiscordMeta.js | 1 - .../CreateCommentRequestDiscordMetaUser.d.ts | 1 - .../CreateCommentRequestDiscordMetaUser.js | 1 - .../comment/types/CreateCommentResponse.d.ts | 2 - .../comment/types/CreateCommentResponse.js | 2 - .../types/CreateCommentResponseAddress.d.ts | 1 - .../types/CreateCommentResponseAddress.js | 1 - .../CreateCommentResponseAddressRole.d.ts | 1 - .../types/CreateCommentResponseAddressRole.js | 1 - .../CreateCommentResponseAddressUser.d.ts | 1 - .../types/CreateCommentResponseAddressUser.js | 1 - ...reateCommentResponseAddressUserApiKey.d.ts | 19 + .../CreateCommentResponseAddressUserApiKey.js | 25 + ...eAddressUserEmailNotificationInterval.d.ts | 1 - ...nseAddressUserEmailNotificationInterval.js | 1 - ...eateCommentResponseAddressUserProfile.d.ts | 1 - ...CreateCommentResponseAddressUserProfile.js | 1 - ...onseAddressUserProfileBackgroundImage.d.ts | 1 - ...sponseAddressUserProfileBackgroundImage.js | 1 - ...entResponseAddressUserProfileTagsItem.d.ts | 1 - ...mmentResponseAddressUserProfileTagsItem.js | 1 - .../CreateCommentResponseAddressWalletId.d.ts | 1 - .../CreateCommentResponseAddressWalletId.js | 1 - ...ntResponseCommentVersionHistoriesItem.d.ts | 1 - ...mentResponseCommentVersionHistoriesItem.js | 1 - .../CreateCommentResponseDiscordMeta.d.ts | 1 - .../types/CreateCommentResponseDiscordMeta.js | 1 - .../CreateCommentResponseDiscordMetaUser.d.ts | 1 - .../CreateCommentResponseDiscordMetaUser.js | 1 - .../types/CreateCommentResponseReaction.d.ts | 1 - .../types/CreateCommentResponseReaction.js | 1 - .../CreateCommentResponseReactionAddress.d.ts | 1 - .../CreateCommentResponseReactionAddress.js | 1 - ...ateCommentResponseReactionAddressRole.d.ts | 1 - ...reateCommentResponseReactionAddressRole.js | 1 - ...ateCommentResponseReactionAddressUser.d.ts | 1 - ...reateCommentResponseReactionAddressUser.js | 1 - ...mentResponseReactionAddressUserApiKey.d.ts | 19 + ...ommentResponseReactionAddressUserApiKey.js | 24 + ...nAddressUserEmailNotificationInterval.d.ts | 1 - ...ionAddressUserEmailNotificationInterval.js | 1 - ...entResponseReactionAddressUserProfile.d.ts | 1 - ...mmentResponseReactionAddressUserProfile.js | 1 - ...tionAddressUserProfileBackgroundImage.d.ts | 1 - ...actionAddressUserProfileBackgroundImage.js | 1 - ...nseReactionAddressUserProfileTagsItem.d.ts | 1 - ...ponseReactionAddressUserProfileTagsItem.js | 1 - ...ommentResponseReactionAddressWalletId.d.ts | 1 - ...eCommentResponseReactionAddressWalletId.js | 1 - .../types/CreateCommentResponseSearch.d.ts | 1 - .../types/CreateCommentResponseSearch.js | 1 - .../types/CreateCommentResponseThread.d.ts | 12 +- .../types/CreateCommentResponseThread.js | 12 +- .../CreateCommentResponseThreadAddress.d.ts | 1 - .../CreateCommentResponseThreadAddress.js | 1 - ...reateCommentResponseThreadAddressRole.d.ts | 1 - .../CreateCommentResponseThreadAddressRole.js | 1 - ...reateCommentResponseThreadAddressUser.d.ts | 1 - .../CreateCommentResponseThreadAddressUser.js | 1 - ...ommentResponseThreadAddressUserApiKey.d.ts | 19 + ...eCommentResponseThreadAddressUserApiKey.js | 24 + ...dAddressUserEmailNotificationInterval.d.ts | 1 - ...eadAddressUserEmailNotificationInterval.js | 1 - ...mmentResponseThreadAddressUserProfile.d.ts | 1 - ...CommentResponseThreadAddressUserProfile.js | 1 - ...readAddressUserProfileBackgroundImage.d.ts | 1 - ...ThreadAddressUserProfileBackgroundImage.js | 1 - ...ponseThreadAddressUserProfileTagsItem.d.ts | 1 - ...esponseThreadAddressUserProfileTagsItem.js | 1 - ...eCommentResponseThreadAddressWalletId.d.ts | 1 - ...ateCommentResponseThreadAddressWalletId.js | 1 - ...ommentResponseThreadCollaboratorsItem.d.ts | 1 - ...eCommentResponseThreadCollaboratorsItem.js | 1 - ...ntResponseThreadCollaboratorsItemRole.d.ts | 1 - ...mentResponseThreadCollaboratorsItemRole.js | 1 - ...ntResponseThreadCollaboratorsItemUser.d.ts | 1 - ...mentResponseThreadCollaboratorsItemUser.js | 1 - ...onseThreadCollaboratorsItemUserApiKey.d.ts | 19 + ...sponseThreadCollaboratorsItemUserApiKey.js | 24 + ...torsItemUserEmailNotificationInterval.d.ts | 1 - ...ratorsItemUserEmailNotificationInterval.js | 1 - ...nseThreadCollaboratorsItemUserProfile.d.ts | 1 - ...ponseThreadCollaboratorsItemUserProfile.js | 1 - ...oratorsItemUserProfileBackgroundImage.d.ts | 1 - ...aboratorsItemUserProfileBackgroundImage.js | 1 - ...dCollaboratorsItemUserProfileTagsItem.d.ts | 1 - ...eadCollaboratorsItemUserProfileTagsItem.js | 1 - ...sponseThreadCollaboratorsItemWalletId.d.ts | 1 - ...ResponseThreadCollaboratorsItemWalletId.js | 1 - ...reateCommentResponseThreadDiscordMeta.d.ts | 1 - .../CreateCommentResponseThreadDiscordMeta.js | 1 - ...eCommentResponseThreadDiscordMetaUser.d.ts | 1 - ...ateCommentResponseThreadDiscordMetaUser.js | 1 - .../CreateCommentResponseThreadLinksItem.d.ts | 1 - .../CreateCommentResponseThreadLinksItem.js | 1 - ...eCommentResponseThreadLinksItemSource.d.ts | 1 - ...ateCommentResponseThreadLinksItemSource.js | 1 - ...ateCommentResponseThreadReactionsItem.d.ts | 1 - ...reateCommentResponseThreadReactionsItem.js | 1 - ...entResponseThreadReactionsItemAddress.d.ts | 1 - ...mmentResponseThreadReactionsItemAddress.js | 1 - ...esponseThreadReactionsItemAddressRole.d.ts | 1 - ...tResponseThreadReactionsItemAddressRole.js | 1 - ...esponseThreadReactionsItemAddressUser.d.ts | 1 - ...tResponseThreadReactionsItemAddressUser.js | 1 - ...eThreadReactionsItemAddressUserApiKey.d.ts | 19 + ...nseThreadReactionsItemAddressUserApiKey.js | 24 + ...mAddressUserEmailNotificationInterval.d.ts | 1 - ...temAddressUserEmailNotificationInterval.js | 1 - ...ThreadReactionsItemAddressUserProfile.d.ts | 1 - ...seThreadReactionsItemAddressUserProfile.js | 1 - ...ItemAddressUserProfileBackgroundImage.d.ts | 1 - ...nsItemAddressUserProfileBackgroundImage.js | 1 - ...actionsItemAddressUserProfileTagsItem.d.ts | 1 - ...ReactionsItemAddressUserProfileTagsItem.js | 1 - ...nseThreadReactionsItemAddressWalletId.d.ts | 1 - ...ponseThreadReactionsItemAddressWalletId.js | 1 - .../CreateCommentResponseThreadSearch.d.ts | 1 - .../CreateCommentResponseThreadSearch.js | 1 - ...ponseThreadThreadVersionHistoriesItem.d.ts | 1 - ...esponseThreadThreadVersionHistoriesItem.js | 1 - .../CreateCommentResponseThreadTopic.d.ts | 1 - .../types/CreateCommentResponseThreadTopic.js | 1 - ...tResponseThreadTopicContestTopicsItem.d.ts | 1 - ...entResponseThreadTopicContestTopicsItem.js | 1 - ...mentResponseThreadTopicWeightedVoting.d.ts | 1 - ...ommentResponseThreadTopicWeightedVoting.js | 1 - .../comment/types/DeleteCommentResponse.d.ts | 1 - .../comment/types/DeleteCommentResponse.js | 1 - .../GetCommentsRequestOrderDirection.d.ts | 1 - .../types/GetCommentsRequestOrderDirection.js | 1 - .../comment/types/GetCommentsResponse.d.ts | 1 - .../comment/types/GetCommentsResponse.js | 1 - .../types/GetCommentsResponseResultsItem.d.ts | 2 - .../types/GetCommentsResponseResultsItem.js | 2 - ...GetCommentsResponseResultsItemAddress.d.ts | 1 - .../GetCommentsResponseResultsItemAddress.js | 1 - ...ommentsResponseResultsItemAddressRole.d.ts | 1 - ...tCommentsResponseResultsItemAddressRole.js | 1 - ...ommentsResponseResultsItemAddressUser.d.ts | 1 - ...tCommentsResponseResultsItemAddressUser.js | 1 - ...sResponseResultsItemAddressUserApiKey.d.ts | 19 + ...ntsResponseResultsItemAddressUserApiKey.js | 24 + ...mAddressUserEmailNotificationInterval.d.ts | 1 - ...temAddressUserEmailNotificationInterval.js | 1 - ...ResponseResultsItemAddressUserProfile.d.ts | 1 - ...tsResponseResultsItemAddressUserProfile.js | 1 - ...ItemAddressUserProfileBackgroundImage.d.ts | 1 - ...tsItemAddressUserProfileBackgroundImage.js | 1 - ...ResultsItemAddressUserProfileTagsItem.d.ts | 1 - ...seResultsItemAddressUserProfileTagsItem.js | 1 - ...ntsResponseResultsItemAddressWalletId.d.ts | 1 - ...mentsResponseResultsItemAddressWalletId.js | 1 - ...esultsItemCommentVersionHistoriesItem.d.ts | 1 - ...eResultsItemCommentVersionHistoriesItem.js | 1 - ...ommentsResponseResultsItemDiscordMeta.d.ts | 1 - ...tCommentsResponseResultsItemDiscordMeta.js | 1 - ...ntsResponseResultsItemDiscordMetaUser.d.ts | 1 - ...mentsResponseResultsItemDiscordMetaUser.js | 1 - ...etCommentsResponseResultsItemReaction.d.ts | 1 - .../GetCommentsResponseResultsItemReaction.js | 1 - ...ntsResponseResultsItemReactionAddress.d.ts | 1 - ...mentsResponseResultsItemReactionAddress.js | 1 - ...esponseResultsItemReactionAddressRole.d.ts | 1 - ...sResponseResultsItemReactionAddressRole.js | 1 - ...esponseResultsItemReactionAddressUser.d.ts | 1 - ...sResponseResultsItemReactionAddressUser.js | 1 - ...eResultsItemReactionAddressUserApiKey.d.ts | 19 + ...nseResultsItemReactionAddressUserApiKey.js | 24 + ...nAddressUserEmailNotificationInterval.d.ts | 1 - ...ionAddressUserEmailNotificationInterval.js | 1 - ...ResultsItemReactionAddressUserProfile.d.ts | 1 - ...seResultsItemReactionAddressUserProfile.js | 1 - ...tionAddressUserProfileBackgroundImage.d.ts | 1 - ...actionAddressUserProfileBackgroundImage.js | 1 - ...temReactionAddressUserProfileTagsItem.d.ts | 1 - ...sItemReactionAddressUserProfileTagsItem.js | 1 - ...nseResultsItemReactionAddressWalletId.d.ts | 1 - ...ponseResultsItemReactionAddressWalletId.js | 1 - .../GetCommentsResponseResultsItemSearch.d.ts | 1 - .../GetCommentsResponseResultsItemSearch.js | 1 - .../GetCommentsResponseResultsItemThread.d.ts | 12 +- .../GetCommentsResponseResultsItemThread.js | 12 +- ...mentsResponseResultsItemThreadAddress.d.ts | 1 - ...ommentsResponseResultsItemThreadAddress.js | 1 - ...sResponseResultsItemThreadAddressRole.d.ts | 1 - ...ntsResponseResultsItemThreadAddressRole.js | 1 - ...sResponseResultsItemThreadAddressUser.d.ts | 1 - ...ntsResponseResultsItemThreadAddressUser.js | 1 - ...nseResultsItemThreadAddressUserApiKey.d.ts | 19 + ...ponseResultsItemThreadAddressUserApiKey.js | 24 + ...dAddressUserEmailNotificationInterval.d.ts | 1 - ...eadAddressUserEmailNotificationInterval.js | 1 - ...seResultsItemThreadAddressUserProfile.d.ts | 1 - ...onseResultsItemThreadAddressUserProfile.js | 1 - ...readAddressUserProfileBackgroundImage.d.ts | 1 - ...ThreadAddressUserProfileBackgroundImage.js | 1 - ...sItemThreadAddressUserProfileTagsItem.d.ts | 1 - ...ltsItemThreadAddressUserProfileTagsItem.js | 1 - ...ponseResultsItemThreadAddressWalletId.d.ts | 1 - ...esponseResultsItemThreadAddressWalletId.js | 1 - ...nseResultsItemThreadCollaboratorsItem.d.ts | 1 - ...ponseResultsItemThreadCollaboratorsItem.js | 1 - ...esultsItemThreadCollaboratorsItemRole.d.ts | 1 - ...eResultsItemThreadCollaboratorsItemRole.js | 1 - ...esultsItemThreadCollaboratorsItemUser.d.ts | 1 - ...eResultsItemThreadCollaboratorsItemUser.js | 1 - ...ItemThreadCollaboratorsItemUserApiKey.d.ts | 19 + ...tsItemThreadCollaboratorsItemUserApiKey.js | 24 + ...torsItemUserEmailNotificationInterval.d.ts | 1 - ...ratorsItemUserEmailNotificationInterval.js | 1 - ...temThreadCollaboratorsItemUserProfile.d.ts | 1 - ...sItemThreadCollaboratorsItemUserProfile.js | 1 - ...oratorsItemUserProfileBackgroundImage.d.ts | 1 - ...aboratorsItemUserProfileBackgroundImage.js | 1 - ...dCollaboratorsItemUserProfileTagsItem.d.ts | 1 - ...eadCollaboratorsItemUserProfileTagsItem.js | 1 - ...tsItemThreadCollaboratorsItemWalletId.d.ts | 1 - ...ultsItemThreadCollaboratorsItemWalletId.js | 1 - ...sResponseResultsItemThreadDiscordMeta.d.ts | 1 - ...ntsResponseResultsItemThreadDiscordMeta.js | 1 - ...ponseResultsItemThreadDiscordMetaUser.d.ts | 1 - ...esponseResultsItemThreadDiscordMetaUser.js | 1 - ...ntsResponseResultsItemThreadLinksItem.d.ts | 1 - ...mentsResponseResultsItemThreadLinksItem.js | 1 - ...ponseResultsItemThreadLinksItemSource.d.ts | 1 - ...esponseResultsItemThreadLinksItemSource.js | 1 - ...esponseResultsItemThreadReactionsItem.d.ts | 1 - ...sResponseResultsItemThreadReactionsItem.js | 1 - ...ResultsItemThreadReactionsItemAddress.d.ts | 1 - ...seResultsItemThreadReactionsItemAddress.js | 1 - ...ltsItemThreadReactionsItemAddressRole.d.ts | 1 - ...sultsItemThreadReactionsItemAddressRole.js | 1 - ...ltsItemThreadReactionsItemAddressUser.d.ts | 1 - ...sultsItemThreadReactionsItemAddressUser.js | 1 - ...mThreadReactionsItemAddressUserApiKey.d.ts | 19 + ...temThreadReactionsItemAddressUserApiKey.js | 24 + ...mAddressUserEmailNotificationInterval.d.ts | 1 - ...temAddressUserEmailNotificationInterval.js | 1 - ...ThreadReactionsItemAddressUserProfile.d.ts | 1 - ...emThreadReactionsItemAddressUserProfile.js | 1 - ...ItemAddressUserProfileBackgroundImage.d.ts | 1 - ...nsItemAddressUserProfileBackgroundImage.js | 1 - ...actionsItemAddressUserProfileTagsItem.d.ts | 1 - ...ReactionsItemAddressUserProfileTagsItem.js | 1 - ...temThreadReactionsItemAddressWalletId.d.ts | 1 - ...sItemThreadReactionsItemAddressWalletId.js | 1 - ...mmentsResponseResultsItemThreadSearch.d.ts | 1 - ...CommentsResponseResultsItemThreadSearch.js | 1 - ...sItemThreadThreadVersionHistoriesItem.d.ts | 1 - ...ltsItemThreadThreadVersionHistoriesItem.js | 1 - ...ommentsResponseResultsItemThreadTopic.d.ts | 1 - ...tCommentsResponseResultsItemThreadTopic.js | 1 - ...sultsItemThreadTopicContestTopicsItem.d.ts | 1 - ...ResultsItemThreadTopicContestTopicsItem.js | 1 - ...eResultsItemThreadTopicWeightedVoting.d.ts | 1 - ...nseResultsItemThreadTopicWeightedVoting.js | 1 - .../comment/types/UpdateCommentResponse.d.ts | 2 - .../comment/types/UpdateCommentResponse.js | 2 - .../types/UpdateCommentResponseAddress.d.ts | 1 - .../types/UpdateCommentResponseAddress.js | 1 - .../UpdateCommentResponseAddressRole.d.ts | 1 - .../types/UpdateCommentResponseAddressRole.js | 1 - .../UpdateCommentResponseAddressUser.d.ts | 1 - .../types/UpdateCommentResponseAddressUser.js | 1 - ...pdateCommentResponseAddressUserApiKey.d.ts | 19 + .../UpdateCommentResponseAddressUserApiKey.js | 25 + ...eAddressUserEmailNotificationInterval.d.ts | 1 - ...nseAddressUserEmailNotificationInterval.js | 1 - ...dateCommentResponseAddressUserProfile.d.ts | 1 - ...UpdateCommentResponseAddressUserProfile.js | 1 - ...onseAddressUserProfileBackgroundImage.d.ts | 1 - ...sponseAddressUserProfileBackgroundImage.js | 1 - ...entResponseAddressUserProfileTagsItem.d.ts | 1 - ...mmentResponseAddressUserProfileTagsItem.js | 1 - .../UpdateCommentResponseAddressWalletId.d.ts | 1 - .../UpdateCommentResponseAddressWalletId.js | 1 - ...ntResponseCommentVersionHistoriesItem.d.ts | 1 - ...mentResponseCommentVersionHistoriesItem.js | 1 - .../UpdateCommentResponseDiscordMeta.d.ts | 1 - .../types/UpdateCommentResponseDiscordMeta.js | 1 - .../UpdateCommentResponseDiscordMetaUser.d.ts | 1 - .../UpdateCommentResponseDiscordMetaUser.js | 1 - .../types/UpdateCommentResponseReaction.d.ts | 1 - .../types/UpdateCommentResponseReaction.js | 1 - .../UpdateCommentResponseReactionAddress.d.ts | 1 - .../UpdateCommentResponseReactionAddress.js | 1 - ...ateCommentResponseReactionAddressRole.d.ts | 1 - ...pdateCommentResponseReactionAddressRole.js | 1 - ...ateCommentResponseReactionAddressUser.d.ts | 1 - ...pdateCommentResponseReactionAddressUser.js | 1 - ...mentResponseReactionAddressUserApiKey.d.ts | 19 + ...ommentResponseReactionAddressUserApiKey.js | 24 + ...nAddressUserEmailNotificationInterval.d.ts | 1 - ...ionAddressUserEmailNotificationInterval.js | 1 - ...entResponseReactionAddressUserProfile.d.ts | 1 - ...mmentResponseReactionAddressUserProfile.js | 1 - ...tionAddressUserProfileBackgroundImage.d.ts | 1 - ...actionAddressUserProfileBackgroundImage.js | 1 - ...nseReactionAddressUserProfileTagsItem.d.ts | 1 - ...ponseReactionAddressUserProfileTagsItem.js | 1 - ...ommentResponseReactionAddressWalletId.d.ts | 1 - ...eCommentResponseReactionAddressWalletId.js | 1 - .../types/UpdateCommentResponseSearch.d.ts | 1 - .../types/UpdateCommentResponseSearch.js | 1 - .../types/UpdateCommentResponseThread.d.ts | 12 +- .../types/UpdateCommentResponseThread.js | 12 +- .../UpdateCommentResponseThreadAddress.d.ts | 1 - .../UpdateCommentResponseThreadAddress.js | 1 - ...pdateCommentResponseThreadAddressRole.d.ts | 1 - .../UpdateCommentResponseThreadAddressRole.js | 1 - ...pdateCommentResponseThreadAddressUser.d.ts | 1 - .../UpdateCommentResponseThreadAddressUser.js | 1 - ...ommentResponseThreadAddressUserApiKey.d.ts | 19 + ...eCommentResponseThreadAddressUserApiKey.js | 24 + ...dAddressUserEmailNotificationInterval.d.ts | 1 - ...eadAddressUserEmailNotificationInterval.js | 1 - ...mmentResponseThreadAddressUserProfile.d.ts | 1 - ...CommentResponseThreadAddressUserProfile.js | 1 - ...readAddressUserProfileBackgroundImage.d.ts | 1 - ...ThreadAddressUserProfileBackgroundImage.js | 1 - ...ponseThreadAddressUserProfileTagsItem.d.ts | 1 - ...esponseThreadAddressUserProfileTagsItem.js | 1 - ...eCommentResponseThreadAddressWalletId.d.ts | 1 - ...ateCommentResponseThreadAddressWalletId.js | 1 - ...ommentResponseThreadCollaboratorsItem.d.ts | 1 - ...eCommentResponseThreadCollaboratorsItem.js | 1 - ...ntResponseThreadCollaboratorsItemRole.d.ts | 1 - ...mentResponseThreadCollaboratorsItemRole.js | 1 - ...ntResponseThreadCollaboratorsItemUser.d.ts | 1 - ...mentResponseThreadCollaboratorsItemUser.js | 1 - ...onseThreadCollaboratorsItemUserApiKey.d.ts | 19 + ...sponseThreadCollaboratorsItemUserApiKey.js | 24 + ...torsItemUserEmailNotificationInterval.d.ts | 1 - ...ratorsItemUserEmailNotificationInterval.js | 1 - ...nseThreadCollaboratorsItemUserProfile.d.ts | 1 - ...ponseThreadCollaboratorsItemUserProfile.js | 1 - ...oratorsItemUserProfileBackgroundImage.d.ts | 1 - ...aboratorsItemUserProfileBackgroundImage.js | 1 - ...dCollaboratorsItemUserProfileTagsItem.d.ts | 1 - ...eadCollaboratorsItemUserProfileTagsItem.js | 1 - ...sponseThreadCollaboratorsItemWalletId.d.ts | 1 - ...ResponseThreadCollaboratorsItemWalletId.js | 1 - ...pdateCommentResponseThreadDiscordMeta.d.ts | 1 - .../UpdateCommentResponseThreadDiscordMeta.js | 1 - ...eCommentResponseThreadDiscordMetaUser.d.ts | 1 - ...ateCommentResponseThreadDiscordMetaUser.js | 1 - .../UpdateCommentResponseThreadLinksItem.d.ts | 1 - .../UpdateCommentResponseThreadLinksItem.js | 1 - ...eCommentResponseThreadLinksItemSource.d.ts | 1 - ...ateCommentResponseThreadLinksItemSource.js | 1 - ...ateCommentResponseThreadReactionsItem.d.ts | 1 - ...pdateCommentResponseThreadReactionsItem.js | 1 - ...entResponseThreadReactionsItemAddress.d.ts | 1 - ...mmentResponseThreadReactionsItemAddress.js | 1 - ...esponseThreadReactionsItemAddressRole.d.ts | 1 - ...tResponseThreadReactionsItemAddressRole.js | 1 - ...esponseThreadReactionsItemAddressUser.d.ts | 1 - ...tResponseThreadReactionsItemAddressUser.js | 1 - ...eThreadReactionsItemAddressUserApiKey.d.ts | 19 + ...nseThreadReactionsItemAddressUserApiKey.js | 24 + ...mAddressUserEmailNotificationInterval.d.ts | 1 - ...temAddressUserEmailNotificationInterval.js | 1 - ...ThreadReactionsItemAddressUserProfile.d.ts | 1 - ...seThreadReactionsItemAddressUserProfile.js | 1 - ...ItemAddressUserProfileBackgroundImage.d.ts | 1 - ...nsItemAddressUserProfileBackgroundImage.js | 1 - ...actionsItemAddressUserProfileTagsItem.d.ts | 1 - ...ReactionsItemAddressUserProfileTagsItem.js | 1 - ...nseThreadReactionsItemAddressWalletId.d.ts | 1 - ...ponseThreadReactionsItemAddressWalletId.js | 1 - .../UpdateCommentResponseThreadSearch.d.ts | 1 - .../UpdateCommentResponseThreadSearch.js | 1 - ...ponseThreadThreadVersionHistoriesItem.d.ts | 1 - ...esponseThreadThreadVersionHistoriesItem.js | 1 - .../UpdateCommentResponseThreadTopic.d.ts | 1 - .../types/UpdateCommentResponseThreadTopic.js | 1 - ...tResponseThreadTopicContestTopicsItem.d.ts | 1 - ...entResponseThreadTopicContestTopicsItem.js | 1 - ...mentResponseThreadTopicWeightedVoting.d.ts | 1 - ...ommentResponseThreadTopicWeightedVoting.js | 1 - .../requests/CreateCommunityRequest.d.ts | 1 - .../client/requests/CreateCommunityRequest.js | 1 - .../client/requests/CreateGroupRequest.d.ts | 1 - .../client/requests/CreateGroupRequest.js | 1 - .../client/requests/CreateTopicRequest.d.ts | 1 - .../client/requests/CreateTopicRequest.js | 1 - .../client/requests/DeleteGroupRequest.d.ts | 1 - .../client/requests/DeleteGroupRequest.js | 1 - .../client/requests/DeleteTopicRequest.d.ts | 1 - .../client/requests/DeleteTopicRequest.js | 1 - .../client/requests/JoinCommunityRequest.d.ts | 15 + .../client/requests/JoinCommunityRequest.js | 10 + .../requests/UpdateCommunityRequest.d.ts | 1 - .../client/requests/UpdateCommunityRequest.js | 1 - .../client/requests/UpdateGroupRequest.d.ts | 1 - .../client/requests/UpdateGroupRequest.js | 1 - .../client/requests/UpdateTopicRequest.d.ts | 1 - .../client/requests/UpdateTopicRequest.js | 1 - .../types/CreateCommunityRequestBase.d.ts | 1 - .../types/CreateCommunityRequestBase.js | 1 - .../types/CreateCommunityRequestType.d.ts | 1 - .../types/CreateCommunityRequestType.js | 1 - .../types/CreateCommunityResponse.d.ts | 1 - .../types/CreateCommunityResponse.js | 1 - .../CreateCommunityResponseCommunity.d.ts | 1 - .../types/CreateCommunityResponseCommunity.js | 1 - ...mmunityResponseCommunityAddressesItem.d.ts | 1 - ...CommunityResponseCommunityAddressesItem.js | 1 - ...ityResponseCommunityAddressesItemRole.d.ts | 1 - ...unityResponseCommunityAddressesItemRole.js | 1 - ...ityResponseCommunityAddressesItemUser.d.ts | 1 - ...unityResponseCommunityAddressesItemUser.js | 1 - ...ponseCommunityAddressesItemUserApiKey.d.ts | 19 + ...esponseCommunityAddressesItemUserApiKey.js | 24 + ...ssesItemUserEmailNotificationInterval.d.ts | 1 - ...ressesItemUserEmailNotificationInterval.js | 1 - ...onseCommunityAddressesItemUserProfile.d.ts | 1 - ...sponseCommunityAddressesItemUserProfile.js | 1 - ...dressesItemUserProfileBackgroundImage.d.ts | 1 - ...AddressesItemUserProfileBackgroundImage.js | 1 - ...unityAddressesItemUserProfileTagsItem.d.ts | 1 - ...mmunityAddressesItemUserProfileTagsItem.js | 1 - ...esponseCommunityAddressesItemWalletId.d.ts | 1 - ...yResponseCommunityAddressesItemWalletId.js | 1 - .../CreateCommunityResponseCommunityBase.d.ts | 1 - .../CreateCommunityResponseCommunityBase.js | 1 - ...teCommunityResponseCommunityChainNode.d.ts | 1 - ...eateCommunityResponseCommunityChainNode.js | 1 - ...ResponseCommunityChainNodeBalanceType.d.ts | 1 - ...tyResponseCommunityChainNodeBalanceType.js | 1 - ...sponseCommunityChainNodeContractsItem.d.ts | 1 - ...ResponseCommunityChainNodeContractsItem.js | 1 - ...nseCommunityChainNodeCosmosGovVersion.d.ts | 1 - ...ponseCommunityChainNodeCosmosGovVersion.js | 1 - ...unityResponseCommunityChainNodeHealth.d.ts | 1 - ...mmunityResponseCommunityChainNodeHealth.js | 1 - ...yResponseCommunityCommunityStakesItem.d.ts | 1 - ...ityResponseCommunityCommunityStakesItem.js | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...ommunityStakesItemStakeTransactionsItem.js | 1 - ...emStakeTransactionsItemStakeDirection.d.ts | 1 - ...ItemStakeTransactionsItemStakeDirection.js | 1 - ...ityResponseCommunityCommunityTagsItem.d.ts | 1 - ...unityResponseCommunityCommunityTagsItem.js | 1 - ...ResponseCommunityCommunityTagsItemTag.d.ts | 1 - ...tyResponseCommunityCommunityTagsItemTag.js | 1 - ...yResponseCommunityContestManagersItem.d.ts | 1 - ...ityResponseCommunityContestManagersItem.js | 1 - ...munityContestManagersItemContestsItem.d.ts | 1 - ...ommunityContestManagersItemContestsItem.js | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...testManagersItemContestsItemActionsItem.js | 1 - ...gersItemContestsItemActionsItemAction.d.ts | 1 - ...nagersItemContestsItemActionsItemAction.js | 1 - ...testManagersItemContestsItemScoreItem.d.ts | 1 - ...ontestManagersItemContestsItemScoreItem.js | 1 - ...ommunityContestManagersItemTopicsItem.d.ts | 1 - ...eCommunityContestManagersItemTopicsItem.js | 1 - ...nagersItemTopicsItemContestTopicsItem.d.ts | 1 - ...ManagersItemTopicsItemContestTopicsItem.js | 1 - ...tManagersItemTopicsItemWeightedVoting.d.ts | 1 - ...estManagersItemTopicsItemWeightedVoting.js | 1 - ...CommunityResponseCommunityDefaultPage.d.ts | 1 - ...teCommunityResponseCommunityDefaultPage.js | 1 - ...eCommunityResponseCommunityGroupsItem.d.ts | 1 - ...ateCommunityResponseCommunityGroupsItem.js | 1 - ...tyResponseCommunityGroupsItemMetadata.d.ts | 1 - ...nityResponseCommunityGroupsItemMetadata.js | 1 - ...seCommunityGroupsItemRequirementsItem.d.ts | 3 - ...onseCommunityGroupsItemRequirementsItem.js | 1 - ...munityGroupsItemRequirementsItemAllow.d.ts | 1 - ...ommunityGroupsItemRequirementsItemAllow.js | 1 - ...tyGroupsItemRequirementsItemAllowData.d.ts | 1 - ...nityGroupsItemRequirementsItemAllowData.js | 1 - ...tyGroupsItemRequirementsItemThreshold.d.ts | 1 - ...nityGroupsItemRequirementsItemThreshold.js | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...GroupsItemRequirementsItemThresholdData.js | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...ItemRequirementsItemThresholdDataSource.js | 1 - ...equirementsItemThresholdDataSourceOne.d.ts | 1 - ...mRequirementsItemThresholdDataSourceOne.js | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...equirementsItemThresholdDataSourceThree.js | 1 - ...temThresholdDataSourceThreeSourceType.d.ts | 1 - ...sItemThresholdDataSourceThreeSourceType.js | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...uirementsItemThresholdDataSourceTokenId.js | 1 - ...mThresholdDataSourceTokenIdSourceType.d.ts | 1 - ...temThresholdDataSourceTokenIdSourceType.js | 1 - ...ntsItemThresholdDataSourceTokenSymbol.d.ts | 1 - ...mentsItemThresholdDataSourceTokenSymbol.js | 1 - ...CommunityResponseCommunityHasHomepage.d.ts | 1 - ...teCommunityResponseCommunityHasHomepage.js | 1 - ...unityResponseCommunitySocialLinksItem.d.ts | 1 - ...mmunityResponseCommunitySocialLinksItem.js | 1 - ...CreateCommunityResponseCommunityTerms.d.ts | 1 - .../CreateCommunityResponseCommunityTerms.js | 1 - ...teCommunityResponseCommunityTermsZero.d.ts | 1 - ...eateCommunityResponseCommunityTermsZero.js | 1 - ...eCommunityResponseCommunityTopicsItem.d.ts | 1 - ...ateCommunityResponseCommunityTopicsItem.js | 1 - ...eCommunityTopicsItemContestTopicsItem.d.ts | 1 - ...nseCommunityTopicsItemContestTopicsItem.js | 1 - ...onseCommunityTopicsItemWeightedVoting.d.ts | 1 - ...sponseCommunityTopicsItemWeightedVoting.js | 1 - .../CreateCommunityResponseCommunityType.d.ts | 1 - .../CreateCommunityResponseCommunityType.js | 1 - .../types/CreateGroupRequestMetadata.d.ts | 1 - .../types/CreateGroupRequestMetadata.js | 1 - .../CreateGroupRequestRequirementsItem.d.ts | 3 - .../CreateGroupRequestRequirementsItem.js | 1 - ...eateGroupRequestRequirementsItemAllow.d.ts | 1 - ...CreateGroupRequestRequirementsItemAllow.js | 1 - ...GroupRequestRequirementsItemAllowData.d.ts | 1 - ...teGroupRequestRequirementsItemAllowData.js | 1 - ...GroupRequestRequirementsItemThreshold.d.ts | 1 - ...teGroupRequestRequirementsItemThreshold.js | 1 - ...pRequestRequirementsItemThresholdData.d.ts | 1 - ...oupRequestRequirementsItemThresholdData.js | 1 - ...stRequirementsItemThresholdDataSource.d.ts | 1 - ...uestRequirementsItemThresholdDataSource.js | 1 - ...equirementsItemThresholdDataSourceOne.d.ts | 1 - ...tRequirementsItemThresholdDataSourceOne.js | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...equirementsItemThresholdDataSourceThree.js | 1 - ...temThresholdDataSourceThreeSourceType.d.ts | 1 - ...sItemThresholdDataSourceThreeSourceType.js | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...uirementsItemThresholdDataSourceTokenId.js | 1 - ...mThresholdDataSourceTokenIdSourceType.d.ts | 1 - ...temThresholdDataSourceTokenIdSourceType.js | 1 - ...ntsItemThresholdDataSourceTokenSymbol.d.ts | 1 - ...mentsItemThresholdDataSourceTokenSymbol.js | 1 - .../community/types/CreateGroupResponse.d.ts | 1 - .../community/types/CreateGroupResponse.js | 1 - .../CreateGroupResponseAddressesItem.d.ts | 1 - .../types/CreateGroupResponseAddressesItem.js | 1 - .../CreateGroupResponseAddressesItemRole.d.ts | 1 - .../CreateGroupResponseAddressesItemRole.js | 1 - .../CreateGroupResponseAddressesItemUser.d.ts | 1 - .../CreateGroupResponseAddressesItemUser.js | 1 - ...eGroupResponseAddressesItemUserApiKey.d.ts | 19 + ...ateGroupResponseAddressesItemUserApiKey.js | 24 + ...ssesItemUserEmailNotificationInterval.d.ts | 1 - ...ressesItemUserEmailNotificationInterval.js | 1 - ...GroupResponseAddressesItemUserProfile.d.ts | 1 - ...teGroupResponseAddressesItemUserProfile.js | 1 - ...dressesItemUserProfileBackgroundImage.d.ts | 1 - ...AddressesItemUserProfileBackgroundImage.js | 1 - ...ponseAddressesItemUserProfileTagsItem.d.ts | 1 - ...esponseAddressesItemUserProfileTagsItem.js | 1 - ...ateGroupResponseAddressesItemWalletId.d.ts | 1 - ...reateGroupResponseAddressesItemWalletId.js | 1 - .../types/CreateGroupResponseBase.d.ts | 1 - .../types/CreateGroupResponseBase.js | 1 - .../types/CreateGroupResponseChainNode.d.ts | 1 - .../types/CreateGroupResponseChainNode.js | 1 - ...eateGroupResponseChainNodeBalanceType.d.ts | 1 - ...CreateGroupResponseChainNodeBalanceType.js | 1 - ...teGroupResponseChainNodeContractsItem.d.ts | 1 - ...eateGroupResponseChainNodeContractsItem.js | 1 - ...roupResponseChainNodeCosmosGovVersion.d.ts | 1 - ...eGroupResponseChainNodeCosmosGovVersion.js | 1 - .../CreateGroupResponseChainNodeHealth.d.ts | 1 - .../CreateGroupResponseChainNodeHealth.js | 1 - ...reateGroupResponseCommunityStakesItem.d.ts | 1 - .../CreateGroupResponseCommunityStakesItem.js | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...ommunityStakesItemStakeTransactionsItem.js | 1 - ...emStakeTransactionsItemStakeDirection.d.ts | 1 - ...ItemStakeTransactionsItemStakeDirection.js | 1 - .../CreateGroupResponseCommunityTagsItem.d.ts | 1 - .../CreateGroupResponseCommunityTagsItem.js | 1 - ...eateGroupResponseCommunityTagsItemTag.d.ts | 1 - ...CreateGroupResponseCommunityTagsItemTag.js | 1 - ...reateGroupResponseContestManagersItem.d.ts | 1 - .../CreateGroupResponseContestManagersItem.js | 1 - ...sponseContestManagersItemContestsItem.d.ts | 1 - ...ResponseContestManagersItemContestsItem.js | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...testManagersItemContestsItemActionsItem.js | 1 - ...gersItemContestsItemActionsItemAction.d.ts | 1 - ...nagersItemContestsItemActionsItemAction.js | 1 - ...testManagersItemContestsItemScoreItem.d.ts | 1 - ...ontestManagersItemContestsItemScoreItem.js | 1 - ...ResponseContestManagersItemTopicsItem.d.ts | 1 - ...upResponseContestManagersItemTopicsItem.js | 1 - ...nagersItemTopicsItemContestTopicsItem.d.ts | 1 - ...ManagersItemTopicsItemContestTopicsItem.js | 1 - ...tManagersItemTopicsItemWeightedVoting.d.ts | 1 - ...estManagersItemTopicsItemWeightedVoting.js | 1 - .../types/CreateGroupResponseDefaultPage.d.ts | 1 - .../types/CreateGroupResponseDefaultPage.js | 1 - .../types/CreateGroupResponseGroupsItem.d.ts | 1 - .../types/CreateGroupResponseGroupsItem.js | 1 - ...CreateGroupResponseGroupsItemMetadata.d.ts | 1 - .../CreateGroupResponseGroupsItemMetadata.js | 1 - ...oupResponseGroupsItemRequirementsItem.d.ts | 3 - ...GroupResponseGroupsItemRequirementsItem.js | 1 - ...sponseGroupsItemRequirementsItemAllow.d.ts | 1 - ...ResponseGroupsItemRequirementsItemAllow.js | 1 - ...seGroupsItemRequirementsItemAllowData.d.ts | 1 - ...onseGroupsItemRequirementsItemAllowData.js | 1 - ...seGroupsItemRequirementsItemThreshold.d.ts | 1 - ...onseGroupsItemRequirementsItemThreshold.js | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...GroupsItemRequirementsItemThresholdData.js | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...ItemRequirementsItemThresholdDataSource.js | 1 - ...equirementsItemThresholdDataSourceOne.d.ts | 1 - ...mRequirementsItemThresholdDataSourceOne.js | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...equirementsItemThresholdDataSourceThree.js | 1 - ...temThresholdDataSourceThreeSourceType.d.ts | 1 - ...sItemThresholdDataSourceThreeSourceType.js | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...uirementsItemThresholdDataSourceTokenId.js | 1 - ...mThresholdDataSourceTokenIdSourceType.d.ts | 1 - ...temThresholdDataSourceTokenIdSourceType.js | 1 - ...ntsItemThresholdDataSourceTokenSymbol.d.ts | 1 - ...mentsItemThresholdDataSourceTokenSymbol.js | 1 - .../types/CreateGroupResponseHasHomepage.d.ts | 1 - .../types/CreateGroupResponseHasHomepage.js | 1 - .../CreateGroupResponseSocialLinksItem.d.ts | 1 - .../CreateGroupResponseSocialLinksItem.js | 1 - .../types/CreateGroupResponseTerms.d.ts | 1 - .../types/CreateGroupResponseTerms.js | 1 - .../types/CreateGroupResponseTermsZero.d.ts | 1 - .../types/CreateGroupResponseTermsZero.js | 1 - .../types/CreateGroupResponseTopicsItem.d.ts | 1 - .../types/CreateGroupResponseTopicsItem.js | 1 - ...upResponseTopicsItemContestTopicsItem.d.ts | 1 - ...roupResponseTopicsItemContestTopicsItem.js | 1 - ...GroupResponseTopicsItemWeightedVoting.d.ts | 1 - ...teGroupResponseTopicsItemWeightedVoting.js | 1 - .../types/CreateGroupResponseType.d.ts | 1 - .../types/CreateGroupResponseType.js | 1 - .../CreateTopicRequestWeightedVoting.d.ts | 1 - .../types/CreateTopicRequestWeightedVoting.js | 1 - .../community/types/CreateTopicResponse.d.ts | 1 - .../community/types/CreateTopicResponse.js | 1 - .../types/CreateTopicResponseTopic.d.ts | 1 - .../types/CreateTopicResponseTopic.js | 1 - ...teTopicResponseTopicContestTopicsItem.d.ts | 1 - ...eateTopicResponseTopicContestTopicsItem.js | 1 - ...reateTopicResponseTopicWeightedVoting.d.ts | 1 - .../CreateTopicResponseTopicWeightedVoting.js | 1 - .../community/types/DeleteGroupResponse.d.ts | 1 - .../community/types/DeleteGroupResponse.js | 1 - .../community/types/DeleteTopicResponse.d.ts | 1 - .../community/types/DeleteTopicResponse.js | 1 - .../types/GetCommunitiesRequestBase.d.ts | 1 - .../types/GetCommunitiesRequestBase.js | 1 - .../types/GetCommunitiesRequestNetwork.d.ts | 1 - .../types/GetCommunitiesRequestNetwork.js | 1 - .../types/GetCommunitiesRequestOrderBy.d.ts | 1 - .../types/GetCommunitiesRequestOrderBy.js | 1 - .../GetCommunitiesRequestOrderDirection.d.ts | 1 - .../GetCommunitiesRequestOrderDirection.js | 1 - .../GetCommunitiesRequestRelevanceBy.d.ts | 1 - .../types/GetCommunitiesRequestRelevanceBy.js | 1 - .../types/GetCommunitiesResponse.d.ts | 1 - .../community/types/GetCommunitiesResponse.js | 1 - .../GetCommunitiesResponseResultsItem.d.ts | 1 - .../GetCommunitiesResponseResultsItem.js | 1 - ...itiesResponseResultsItemAddressesItem.d.ts | 1 - ...unitiesResponseResultsItemAddressesItem.js | 1 - ...sResponseResultsItemAddressesItemRole.d.ts | 1 - ...iesResponseResultsItemAddressesItemRole.js | 1 - ...sResponseResultsItemAddressesItemUser.d.ts | 1 - ...iesResponseResultsItemAddressesItemUser.js | 1 - ...nseResultsItemAddressesItemUserApiKey.d.ts | 19 + ...ponseResultsItemAddressesItemUserApiKey.js | 24 + ...ssesItemUserEmailNotificationInterval.d.ts | 1 - ...ressesItemUserEmailNotificationInterval.js | 1 - ...seResultsItemAddressesItemUserProfile.d.ts | 1 - ...onseResultsItemAddressesItemUserProfile.js | 1 - ...dressesItemUserProfileBackgroundImage.d.ts | 1 - ...AddressesItemUserProfileBackgroundImage.js | 1 - ...sItemAddressesItemUserProfileTagsItem.d.ts | 1 - ...ltsItemAddressesItemUserProfileTagsItem.js | 1 - ...ponseResultsItemAddressesItemWalletId.d.ts | 1 - ...esponseResultsItemAddressesItemWalletId.js | 1 - ...GetCommunitiesResponseResultsItemBase.d.ts | 1 - .../GetCommunitiesResponseResultsItemBase.js | 1 - ...mmunitiesResponseResultsItemChainNode.d.ts | 1 - ...CommunitiesResponseResultsItemChainNode.js | 1 - ...sponseResultsItemChainNodeBalanceType.d.ts | 1 - ...ResponseResultsItemChainNodeBalanceType.js | 1 - ...onseResultsItemChainNodeContractsItem.d.ts | 1 - ...sponseResultsItemChainNodeContractsItem.js | 1 - ...eResultsItemChainNodeCosmosGovVersion.d.ts | 1 - ...nseResultsItemChainNodeCosmosGovVersion.js | 1 - ...iesResponseResultsItemChainNodeHealth.d.ts | 1 - ...itiesResponseResultsItemChainNodeHealth.js | 1 - ...esponseResultsItemCommunityStakesItem.d.ts | 1 - ...sResponseResultsItemCommunityStakesItem.js | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...ommunityStakesItemStakeTransactionsItem.js | 1 - ...emStakeTransactionsItemStakeDirection.d.ts | 1 - ...ItemStakeTransactionsItemStakeDirection.js | 1 - ...sResponseResultsItemCommunityTagsItem.d.ts | 1 - ...iesResponseResultsItemCommunityTagsItem.js | 1 - ...sponseResultsItemCommunityTagsItemTag.d.ts | 1 - ...ResponseResultsItemCommunityTagsItemTag.js | 1 - ...esponseResultsItemContestManagersItem.d.ts | 1 - ...sResponseResultsItemContestManagersItem.js | 1 - ...tsItemContestManagersItemContestsItem.d.ts | 1 - ...ultsItemContestManagersItemContestsItem.js | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...testManagersItemContestsItemActionsItem.js | 1 - ...gersItemContestsItemActionsItemAction.d.ts | 1 - ...nagersItemContestsItemActionsItemAction.js | 1 - ...testManagersItemContestsItemScoreItem.d.ts | 1 - ...ontestManagersItemContestsItemScoreItem.js | 1 - ...ultsItemContestManagersItemTopicsItem.d.ts | 1 - ...esultsItemContestManagersItemTopicsItem.js | 1 - ...nagersItemTopicsItemContestTopicsItem.d.ts | 1 - ...ManagersItemTopicsItemContestTopicsItem.js | 1 - ...tManagersItemTopicsItemWeightedVoting.d.ts | 1 - ...estManagersItemTopicsItemWeightedVoting.js | 1 - ...unitiesResponseResultsItemDefaultPage.d.ts | 1 - ...mmunitiesResponseResultsItemDefaultPage.js | 1 - ...munitiesResponseResultsItemGroupsItem.d.ts | 1 - ...ommunitiesResponseResultsItemGroupsItem.js | 1 - ...ResponseResultsItemGroupsItemMetadata.d.ts | 1 - ...esResponseResultsItemGroupsItemMetadata.js | 1 - ...ResultsItemGroupsItemRequirementsItem.d.ts | 3 - ...seResultsItemGroupsItemRequirementsItem.js | 1 - ...tsItemGroupsItemRequirementsItemAllow.d.ts | 1 - ...ultsItemGroupsItemRequirementsItemAllow.js | 1 - ...emGroupsItemRequirementsItemAllowData.d.ts | 1 - ...ItemGroupsItemRequirementsItemAllowData.js | 1 - ...emGroupsItemRequirementsItemThreshold.d.ts | 1 - ...ItemGroupsItemRequirementsItemThreshold.js | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...GroupsItemRequirementsItemThresholdData.js | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...ItemRequirementsItemThresholdDataSource.js | 1 - ...equirementsItemThresholdDataSourceOne.d.ts | 1 - ...mRequirementsItemThresholdDataSourceOne.js | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...equirementsItemThresholdDataSourceThree.js | 1 - ...temThresholdDataSourceThreeSourceType.d.ts | 1 - ...sItemThresholdDataSourceThreeSourceType.js | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...uirementsItemThresholdDataSourceTokenId.js | 1 - ...mThresholdDataSourceTokenIdSourceType.d.ts | 1 - ...temThresholdDataSourceTokenIdSourceType.js | 1 - ...ntsItemThresholdDataSourceTokenSymbol.d.ts | 1 - ...mentsItemThresholdDataSourceTokenSymbol.js | 1 - ...unitiesResponseResultsItemHasHomepage.d.ts | 1 - ...mmunitiesResponseResultsItemHasHomepage.js | 1 - ...iesResponseResultsItemSocialLinksItem.d.ts | 1 - ...itiesResponseResultsItemSocialLinksItem.js | 1 - ...etCommunitiesResponseResultsItemTerms.d.ts | 1 - .../GetCommunitiesResponseResultsItemTerms.js | 1 - ...mmunitiesResponseResultsItemTermsZero.d.ts | 1 - ...CommunitiesResponseResultsItemTermsZero.js | 1 - ...munitiesResponseResultsItemTopicsItem.d.ts | 1 - ...ommunitiesResponseResultsItemTopicsItem.js | 1 - ...esultsItemTopicsItemContestTopicsItem.d.ts | 1 - ...eResultsItemTopicsItemContestTopicsItem.js | 1 - ...seResultsItemTopicsItemWeightedVoting.d.ts | 1 - ...onseResultsItemTopicsItemWeightedVoting.js | 1 - ...GetCommunitiesResponseResultsItemType.d.ts | 1 - .../GetCommunitiesResponseResultsItemType.js | 1 - .../community/types/GetCommunityResponse.d.ts | 1 - .../community/types/GetCommunityResponse.js | 1 - .../types/GetCommunityResponseAddresses.d.ts | 1 - .../types/GetCommunityResponseAddresses.js | 1 - ...mmunityResponseAddressesAddressesItem.d.ts | 1 - ...CommunityResponseAddressesAddressesItem.js | 1 - ...ityResponseAddressesAddressesItemRole.d.ts | 1 - ...unityResponseAddressesAddressesItemRole.js | 1 - ...ityResponseAddressesAddressesItemUser.d.ts | 1 - ...unityResponseAddressesAddressesItemUser.js | 1 - ...ponseAddressesAddressesItemUserApiKey.d.ts | 19 + ...esponseAddressesAddressesItemUserApiKey.js | 24 + ...ssesItemUserEmailNotificationInterval.d.ts | 1 - ...ressesItemUserEmailNotificationInterval.js | 1 - ...onseAddressesAddressesItemUserProfile.d.ts | 1 - ...sponseAddressesAddressesItemUserProfile.js | 1 - ...dressesItemUserProfileBackgroundImage.d.ts | 1 - ...AddressesItemUserProfileBackgroundImage.js | 1 - ...essesAddressesItemUserProfileTagsItem.d.ts | 1 - ...dressesAddressesItemUserProfileTagsItem.js | 1 - ...esponseAddressesAddressesItemWalletId.d.ts | 1 - ...yResponseAddressesAddressesItemWalletId.js | 1 - ...ityResponseAddressesAdminsAndModsItem.d.ts | 1 - ...unityResponseAddressesAdminsAndModsItem.js | 1 - ...esponseAddressesAdminsAndModsItemRole.d.ts | 1 - ...yResponseAddressesAdminsAndModsItemRole.js | 1 - .../GetCommunityResponseAddressesBase.d.ts | 1 - .../GetCommunityResponseAddressesBase.js | 1 - ...etCommunityResponseAddressesChainNode.d.ts | 1 - .../GetCommunityResponseAddressesChainNode.js | 1 - ...ResponseAddressesChainNodeBalanceType.d.ts | 1 - ...tyResponseAddressesChainNodeBalanceType.js | 1 - ...sponseAddressesChainNodeContractsItem.d.ts | 1 - ...ResponseAddressesChainNodeContractsItem.js | 1 - ...nseAddressesChainNodeCosmosGovVersion.d.ts | 1 - ...ponseAddressesChainNodeCosmosGovVersion.js | 1 - ...unityResponseAddressesChainNodeHealth.d.ts | 1 - ...mmunityResponseAddressesChainNodeHealth.js | 1 - ...yResponseAddressesCommunityStakesItem.d.ts | 1 - ...ityResponseAddressesCommunityStakesItem.js | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...ommunityStakesItemStakeTransactionsItem.js | 1 - ...emStakeTransactionsItemStakeDirection.d.ts | 1 - ...ItemStakeTransactionsItemStakeDirection.js | 1 - ...ityResponseAddressesCommunityTagsItem.d.ts | 1 - ...unityResponseAddressesCommunityTagsItem.js | 1 - ...ResponseAddressesCommunityTagsItemTag.d.ts | 1 - ...tyResponseAddressesCommunityTagsItemTag.js | 1 - ...yResponseAddressesContestManagersItem.d.ts | 1 - ...ityResponseAddressesContestManagersItem.js | 1 - ...ressesContestManagersItemContestsItem.d.ts | 1 - ...ddressesContestManagersItemContestsItem.js | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...testManagersItemContestsItemActionsItem.js | 1 - ...gersItemContestsItemActionsItemAction.d.ts | 1 - ...nagersItemContestsItemActionsItemAction.js | 1 - ...testManagersItemContestsItemScoreItem.d.ts | 1 - ...ontestManagersItemContestsItemScoreItem.js | 1 - ...ddressesContestManagersItemTopicsItem.d.ts | 1 - ...eAddressesContestManagersItemTopicsItem.js | 1 - ...nagersItemTopicsItemContestTopicsItem.d.ts | 1 - ...ManagersItemTopicsItemContestTopicsItem.js | 1 - ...tManagersItemTopicsItemWeightedVoting.d.ts | 1 - ...estManagersItemTopicsItemWeightedVoting.js | 1 - ...CommunityResponseAddressesDefaultPage.d.ts | 1 - ...etCommunityResponseAddressesDefaultPage.js | 1 - ...tCommunityResponseAddressesGroupsItem.d.ts | 1 - ...GetCommunityResponseAddressesGroupsItem.js | 1 - ...tyResponseAddressesGroupsItemMetadata.d.ts | 1 - ...nityResponseAddressesGroupsItemMetadata.js | 1 - ...seAddressesGroupsItemRequirementsItem.d.ts | 3 - ...onseAddressesGroupsItemRequirementsItem.js | 1 - ...ressesGroupsItemRequirementsItemAllow.d.ts | 1 - ...ddressesGroupsItemRequirementsItemAllow.js | 1 - ...esGroupsItemRequirementsItemAllowData.d.ts | 1 - ...ssesGroupsItemRequirementsItemAllowData.js | 1 - ...esGroupsItemRequirementsItemThreshold.d.ts | 1 - ...ssesGroupsItemRequirementsItemThreshold.js | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...GroupsItemRequirementsItemThresholdData.js | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...ItemRequirementsItemThresholdDataSource.js | 1 - ...equirementsItemThresholdDataSourceOne.d.ts | 1 - ...mRequirementsItemThresholdDataSourceOne.js | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...equirementsItemThresholdDataSourceThree.js | 1 - ...temThresholdDataSourceThreeSourceType.d.ts | 1 - ...sItemThresholdDataSourceThreeSourceType.js | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...uirementsItemThresholdDataSourceTokenId.js | 1 - ...mThresholdDataSourceTokenIdSourceType.d.ts | 1 - ...temThresholdDataSourceTokenIdSourceType.js | 1 - ...ntsItemThresholdDataSourceTokenSymbol.d.ts | 1 - ...mentsItemThresholdDataSourceTokenSymbol.js | 1 - ...CommunityResponseAddressesHasHomepage.d.ts | 1 - ...etCommunityResponseAddressesHasHomepage.js | 1 - ...unityResponseAddressesSocialLinksItem.d.ts | 1 - ...mmunityResponseAddressesSocialLinksItem.js | 1 - .../GetCommunityResponseAddressesTerms.d.ts | 1 - .../GetCommunityResponseAddressesTerms.js | 1 - ...etCommunityResponseAddressesTermsZero.d.ts | 1 - .../GetCommunityResponseAddressesTermsZero.js | 1 - ...tCommunityResponseAddressesTopicsItem.d.ts | 1 - ...GetCommunityResponseAddressesTopicsItem.js | 1 - ...eAddressesTopicsItemContestTopicsItem.d.ts | 1 - ...nseAddressesTopicsItemContestTopicsItem.js | 1 - ...onseAddressesTopicsItemWeightedVoting.d.ts | 1 - ...sponseAddressesTopicsItemWeightedVoting.js | 1 - .../GetCommunityResponseAddressesType.d.ts | 1 - .../GetCommunityResponseAddressesType.js | 1 - .../types/GetMembersRequestMemberships.d.ts | 1 - .../types/GetMembersRequestMemberships.js | 1 - .../types/GetMembersRequestOrderBy.d.ts | 1 - .../types/GetMembersRequestOrderBy.js | 1 - .../GetMembersRequestOrderDirection.d.ts | 1 - .../types/GetMembersRequestOrderDirection.js | 1 - .../community/types/GetMembersResponse.d.ts | 1 - .../community/types/GetMembersResponse.js | 1 - .../types/GetMembersResponseResultsItem.d.ts | 1 - .../types/GetMembersResponseResultsItem.js | 1 - ...mbersResponseResultsItemAddressesItem.d.ts | 1 - ...MembersResponseResultsItemAddressesItem.js | 1 - .../types/JoinCommunityResponse.d.ts | 22 + .../community/types/JoinCommunityResponse.js | 23 + .../types/JoinCommunityResponseBase.d.ts | 13 + .../types/JoinCommunityResponseBase.js | 11 + .../types/JoinCommunityResponseWalletId.d.ts | 26 + .../types/JoinCommunityResponseWalletId.js | 19 + .../UpdateCommunityRequestAddressesItem.d.ts | 1 - .../UpdateCommunityRequestAddressesItem.js | 1 - ...dateCommunityRequestAddressesItemRole.d.ts | 1 - ...UpdateCommunityRequestAddressesItemRole.js | 1 - ...dateCommunityRequestAddressesItemUser.d.ts | 1 - ...UpdateCommunityRequestAddressesItemUser.js | 1 - ...mmunityRequestAddressesItemUserApiKey.d.ts | 19 + ...CommunityRequestAddressesItemUserApiKey.js | 24 + ...ssesItemUserEmailNotificationInterval.d.ts | 1 - ...ressesItemUserEmailNotificationInterval.js | 1 - ...munityRequestAddressesItemUserProfile.d.ts | 1 - ...ommunityRequestAddressesItemUserProfile.js | 1 - ...dressesItemUserProfileBackgroundImage.d.ts | 1 - ...AddressesItemUserProfileBackgroundImage.js | 1 - ...questAddressesItemUserProfileTagsItem.d.ts | 1 - ...RequestAddressesItemUserProfileTagsItem.js | 1 - ...CommunityRequestAddressesItemWalletId.d.ts | 1 - ...teCommunityRequestAddressesItemWalletId.js | 1 - .../types/UpdateCommunityRequestBase.d.ts | 1 - .../types/UpdateCommunityRequestBase.js | 1 - .../UpdateCommunityRequestChainNode.d.ts | 1 - .../types/UpdateCommunityRequestChainNode.js | 1 - ...eCommunityRequestChainNodeBalanceType.d.ts | 1 - ...ateCommunityRequestChainNodeBalanceType.js | 1 - ...ommunityRequestChainNodeContractsItem.d.ts | 1 - ...eCommunityRequestChainNodeContractsItem.js | 1 - ...unityRequestChainNodeCosmosGovVersion.d.ts | 1 - ...mmunityRequestChainNodeCosmosGovVersion.js | 1 - ...UpdateCommunityRequestChainNodeHealth.d.ts | 1 - .../UpdateCommunityRequestChainNodeHealth.js | 1 - ...teCommunityRequestCommunityStakesItem.d.ts | 1 - ...dateCommunityRequestCommunityStakesItem.js | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...ommunityStakesItemStakeTransactionsItem.js | 1 - ...emStakeTransactionsItemStakeDirection.d.ts | 1 - ...ItemStakeTransactionsItemStakeDirection.js | 1 - ...dateCommunityRequestCommunityTagsItem.d.ts | 1 - ...UpdateCommunityRequestCommunityTagsItem.js | 1 - ...eCommunityRequestCommunityTagsItemTag.d.ts | 1 - ...ateCommunityRequestCommunityTagsItemTag.js | 1 - ...teCommunityRequestContestManagersItem.d.ts | 1 - ...dateCommunityRequestContestManagersItem.js | 1 - ...equestContestManagersItemContestsItem.d.ts | 1 - ...yRequestContestManagersItemContestsItem.js | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...testManagersItemContestsItemActionsItem.js | 1 - ...gersItemContestsItemActionsItemAction.d.ts | 1 - ...nagersItemContestsItemActionsItemAction.js | 1 - ...testManagersItemContestsItemScoreItem.d.ts | 1 - ...ontestManagersItemContestsItemScoreItem.js | 1 - ...yRequestContestManagersItemTopicsItem.d.ts | 1 - ...ityRequestContestManagersItemTopicsItem.js | 1 - ...nagersItemTopicsItemContestTopicsItem.d.ts | 1 - ...ManagersItemTopicsItemContestTopicsItem.js | 1 - ...tManagersItemTopicsItemWeightedVoting.d.ts | 1 - ...estManagersItemTopicsItemWeightedVoting.js | 1 - .../UpdateCommunityRequestDefaultPage.d.ts | 1 - .../UpdateCommunityRequestDefaultPage.js | 1 - .../UpdateCommunityRequestGroupsItem.d.ts | 1 - .../types/UpdateCommunityRequestGroupsItem.js | 1 - ...ateCommunityRequestGroupsItemMetadata.d.ts | 1 - ...pdateCommunityRequestGroupsItemMetadata.js | 1 - ...nityRequestGroupsItemRequirementsItem.d.ts | 3 - ...munityRequestGroupsItemRequirementsItem.js | 1 - ...equestGroupsItemRequirementsItemAllow.d.ts | 1 - ...yRequestGroupsItemRequirementsItemAllow.js | 1 - ...stGroupsItemRequirementsItemAllowData.d.ts | 1 - ...uestGroupsItemRequirementsItemAllowData.js | 1 - ...stGroupsItemRequirementsItemThreshold.d.ts | 1 - ...uestGroupsItemRequirementsItemThreshold.js | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...GroupsItemRequirementsItemThresholdData.js | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...ItemRequirementsItemThresholdDataSource.js | 1 - ...equirementsItemThresholdDataSourceOne.d.ts | 1 - ...mRequirementsItemThresholdDataSourceOne.js | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...equirementsItemThresholdDataSourceThree.js | 1 - ...temThresholdDataSourceThreeSourceType.d.ts | 1 - ...sItemThresholdDataSourceThreeSourceType.js | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...uirementsItemThresholdDataSourceTokenId.js | 1 - ...mThresholdDataSourceTokenIdSourceType.d.ts | 1 - ...temThresholdDataSourceTokenIdSourceType.js | 1 - ...ntsItemThresholdDataSourceTokenSymbol.d.ts | 1 - ...mentsItemThresholdDataSourceTokenSymbol.js | 1 - .../UpdateCommunityRequestHasHomepage.d.ts | 1 - .../UpdateCommunityRequestHasHomepage.js | 1 - .../types/UpdateCommunityRequestSnapshot.d.ts | 1 - .../types/UpdateCommunityRequestSnapshot.js | 1 - ...UpdateCommunityRequestSocialLinksItem.d.ts | 1 - .../UpdateCommunityRequestSocialLinksItem.js | 1 - .../types/UpdateCommunityRequestTerms.d.ts | 1 - .../types/UpdateCommunityRequestTerms.js | 1 - .../UpdateCommunityRequestTermsZero.d.ts | 1 - .../types/UpdateCommunityRequestTermsZero.js | 1 - .../UpdateCommunityRequestTopicsItem.d.ts | 1 - .../types/UpdateCommunityRequestTopicsItem.js | 1 - ...ityRequestTopicsItemContestTopicsItem.d.ts | 1 - ...unityRequestTopicsItemContestTopicsItem.js | 1 - ...munityRequestTopicsItemWeightedVoting.d.ts | 1 - ...ommunityRequestTopicsItemWeightedVoting.js | 1 - .../types/UpdateCommunityRequestType.d.ts | 1 - .../types/UpdateCommunityRequestType.js | 1 - .../types/UpdateCommunityResponse.d.ts | 1 - .../types/UpdateCommunityResponse.js | 1 - .../UpdateCommunityResponseAddressesItem.d.ts | 1 - .../UpdateCommunityResponseAddressesItem.js | 1 - ...ateCommunityResponseAddressesItemRole.d.ts | 1 - ...pdateCommunityResponseAddressesItemRole.js | 1 - ...ateCommunityResponseAddressesItemUser.d.ts | 1 - ...pdateCommunityResponseAddressesItemUser.js | 1 - ...munityResponseAddressesItemUserApiKey.d.ts | 19 + ...ommunityResponseAddressesItemUserApiKey.js | 24 + ...ssesItemUserEmailNotificationInterval.d.ts | 1 - ...ressesItemUserEmailNotificationInterval.js | 1 - ...unityResponseAddressesItemUserProfile.d.ts | 1 - ...mmunityResponseAddressesItemUserProfile.js | 1 - ...dressesItemUserProfileBackgroundImage.d.ts | 1 - ...AddressesItemUserProfileBackgroundImage.js | 1 - ...ponseAddressesItemUserProfileTagsItem.d.ts | 1 - ...esponseAddressesItemUserProfileTagsItem.js | 1 - ...ommunityResponseAddressesItemWalletId.d.ts | 1 - ...eCommunityResponseAddressesItemWalletId.js | 1 - .../types/UpdateCommunityResponseBase.d.ts | 1 - .../types/UpdateCommunityResponseBase.js | 1 - .../UpdateCommunityResponseChainNode.d.ts | 1 - .../types/UpdateCommunityResponseChainNode.js | 1 - ...CommunityResponseChainNodeBalanceType.d.ts | 1 - ...teCommunityResponseChainNodeBalanceType.js | 1 - ...mmunityResponseChainNodeContractsItem.d.ts | 1 - ...CommunityResponseChainNodeContractsItem.js | 1 - ...nityResponseChainNodeCosmosGovVersion.d.ts | 1 - ...munityResponseChainNodeCosmosGovVersion.js | 1 - ...pdateCommunityResponseChainNodeHealth.d.ts | 1 - .../UpdateCommunityResponseChainNodeHealth.js | 1 - ...eCommunityResponseCommunityStakesItem.d.ts | 1 - ...ateCommunityResponseCommunityStakesItem.js | 1 - ...munityStakesItemStakeTransactionsItem.d.ts | 1 - ...ommunityStakesItemStakeTransactionsItem.js | 1 - ...emStakeTransactionsItemStakeDirection.d.ts | 1 - ...ItemStakeTransactionsItemStakeDirection.js | 1 - ...ateCommunityResponseCommunityTagsItem.d.ts | 1 - ...pdateCommunityResponseCommunityTagsItem.js | 1 - ...CommunityResponseCommunityTagsItemTag.d.ts | 1 - ...teCommunityResponseCommunityTagsItemTag.js | 1 - ...eCommunityResponseContestManagersItem.d.ts | 1 - ...ateCommunityResponseContestManagersItem.js | 1 - ...sponseContestManagersItemContestsItem.d.ts | 1 - ...ResponseContestManagersItemContestsItem.js | 1 - ...stManagersItemContestsItemActionsItem.d.ts | 1 - ...testManagersItemContestsItemActionsItem.js | 1 - ...gersItemContestsItemActionsItemAction.d.ts | 1 - ...nagersItemContestsItemActionsItemAction.js | 1 - ...testManagersItemContestsItemScoreItem.d.ts | 1 - ...ontestManagersItemContestsItemScoreItem.js | 1 - ...ResponseContestManagersItemTopicsItem.d.ts | 1 - ...tyResponseContestManagersItemTopicsItem.js | 1 - ...nagersItemTopicsItemContestTopicsItem.d.ts | 1 - ...ManagersItemTopicsItemContestTopicsItem.js | 1 - ...tManagersItemTopicsItemWeightedVoting.d.ts | 1 - ...estManagersItemTopicsItemWeightedVoting.js | 1 - .../UpdateCommunityResponseDefaultPage.d.ts | 1 - .../UpdateCommunityResponseDefaultPage.js | 1 - .../UpdateCommunityResponseGroupsItem.d.ts | 1 - .../UpdateCommunityResponseGroupsItem.js | 1 - ...teCommunityResponseGroupsItemMetadata.d.ts | 1 - ...dateCommunityResponseGroupsItemMetadata.js | 1 - ...ityResponseGroupsItemRequirementsItem.d.ts | 3 - ...unityResponseGroupsItemRequirementsItem.js | 1 - ...sponseGroupsItemRequirementsItemAllow.d.ts | 1 - ...ResponseGroupsItemRequirementsItemAllow.js | 1 - ...seGroupsItemRequirementsItemAllowData.d.ts | 1 - ...onseGroupsItemRequirementsItemAllowData.js | 1 - ...seGroupsItemRequirementsItemThreshold.d.ts | 1 - ...onseGroupsItemRequirementsItemThreshold.js | 1 - ...oupsItemRequirementsItemThresholdData.d.ts | 1 - ...GroupsItemRequirementsItemThresholdData.js | 1 - ...emRequirementsItemThresholdDataSource.d.ts | 1 - ...ItemRequirementsItemThresholdDataSource.js | 1 - ...equirementsItemThresholdDataSourceOne.d.ts | 1 - ...mRequirementsItemThresholdDataSourceOne.js | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...equirementsItemThresholdDataSourceThree.js | 1 - ...temThresholdDataSourceThreeSourceType.d.ts | 1 - ...sItemThresholdDataSourceThreeSourceType.js | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...uirementsItemThresholdDataSourceTokenId.js | 1 - ...mThresholdDataSourceTokenIdSourceType.d.ts | 1 - ...temThresholdDataSourceTokenIdSourceType.js | 1 - ...ntsItemThresholdDataSourceTokenSymbol.d.ts | 1 - ...mentsItemThresholdDataSourceTokenSymbol.js | 1 - .../UpdateCommunityResponseHasHomepage.d.ts | 1 - .../UpdateCommunityResponseHasHomepage.js | 1 - ...pdateCommunityResponseSocialLinksItem.d.ts | 1 - .../UpdateCommunityResponseSocialLinksItem.js | 1 - .../types/UpdateCommunityResponseTerms.d.ts | 1 - .../types/UpdateCommunityResponseTerms.js | 1 - .../UpdateCommunityResponseTermsZero.d.ts | 1 - .../types/UpdateCommunityResponseTermsZero.js | 1 - .../UpdateCommunityResponseTopicsItem.d.ts | 1 - .../UpdateCommunityResponseTopicsItem.js | 1 - ...tyResponseTopicsItemContestTopicsItem.d.ts | 1 - ...nityResponseTopicsItemContestTopicsItem.js | 1 - ...unityResponseTopicsItemWeightedVoting.d.ts | 1 - ...mmunityResponseTopicsItemWeightedVoting.js | 1 - .../types/UpdateCommunityResponseType.d.ts | 1 - .../types/UpdateCommunityResponseType.js | 1 - .../types/UpdateGroupRequestMetadata.d.ts | 1 - .../types/UpdateGroupRequestMetadata.js | 1 - .../UpdateGroupRequestRequirementsItem.d.ts | 3 - .../UpdateGroupRequestRequirementsItem.js | 1 - ...dateGroupRequestRequirementsItemAllow.d.ts | 1 - ...UpdateGroupRequestRequirementsItemAllow.js | 1 - ...GroupRequestRequirementsItemAllowData.d.ts | 1 - ...teGroupRequestRequirementsItemAllowData.js | 1 - ...GroupRequestRequirementsItemThreshold.d.ts | 1 - ...teGroupRequestRequirementsItemThreshold.js | 1 - ...pRequestRequirementsItemThresholdData.d.ts | 1 - ...oupRequestRequirementsItemThresholdData.js | 1 - ...stRequirementsItemThresholdDataSource.d.ts | 1 - ...uestRequirementsItemThresholdDataSource.js | 1 - ...equirementsItemThresholdDataSourceOne.d.ts | 1 - ...tRequirementsItemThresholdDataSourceOne.js | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...equirementsItemThresholdDataSourceThree.js | 1 - ...temThresholdDataSourceThreeSourceType.d.ts | 1 - ...sItemThresholdDataSourceThreeSourceType.js | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...uirementsItemThresholdDataSourceTokenId.js | 1 - ...mThresholdDataSourceTokenIdSourceType.d.ts | 1 - ...temThresholdDataSourceTokenIdSourceType.js | 1 - ...ntsItemThresholdDataSourceTokenSymbol.d.ts | 1 - ...mentsItemThresholdDataSourceTokenSymbol.js | 1 - .../community/types/UpdateGroupResponse.d.ts | 1 - .../community/types/UpdateGroupResponse.js | 1 - .../types/UpdateGroupResponseMetadata.d.ts | 1 - .../types/UpdateGroupResponseMetadata.js | 1 - .../UpdateGroupResponseRequirementsItem.d.ts | 3 - .../UpdateGroupResponseRequirementsItem.js | 1 - ...ateGroupResponseRequirementsItemAllow.d.ts | 1 - ...pdateGroupResponseRequirementsItemAllow.js | 1 - ...roupResponseRequirementsItemAllowData.d.ts | 1 - ...eGroupResponseRequirementsItemAllowData.js | 1 - ...roupResponseRequirementsItemThreshold.d.ts | 1 - ...eGroupResponseRequirementsItemThreshold.js | 1 - ...ResponseRequirementsItemThresholdData.d.ts | 1 - ...upResponseRequirementsItemThresholdData.js | 1 - ...seRequirementsItemThresholdDataSource.d.ts | 1 - ...onseRequirementsItemThresholdDataSource.js | 1 - ...equirementsItemThresholdDataSourceOne.d.ts | 1 - ...eRequirementsItemThresholdDataSourceOne.js | 1 - ...uirementsItemThresholdDataSourceThree.d.ts | 1 - ...equirementsItemThresholdDataSourceThree.js | 1 - ...temThresholdDataSourceThreeSourceType.d.ts | 1 - ...sItemThresholdDataSourceThreeSourceType.js | 1 - ...rementsItemThresholdDataSourceTokenId.d.ts | 1 - ...uirementsItemThresholdDataSourceTokenId.js | 1 - ...mThresholdDataSourceTokenIdSourceType.d.ts | 1 - ...temThresholdDataSourceTokenIdSourceType.js | 1 - ...ntsItemThresholdDataSourceTokenSymbol.d.ts | 1 - ...mentsItemThresholdDataSourceTokenSymbol.js | 1 - .../community/types/UpdateTopicResponse.d.ts | 1 - .../community/types/UpdateTopicResponse.js | 1 - .../types/UpdateTopicResponseTopic.d.ts | 1 - .../types/UpdateTopicResponseTopic.js | 1 - ...teTopicResponseTopicContestTopicsItem.d.ts | 1 - ...dateTopicResponseTopicContestTopicsItem.js | 1 - ...pdateTopicResponseTopicWeightedVoting.d.ts | 1 - .../UpdateTopicResponseTopicWeightedVoting.js | 1 - .../CreateCommentReactionRequest.d.ts | 1 - .../requests/CreateCommentReactionRequest.js | 1 - .../requests/CreateThreadReactionRequest.d.ts | 1 - .../requests/CreateThreadReactionRequest.js | 1 - .../requests/DeleteReactionRequest.d.ts | 1 - .../client/requests/DeleteReactionRequest.js | 1 - .../types/CreateCommentReactionResponse.d.ts | 1 - .../types/CreateCommentReactionResponse.js | 1 - .../CreateCommentReactionResponseAddress.d.ts | 1 - .../CreateCommentReactionResponseAddress.js | 1 - ...ateCommentReactionResponseAddressRole.d.ts | 1 - ...reateCommentReactionResponseAddressRole.js | 1 - ...ateCommentReactionResponseAddressUser.d.ts | 1 - ...reateCommentReactionResponseAddressUser.js | 1 - ...mentReactionResponseAddressUserApiKey.d.ts | 19 + ...ommentReactionResponseAddressUserApiKey.js | 24 + ...eAddressUserEmailNotificationInterval.d.ts | 1 - ...nseAddressUserEmailNotificationInterval.js | 1 - ...entReactionResponseAddressUserProfile.d.ts | 1 - ...mmentReactionResponseAddressUserProfile.js | 1 - ...onseAddressUserProfileBackgroundImage.d.ts | 1 - ...sponseAddressUserProfileBackgroundImage.js | 1 - ...ionResponseAddressUserProfileTagsItem.d.ts | 1 - ...ctionResponseAddressUserProfileTagsItem.js | 1 - ...ommentReactionResponseAddressWalletId.d.ts | 1 - ...eCommentReactionResponseAddressWalletId.js | 1 - .../types/CreateThreadReactionResponse.d.ts | 1 - .../types/CreateThreadReactionResponse.js | 1 - .../CreateThreadReactionResponseAddress.d.ts | 1 - .../CreateThreadReactionResponseAddress.js | 1 - ...eateThreadReactionResponseAddressRole.d.ts | 1 - ...CreateThreadReactionResponseAddressRole.js | 1 - ...eateThreadReactionResponseAddressUser.d.ts | 1 - ...CreateThreadReactionResponseAddressUser.js | 1 - ...readReactionResponseAddressUserApiKey.d.ts | 19 + ...ThreadReactionResponseAddressUserApiKey.js | 24 + ...eAddressUserEmailNotificationInterval.d.ts | 1 - ...nseAddressUserEmailNotificationInterval.js | 1 - ...eadReactionResponseAddressUserProfile.d.ts | 1 - ...hreadReactionResponseAddressUserProfile.js | 1 - ...onseAddressUserProfileBackgroundImage.d.ts | 1 - ...sponseAddressUserProfileBackgroundImage.js | 1 - ...ionResponseAddressUserProfileTagsItem.d.ts | 1 - ...ctionResponseAddressUserProfileTagsItem.js | 1 - ...ThreadReactionResponseAddressWalletId.d.ts | 1 - ...teThreadReactionResponseAddressWalletId.js | 1 - .../types/DeleteReactionResponse.d.ts | 1 - .../reaction/types/DeleteReactionResponse.js | 1 - .../client/requests/CreateThreadRequest.d.ts | 1 - .../client/requests/CreateThreadRequest.js | 1 - .../client/requests/DeleteThreadRequest.d.ts | 1 - .../client/requests/DeleteThreadRequest.js | 1 - .../client/requests/UpdateThreadRequest.d.ts | 1 - .../client/requests/UpdateThreadRequest.js | 1 - .../types/CreateThreadRequestDiscordMeta.d.ts | 1 - .../types/CreateThreadRequestDiscordMeta.js | 1 - .../CreateThreadRequestDiscordMetaUser.d.ts | 1 - .../CreateThreadRequestDiscordMetaUser.js | 1 - .../thread/types/CreateThreadRequestKind.d.ts | 1 - .../thread/types/CreateThreadRequestKind.js | 1 - .../thread/types/CreateThreadResponse.d.ts | 12 +- .../thread/types/CreateThreadResponse.js | 12 +- .../types/CreateThreadResponseAddress.d.ts | 1 - .../types/CreateThreadResponseAddress.js | 1 - .../CreateThreadResponseAddressRole.d.ts | 1 - .../types/CreateThreadResponseAddressRole.js | 1 - .../CreateThreadResponseAddressUser.d.ts | 1 - .../types/CreateThreadResponseAddressUser.js | 1 - ...CreateThreadResponseAddressUserApiKey.d.ts | 19 + .../CreateThreadResponseAddressUserApiKey.js | 23 + ...eAddressUserEmailNotificationInterval.d.ts | 1 - ...nseAddressUserEmailNotificationInterval.js | 1 - ...reateThreadResponseAddressUserProfile.d.ts | 1 - .../CreateThreadResponseAddressUserProfile.js | 1 - ...onseAddressUserProfileBackgroundImage.d.ts | 1 - ...sponseAddressUserProfileBackgroundImage.js | 1 - ...eadResponseAddressUserProfileTagsItem.d.ts | 1 - ...hreadResponseAddressUserProfileTagsItem.js | 1 - .../CreateThreadResponseAddressWalletId.d.ts | 1 - .../CreateThreadResponseAddressWalletId.js | 1 - ...CreateThreadResponseCollaboratorsItem.d.ts | 1 - .../CreateThreadResponseCollaboratorsItem.js | 1 - ...teThreadResponseCollaboratorsItemRole.d.ts | 1 - ...eateThreadResponseCollaboratorsItemRole.js | 1 - ...teThreadResponseCollaboratorsItemUser.d.ts | 1 - ...eateThreadResponseCollaboratorsItemUser.js | 1 - ...adResponseCollaboratorsItemUserApiKey.d.ts | 19 + ...readResponseCollaboratorsItemUserApiKey.js | 24 + ...torsItemUserEmailNotificationInterval.d.ts | 1 - ...ratorsItemUserEmailNotificationInterval.js | 1 - ...dResponseCollaboratorsItemUserProfile.d.ts | 1 - ...eadResponseCollaboratorsItemUserProfile.js | 1 - ...oratorsItemUserProfileBackgroundImage.d.ts | 1 - ...aboratorsItemUserProfileBackgroundImage.js | 1 - ...eCollaboratorsItemUserProfileTagsItem.d.ts | 1 - ...nseCollaboratorsItemUserProfileTagsItem.js | 1 - ...readResponseCollaboratorsItemWalletId.d.ts | 1 - ...ThreadResponseCollaboratorsItemWalletId.js | 1 - .../CreateThreadResponseDiscordMeta.d.ts | 1 - .../types/CreateThreadResponseDiscordMeta.js | 1 - .../CreateThreadResponseDiscordMetaUser.d.ts | 1 - .../CreateThreadResponseDiscordMetaUser.js | 1 - .../types/CreateThreadResponseLinksItem.d.ts | 1 - .../types/CreateThreadResponseLinksItem.js | 1 - .../CreateThreadResponseLinksItemSource.d.ts | 1 - .../CreateThreadResponseLinksItemSource.js | 1 - .../CreateThreadResponseReactionsItem.d.ts | 1 - .../CreateThreadResponseReactionsItem.js | 1 - ...ateThreadResponseReactionsItemAddress.d.ts | 1 - ...reateThreadResponseReactionsItemAddress.js | 1 - ...hreadResponseReactionsItemAddressRole.d.ts | 1 - ...eThreadResponseReactionsItemAddressRole.js | 1 - ...hreadResponseReactionsItemAddressUser.d.ts | 1 - ...eThreadResponseReactionsItemAddressUser.js | 1 - ...esponseReactionsItemAddressUserApiKey.d.ts | 19 + ...dResponseReactionsItemAddressUserApiKey.js | 24 + ...mAddressUserEmailNotificationInterval.d.ts | 1 - ...temAddressUserEmailNotificationInterval.js | 1 - ...sponseReactionsItemAddressUserProfile.d.ts | 1 - ...ResponseReactionsItemAddressUserProfile.js | 1 - ...ItemAddressUserProfileBackgroundImage.d.ts | 1 - ...nsItemAddressUserProfileBackgroundImage.js | 1 - ...actionsItemAddressUserProfileTagsItem.d.ts | 1 - ...ReactionsItemAddressUserProfileTagsItem.js | 1 - ...dResponseReactionsItemAddressWalletId.d.ts | 1 - ...eadResponseReactionsItemAddressWalletId.js | 1 - .../types/CreateThreadResponseSearch.d.ts | 1 - .../types/CreateThreadResponseSearch.js | 1 - ...eadResponseThreadVersionHistoriesItem.d.ts | 1 - ...hreadResponseThreadVersionHistoriesItem.js | 1 - .../types/CreateThreadResponseTopic.d.ts | 1 - .../thread/types/CreateThreadResponseTopic.js | 1 - ...eThreadResponseTopicContestTopicsItem.d.ts | 1 - ...ateThreadResponseTopicContestTopicsItem.js | 1 - ...eateThreadResponseTopicWeightedVoting.d.ts | 1 - ...CreateThreadResponseTopicWeightedVoting.js | 1 - .../thread/types/DeleteThreadResponse.d.ts | 1 - .../thread/types/DeleteThreadResponse.js | 1 - .../UpdateThreadRequestCollaborators.d.ts | 1 - .../types/UpdateThreadRequestCollaborators.js | 1 - .../thread/types/UpdateThreadResponse.d.ts | 12 +- .../thread/types/UpdateThreadResponse.js | 12 +- .../types/UpdateThreadResponseAddress.d.ts | 1 - .../types/UpdateThreadResponseAddress.js | 1 - .../UpdateThreadResponseAddressRole.d.ts | 1 - .../types/UpdateThreadResponseAddressRole.js | 1 - .../UpdateThreadResponseAddressUser.d.ts | 1 - .../types/UpdateThreadResponseAddressUser.js | 1 - ...UpdateThreadResponseAddressUserApiKey.d.ts | 19 + .../UpdateThreadResponseAddressUserApiKey.js | 23 + ...eAddressUserEmailNotificationInterval.d.ts | 1 - ...nseAddressUserEmailNotificationInterval.js | 1 - ...pdateThreadResponseAddressUserProfile.d.ts | 1 - .../UpdateThreadResponseAddressUserProfile.js | 1 - ...onseAddressUserProfileBackgroundImage.d.ts | 1 - ...sponseAddressUserProfileBackgroundImage.js | 1 - ...eadResponseAddressUserProfileTagsItem.d.ts | 1 - ...hreadResponseAddressUserProfileTagsItem.js | 1 - .../UpdateThreadResponseAddressWalletId.d.ts | 1 - .../UpdateThreadResponseAddressWalletId.js | 1 - ...UpdateThreadResponseCollaboratorsItem.d.ts | 1 - .../UpdateThreadResponseCollaboratorsItem.js | 1 - ...teThreadResponseCollaboratorsItemRole.d.ts | 1 - ...dateThreadResponseCollaboratorsItemRole.js | 1 - ...teThreadResponseCollaboratorsItemUser.d.ts | 1 - ...dateThreadResponseCollaboratorsItemUser.js | 1 - ...adResponseCollaboratorsItemUserApiKey.d.ts | 19 + ...readResponseCollaboratorsItemUserApiKey.js | 24 + ...torsItemUserEmailNotificationInterval.d.ts | 1 - ...ratorsItemUserEmailNotificationInterval.js | 1 - ...dResponseCollaboratorsItemUserProfile.d.ts | 1 - ...eadResponseCollaboratorsItemUserProfile.js | 1 - ...oratorsItemUserProfileBackgroundImage.d.ts | 1 - ...aboratorsItemUserProfileBackgroundImage.js | 1 - ...eCollaboratorsItemUserProfileTagsItem.d.ts | 1 - ...nseCollaboratorsItemUserProfileTagsItem.js | 1 - ...readResponseCollaboratorsItemWalletId.d.ts | 1 - ...ThreadResponseCollaboratorsItemWalletId.js | 1 - .../UpdateThreadResponseDiscordMeta.d.ts | 1 - .../types/UpdateThreadResponseDiscordMeta.js | 1 - .../UpdateThreadResponseDiscordMetaUser.d.ts | 1 - .../UpdateThreadResponseDiscordMetaUser.js | 1 - .../types/UpdateThreadResponseLinksItem.d.ts | 1 - .../types/UpdateThreadResponseLinksItem.js | 1 - .../UpdateThreadResponseLinksItemSource.d.ts | 1 - .../UpdateThreadResponseLinksItemSource.js | 1 - .../UpdateThreadResponseReactionsItem.d.ts | 1 - .../UpdateThreadResponseReactionsItem.js | 1 - ...ateThreadResponseReactionsItemAddress.d.ts | 1 - ...pdateThreadResponseReactionsItemAddress.js | 1 - ...hreadResponseReactionsItemAddressRole.d.ts | 1 - ...eThreadResponseReactionsItemAddressRole.js | 1 - ...hreadResponseReactionsItemAddressUser.d.ts | 1 - ...eThreadResponseReactionsItemAddressUser.js | 1 - ...esponseReactionsItemAddressUserApiKey.d.ts | 19 + ...dResponseReactionsItemAddressUserApiKey.js | 24 + ...mAddressUserEmailNotificationInterval.d.ts | 1 - ...temAddressUserEmailNotificationInterval.js | 1 - ...sponseReactionsItemAddressUserProfile.d.ts | 1 - ...ResponseReactionsItemAddressUserProfile.js | 1 - ...ItemAddressUserProfileBackgroundImage.d.ts | 1 - ...nsItemAddressUserProfileBackgroundImage.js | 1 - ...actionsItemAddressUserProfileTagsItem.d.ts | 1 - ...ReactionsItemAddressUserProfileTagsItem.js | 1 - ...dResponseReactionsItemAddressWalletId.d.ts | 1 - ...eadResponseReactionsItemAddressWalletId.js | 1 - .../types/UpdateThreadResponseSearch.d.ts | 1 - .../types/UpdateThreadResponseSearch.js | 1 - ...eadResponseThreadVersionHistoriesItem.d.ts | 1 - ...hreadResponseThreadVersionHistoriesItem.js | 1 - .../types/UpdateThreadResponseTopic.d.ts | 1 - .../thread/types/UpdateThreadResponseTopic.js | 1 - ...eThreadResponseTopicContestTopicsItem.d.ts | 1 - ...ateThreadResponseTopicContestTopicsItem.js | 1 - ...dateThreadResponseTopicWeightedVoting.d.ts | 1 - ...UpdateThreadResponseTopicWeightedVoting.js | 1 - pnpm-lock.yaml | 2755 ++++++++++++++--- 1832 files changed, 4315 insertions(+), 2605 deletions(-) create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/community/client/requests/JoinCommunityRequest.d.ts create mode 100644 libs/api-client/src/api/resources/community/client/requests/JoinCommunityRequest.js create mode 100644 libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/community/types/JoinCommunityResponse.d.ts create mode 100644 libs/api-client/src/api/resources/community/types/JoinCommunityResponse.js create mode 100644 libs/api-client/src/api/resources/community/types/JoinCommunityResponseBase.d.ts create mode 100644 libs/api-client/src/api/resources/community/types/JoinCommunityResponseBase.js create mode 100644 libs/api-client/src/api/resources/community/types/JoinCommunityResponseWalletId.d.ts create mode 100644 libs/api-client/src/api/resources/community/types/JoinCommunityResponseWalletId.js create mode 100644 libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/community/client/requests/JoinCommunityRequest.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/client/requests/JoinCommunityRequest.js create mode 100644 libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/community/types/JoinCommunityResponse.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/types/JoinCommunityResponse.js create mode 100644 libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseBase.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseBase.js create mode 100644 libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseWalletId.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseWalletId.js create mode 100644 libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.js create mode 100644 libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.d.ts create mode 100644 libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.js diff --git a/libs/api-client/README.md b/libs/api-client/README.md index e9f0e09a2ad..9a4401a00bb 100644 --- a/libs/api-client/README.md +++ b/libs/api-client/README.md @@ -1,3 +1,15 @@ # Common API -## TODO: write readme file +## Manual Setup + +### Generate a new API client + +- Start app with `pnpm start` so fern can refresh the lastest `openapi.spec` from `http://localhost:8080/api/v1/openapi.json` +- Run `pnpm generate-client` to generate: + - A new `fern/openapi/openapi.yml` file + - A client API in `/src`, formatted with our root `.prettierrc.json` config + +### Deploy a new API client + +- Update the version in `package.json` +- Run `pnpm publish` to publish the client diff --git a/libs/api-client/fern/fern.config.json b/libs/api-client/fern/fern.config.json index be828cc2324..edadec42d77 100644 --- a/libs/api-client/fern/fern.config.json +++ b/libs/api-client/fern/fern.config.json @@ -1,4 +1,4 @@ { "organization": "Common", - "version": "0.43.5" + "version": "0.44.11" } diff --git a/libs/api-client/fern/openapi/openapi.yml b/libs/api-client/fern/openapi/openapi.yml index 7e46313690b..6206f4e4e04 100644 --- a/libs/api-client/fern/openapi/openapi.yml +++ b/libs/api-client/fern/openapi/openapi.yml @@ -2982,8 +2982,6 @@ paths: maximum: 2147483647 text: type: string - plaintext: - type: string parent_id: type: string nullable: true @@ -3292,9 +3290,6 @@ paths: body: type: string nullable: true - plaintext: - type: string - nullable: true url: type: string nullable: true @@ -4300,12 +4295,7 @@ paths: - address_id - title - kind - - stage - community_id - - view_count - - reaction_count - - reaction_weights_sum - - comment_count - search additionalProperties: false nullable: true @@ -4611,7 +4601,6 @@ paths: - thread_id - address_id - text - - plaintext - reaction_count - search additionalProperties: false @@ -10763,9 +10752,6 @@ paths: body: type: string nullable: true - plaintext: - type: string - nullable: true url: type: string nullable: true @@ -11769,12 +11755,7 @@ paths: - address_id - title - kind - - stage - community_id - - view_count - - reaction_count - - reaction_weights_sum - - comment_count - search additionalProperties: false default: @@ -11872,9 +11853,6 @@ paths: body: type: string nullable: true - plaintext: - type: string - nullable: true url: type: string nullable: true @@ -12878,12 +12856,7 @@ paths: - address_id - title - kind - - stage - community_id - - view_count - - reaction_count - - reaction_weights_sum - - comment_count - search additionalProperties: false default: @@ -13032,8 +13005,6 @@ paths: maximum: 2147483647 text: type: string - plaintext: - type: string parent_id: type: string nullable: true @@ -13342,9 +13313,6 @@ paths: body: type: string nullable: true - plaintext: - type: string - nullable: true url: type: string nullable: true @@ -14348,12 +14316,7 @@ paths: - address_id - title - kind - - stage - community_id - - view_count - - reaction_count - - reaction_weights_sum - - comment_count - search additionalProperties: false nullable: true @@ -14661,7 +14624,6 @@ paths: - thread_id - address_id - text - - plaintext - reaction_count - search - community_id @@ -14721,8 +14683,6 @@ paths: maximum: 2147483647 text: type: string - plaintext: - type: string parent_id: type: string nullable: true @@ -15031,9 +14991,6 @@ paths: body: type: string nullable: true - plaintext: - type: string - nullable: true url: type: string nullable: true @@ -16037,12 +15994,7 @@ paths: - address_id - title - kind - - stage - community_id - - view_count - - reaction_count - - reaction_weights_sum - - comment_count - search additionalProperties: false nullable: true @@ -16350,7 +16302,6 @@ paths: - thread_id - address_id - text - - plaintext - reaction_count - search - community_id diff --git a/libs/api-client/package.json b/libs/api-client/package.json index 8e82c6eeec5..f4b30277bd7 100644 --- a/libs/api-client/package.json +++ b/libs/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@commonxyz/api-client", - "version": "0.0.1", + "version": "0.0.2", "type": "module", "description": "Common Client Proxy", "repository": { @@ -29,7 +29,8 @@ "publish": "npm publish", "run-test": "tsx ./test/index.ts", "check-types": "tsc --noEmit", - "generate-client": "chmod u+x scripts/fern-init.sh && ./scripts/fern-init.sh && fern generate" + "format": "npx prettier --write 'src/**/*.{js,d.ts}'", + "generate-client": "chmod u+x scripts/fern-init.sh && ./scripts/fern-init.sh && fern generate && pnpm format" }, "keywords": [ "commonwealth", diff --git a/libs/api-client/src/Client.d.ts b/libs/api-client/src/Client.d.ts index 7e2497437fd..dc817d86658 100644 --- a/libs/api-client/src/Client.d.ts +++ b/libs/api-client/src/Client.d.ts @@ -7,7 +7,6 @@ import { Reaction } from './api/resources/reaction/client/Client'; import { Thread } from './api/resources/thread/client/Client'; import * as core from './core'; import * as environments from './environments'; - export declare namespace CommonApiClient { interface Options { environment?: core.Supplier; @@ -15,7 +14,6 @@ export declare namespace CommonApiClient { /** Override the address header */ address?: core.Supplier; } - interface RequestOptions { /** The maximum time to wait for a response in seconds. */ timeoutInSeconds?: number; @@ -27,21 +25,15 @@ export declare namespace CommonApiClient { address?: string | undefined; } } - export declare class CommonApiClient { protected readonly _options: CommonApiClient.Options; - constructor(_options: CommonApiClient.Options); - protected _community: Community | undefined; get community(): Community; - protected _comment: Comment | undefined; get comment(): Comment; - protected _thread: Thread | undefined; get thread(): Thread; - protected _reaction: Reaction | undefined; get reaction(): Reaction; } diff --git a/libs/api-client/src/Client.js b/libs/api-client/src/Client.js index f3de1789a2e..470296dcf92 100644 --- a/libs/api-client/src/Client.js +++ b/libs/api-client/src/Client.js @@ -5,33 +5,28 @@ import { Comment } from './api/resources/comment/client/Client'; import { Community } from './api/resources/community/client/Client'; import { Reaction } from './api/resources/reaction/client/Client'; import { Thread } from './api/resources/thread/client/Client'; - export class CommonApiClient { constructor(_options) { this._options = _options; } - get community() { var _a; return (_a = this._community) !== null && _a !== void 0 ? _a : (this._community = new Community(this._options)); } - get comment() { var _a; return (_a = this._comment) !== null && _a !== void 0 ? _a : (this._comment = new Comment(this._options)); } - get thread() { var _a; return (_a = this._thread) !== null && _a !== void 0 ? _a : (this._thread = new Thread(this._options)); } - get reaction() { var _a; return (_a = this._reaction) !== null && _a !== void 0 diff --git a/libs/api-client/src/api/resources/comment/client/Client.d.ts b/libs/api-client/src/api/resources/comment/client/Client.d.ts index 0d7344ff517..32d17097eac 100644 --- a/libs/api-client/src/api/resources/comment/client/Client.d.ts +++ b/libs/api-client/src/api/resources/comment/client/Client.d.ts @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import * as environments from '../../../../environments'; import * as CommonApi from '../../../index'; - export declare namespace Comment { interface Options { environment?: core.Supplier; @@ -12,7 +11,6 @@ export declare namespace Comment { /** Override the address header */ address?: core.Supplier; } - interface RequestOptions { /** The maximum time to wait for a response in seconds. */ timeoutInSeconds?: number; @@ -24,12 +22,9 @@ export declare namespace Comment { address?: string | undefined; } } - export declare class Comment { protected readonly _options: Comment.Options; - constructor(_options: Comment.Options); - /** * @param {CommonApi.GetCommentsRequest} request * @param {Comment.RequestOptions} requestOptions - Request-specific configuration. @@ -43,7 +38,6 @@ export declare class Comment { request: CommonApi.GetCommentsRequest, requestOptions?: Comment.RequestOptions, ): Promise; - /** * @param {CommonApi.CreateCommentRequest} request * @param {Comment.RequestOptions} requestOptions - Request-specific configuration. @@ -58,7 +52,6 @@ export declare class Comment { request: CommonApi.CreateCommentRequest, requestOptions?: Comment.RequestOptions, ): Promise; - /** * @param {CommonApi.UpdateCommentRequest} request * @param {Comment.RequestOptions} requestOptions - Request-specific configuration. @@ -73,7 +66,6 @@ export declare class Comment { request: CommonApi.UpdateCommentRequest, requestOptions?: Comment.RequestOptions, ): Promise; - /** * @param {CommonApi.DeleteCommentRequest} request * @param {Comment.RequestOptions} requestOptions - Request-specific configuration. @@ -87,7 +79,6 @@ export declare class Comment { request: CommonApi.DeleteCommentRequest, requestOptions?: Comment.RequestOptions, ): Promise; - protected _getCustomAuthorizationHeaders(): Promise<{ 'x-api-key': string; }>; diff --git a/libs/api-client/src/api/resources/comment/client/Client.js b/libs/api-client/src/api/resources/comment/client/Client.js index 80ac2b981fe..b10928b00bc 100644 --- a/libs/api-client/src/api/resources/comment/client/Client.js +++ b/libs/api-client/src/api/resources/comment/client/Client.js @@ -11,7 +11,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -20,7 +19,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -28,13 +26,11 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; @@ -43,12 +39,10 @@ import * as core from '../../../../core'; import * as environments from '../../../../environments'; import * as errors from '../../../../errors/index'; import * as serializers from '../../../../serialization/index'; - export class Comment { constructor(_options) { this._options = _options; } - /** * @param {CommonApi.GetCommentsRequest} request * @param {Comment.RequestOptions} requestOptions - Request-specific configuration. @@ -162,7 +156,6 @@ export class Comment { } }); } - /** * @param {CommonApi.CreateCommentRequest} request * @param {Comment.RequestOptions} requestOptions - Request-specific configuration. @@ -246,7 +239,6 @@ export class Comment { } }); } - /** * @param {CommonApi.UpdateCommentRequest} request * @param {Comment.RequestOptions} requestOptions - Request-specific configuration. @@ -330,7 +322,6 @@ export class Comment { } }); } - /** * @param {CommonApi.DeleteCommentRequest} request * @param {Comment.RequestOptions} requestOptions - Request-specific configuration. @@ -413,7 +404,6 @@ export class Comment { } }); } - _getCustomAuthorizationHeaders() { return __awaiter(this, void 0, void 0, function* () { const apiKeyValue = yield core.Supplier.get(this._options.apiKey); diff --git a/libs/api-client/src/api/resources/comment/client/requests/CreateCommentRequest.d.ts b/libs/api-client/src/api/resources/comment/client/requests/CreateCommentRequest.d.ts index 3e05355a801..45ebe8a7e96 100644 --- a/libs/api-client/src/api/resources/comment/client/requests/CreateCommentRequest.d.ts +++ b/libs/api-client/src/api/resources/comment/client/requests/CreateCommentRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/comment/client/requests/GetCommentsRequest.d.ts b/libs/api-client/src/api/resources/comment/client/requests/GetCommentsRequest.d.ts index b62b135a883..d44b96891a8 100644 --- a/libs/api-client/src/api/resources/comment/client/requests/GetCommentsRequest.d.ts +++ b/libs/api-client/src/api/resources/comment/client/requests/GetCommentsRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentRequestDiscordMeta.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentRequestDiscordMeta.d.ts index 42134d10517..636afbbfbc1 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentRequestDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentRequestDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentRequestDiscordMeta { user: CommonApi.CreateCommentRequestDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponse.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponse.d.ts index 88669f66275..be868009211 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponse.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponse.d.ts @@ -2,13 +2,11 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponse { id?: number; threadId: number; addressId: number; text: string; - plaintext: string; parentId?: string; contentUrl?: string; canvasSignedData?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddress.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddress.d.ts index c539489e182..4f375366c33 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUser.d.ts index 5072f9a759d..8a731ae6b82 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..c2eefc9fe5e --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateCommentResponseAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserProfile.d.ts index aeca333ac4f..234ff14fd56 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseDiscordMeta.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseDiscordMeta.d.ts index f248a784f84..a0dbe2c0ca9 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseDiscordMeta { user: CommonApi.CreateCommentResponseDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReaction.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReaction.d.ts index 62c672f92f5..09529083623 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReaction.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReaction.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseReaction { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddress.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddress.d.ts index 6d4f9c8f1bc..500eb9aa8cc 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseReactionAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUser.d.ts index f418d9b50f2..0a4eb26239f 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseReactionAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.d.ts new file mode 100644 index 00000000000..498f30b7a8a --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateCommentResponseReactionAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.d.ts index 8b7f62398f8..882b4be1ecc 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseReactionAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThread.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThread.d.ts index 080bc91e8f5..faf304a4490 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThread.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThread.d.ts @@ -2,20 +2,18 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThread { id?: number; addressId: number; title: string; kind: string; - stage: string; + stage?: string; body?: string; - plaintext?: string; url?: string; topicId?: number; pinned?: boolean; communityId: string; - viewCount: number; + viewCount?: number; links?: CommonApi.CreateCommentResponseThreadLinksItem[]; contentUrl?: string; readOnly?: boolean; @@ -31,9 +29,9 @@ export interface CreateCommentResponseThread { archivedAt?: Date; lockedAt?: Date; discordMeta?: CommonApi.CreateCommentResponseThreadDiscordMeta; - reactionCount: number; - reactionWeightsSum: number; - commentCount: number; + reactionCount?: number; + reactionWeightsSum?: number; + commentCount?: number; activityRankDate?: Date; createdBy?: string; profileName?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddress.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddress.d.ts index 966bc190a83..74160e6234d 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUser.d.ts index 8cac2cb6ab4..40013564c51 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.d.ts new file mode 100644 index 00000000000..429825ccc26 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateCommentResponseThreadAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.d.ts index 3e2667211cf..df7b36b3cf8 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.d.ts index fe44bb1ed0a..ae53f306a2a 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadCollaboratorsItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.d.ts index 861870bbab0..da9d414a3a8 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadCollaboratorsItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..e14622f724a --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateCommentResponseThreadCollaboratorsItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.js b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.d.ts index 0d44faf7ee4..d420fe7c443 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadCollaboratorsItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadDiscordMeta.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadDiscordMeta.d.ts index 2c662ba38ad..fff8f8261b4 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadDiscordMeta { user: CommonApi.CreateCommentResponseThreadDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadLinksItem.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadLinksItem.d.ts index ad1a7f8aae2..49ed78fe746 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadLinksItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadLinksItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadLinksItem { source: CommonApi.CreateCommentResponseThreadLinksItemSource; identifier: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItem.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItem.d.ts index 7d7c4310329..6117ff36412 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadReactionsItem { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.d.ts index 5750e95bc80..e5534149383 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadReactionsItemAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.d.ts index fb14a8537a7..80b221e3a42 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadReactionsItemAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..6085b8a1af4 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateCommentResponseThreadReactionsItemAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.d.ts index 16e0b9c18dc..37305a68891 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadReactionsItemAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadTopic.d.ts b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadTopic.d.ts index f8a8be805da..e92d3563938 100644 --- a/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadTopic.d.ts +++ b/libs/api-client/src/api/resources/comment/types/CreateCommentResponseThreadTopic.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentResponseThreadTopic { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponse.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponse.d.ts index ad5c22d1246..5804ce36a63 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponse.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponse { limit: number; page: number; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItem.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItem.d.ts index c17cceef19c..3658a668163 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItem.d.ts @@ -2,13 +2,11 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItem { id?: number; threadId: number; addressId: number; text: string; - plaintext: string; parentId?: string; contentUrl?: string; canvasSignedData?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddress.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddress.d.ts index 04123c9f33d..73d10cc5e13 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUser.d.ts index 6b1ee7b8b5d..3a7452a9bf1 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..7dc3fb9890e --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetCommentsResponseResultsItemAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.d.ts index 03c6adab664..12634ef8c0e 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.d.ts index d0f8c9c4732..60b9b071b48 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemDiscordMeta { user: CommonApi.GetCommentsResponseResultsItemDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReaction.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReaction.d.ts index 719ef038696..38856424597 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReaction.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReaction.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemReaction { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.d.ts index e639747af6f..546bdec8588 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemReactionAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.d.ts index 0df73917b48..8879d5b3441 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemReactionAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.d.ts new file mode 100644 index 00000000000..18f6aa753f6 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetCommentsResponseResultsItemReactionAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.d.ts index 04c7dd76d1a..32c43916dbd 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemReactionAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThread.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThread.d.ts index 6654f640013..3d1cf6d346f 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThread.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThread.d.ts @@ -2,20 +2,18 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThread { id?: number; addressId: number; title: string; kind: string; - stage: string; + stage?: string; body?: string; - plaintext?: string; url?: string; topicId?: number; pinned?: boolean; communityId: string; - viewCount: number; + viewCount?: number; links?: CommonApi.GetCommentsResponseResultsItemThreadLinksItem[]; contentUrl?: string; readOnly?: boolean; @@ -31,9 +29,9 @@ export interface GetCommentsResponseResultsItemThread { archivedAt?: Date; lockedAt?: Date; discordMeta?: CommonApi.GetCommentsResponseResultsItemThreadDiscordMeta; - reactionCount: number; - reactionWeightsSum: number; - commentCount: number; + reactionCount?: number; + reactionWeightsSum?: number; + commentCount?: number; activityRankDate?: Date; createdBy?: string; profileName?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.d.ts index ab600803e5e..6a32e966042 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.d.ts index e8fddec00b9..b028fdcd630 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.d.ts new file mode 100644 index 00000000000..c0a38bca728 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetCommentsResponseResultsItemThreadAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.d.ts index 3559d47d553..94cfba33fbf 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.d.ts index dbe77b57db6..7c8c944e6c8 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadCollaboratorsItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.d.ts index 56ebd07ef90..561b43e884b 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadCollaboratorsItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..0fa2bc07fb4 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.js b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.d.ts index 7a472ecfa1b..6824b62ca02 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.d.ts index 9a041a25c16..d3ea0ab690d 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadDiscordMeta { user: CommonApi.GetCommentsResponseResultsItemThreadDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.d.ts index b0c8435f852..af95dcdace1 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadLinksItem { source: CommonApi.GetCommentsResponseResultsItemThreadLinksItemSource; identifier: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.d.ts index 09e5abe68c5..da07a08efe6 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadReactionsItem { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.d.ts index a4cba4ccec1..1ba8495c42d 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadReactionsItemAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.d.ts index 147e7f88434..7bfab3e07c8 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadReactionsItemAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..1793c4f45a1 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.d.ts index a1c18f61c87..5bbb803b48f 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.d.ts b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.d.ts index 8c9cda04ada..61becec95b4 100644 --- a/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.d.ts +++ b/libs/api-client/src/api/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommentsResponseResultsItemThreadTopic { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponse.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponse.d.ts index 8873af9e752..7317fa83ac9 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponse.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponse.d.ts @@ -2,13 +2,11 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponse { id?: number; threadId: number; addressId: number; text: string; - plaintext: string; parentId?: string; contentUrl?: string; canvasSignedData?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddress.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddress.d.ts index 98e4d9f9fbd..adbb90cdcfd 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUser.d.ts index d12c242aebb..fa5774dfa5c 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..e8d81e36c1f --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateCommentResponseAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserProfile.d.ts index 5f6b31e1b33..486da7dee43 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseDiscordMeta.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseDiscordMeta.d.ts index 0e6190b01cc..30b797554e5 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseDiscordMeta { user: CommonApi.UpdateCommentResponseDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReaction.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReaction.d.ts index 4380805c40c..387ad5fef27 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReaction.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReaction.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseReaction { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddress.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddress.d.ts index 09aeb3b5b65..c8c1bfe6f4f 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseReactionAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUser.d.ts index 437cb657ee3..20de96dc2a9 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseReactionAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.d.ts new file mode 100644 index 00000000000..04bea8dd0a8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateCommentResponseReactionAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.d.ts index d91440395e2..844d8b29592 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseReactionAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThread.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThread.d.ts index a36b6b45fda..b1e2a16f9f5 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThread.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThread.d.ts @@ -2,20 +2,18 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThread { id?: number; addressId: number; title: string; kind: string; - stage: string; + stage?: string; body?: string; - plaintext?: string; url?: string; topicId?: number; pinned?: boolean; communityId: string; - viewCount: number; + viewCount?: number; links?: CommonApi.UpdateCommentResponseThreadLinksItem[]; contentUrl?: string; readOnly?: boolean; @@ -31,9 +29,9 @@ export interface UpdateCommentResponseThread { archivedAt?: Date; lockedAt?: Date; discordMeta?: CommonApi.UpdateCommentResponseThreadDiscordMeta; - reactionCount: number; - reactionWeightsSum: number; - commentCount: number; + reactionCount?: number; + reactionWeightsSum?: number; + commentCount?: number; activityRankDate?: Date; createdBy?: string; profileName?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddress.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddress.d.ts index f5bf43b0d24..f2adfe35b96 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUser.d.ts index f114d875f32..fcfcaaa169e 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.d.ts new file mode 100644 index 00000000000..030af5d1d91 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateCommentResponseThreadAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.d.ts index 7af19c72b65..14ed12664b8 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.d.ts index c9da29702c5..2f806dd3554 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadCollaboratorsItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.d.ts index 1ff84dca6bf..bf379f21394 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadCollaboratorsItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..8a671542b00 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateCommentResponseThreadCollaboratorsItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.js b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.d.ts index d5d576eec5d..b7d53499b5d 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadCollaboratorsItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.d.ts index 46cc2730141..d5398216ab7 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadDiscordMeta { user: CommonApi.UpdateCommentResponseThreadDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadLinksItem.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadLinksItem.d.ts index bc5ceedd7ff..2ceb32335cc 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadLinksItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadLinksItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadLinksItem { source: CommonApi.UpdateCommentResponseThreadLinksItemSource; identifier: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItem.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItem.d.ts index a6fd0f2f708..1f5fc86ff91 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItem.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadReactionsItem { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.d.ts index 4d83507db33..4eafc2b51f8 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadReactionsItemAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.d.ts index 3d8afebaf07..078e82a2ae2 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadReactionsItemAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..e0ada1c5390 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateCommentResponseThreadReactionsItemAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.js b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.d.ts index 3ba59d85d38..ba48c304b3b 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadReactionsItemAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadTopic.d.ts b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadTopic.d.ts index 979bce026ed..2e2ee184484 100644 --- a/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadTopic.d.ts +++ b/libs/api-client/src/api/resources/comment/types/UpdateCommentResponseThreadTopic.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommentResponseThreadTopic { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/client/Client.d.ts b/libs/api-client/src/api/resources/community/client/Client.d.ts index 4550913558a..f41368b1e73 100644 --- a/libs/api-client/src/api/resources/community/client/Client.d.ts +++ b/libs/api-client/src/api/resources/community/client/Client.d.ts @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import * as environments from '../../../../environments'; import * as CommonApi from '../../../index'; - export declare namespace Community { interface Options { environment?: core.Supplier; @@ -12,7 +11,6 @@ export declare namespace Community { /** Override the address header */ address?: core.Supplier; } - interface RequestOptions { /** The maximum time to wait for a response in seconds. */ timeoutInSeconds?: number; @@ -24,12 +22,9 @@ export declare namespace Community { address?: string | undefined; } } - export declare class Community { protected readonly _options: Community.Options; - constructor(_options: Community.Options); - /** * @param {CommonApi.GetCommunitiesRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -41,7 +36,6 @@ export declare class Community { request?: CommonApi.GetCommunitiesRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.GetCommunityRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -55,7 +49,6 @@ export declare class Community { request: CommonApi.GetCommunityRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.GetMembersRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -69,7 +62,6 @@ export declare class Community { request: CommonApi.GetMembersRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.CreateCommunityRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -87,7 +79,6 @@ export declare class Community { request: CommonApi.CreateCommunityRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.UpdateCommunityRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -101,7 +92,6 @@ export declare class Community { request: CommonApi.UpdateCommunityRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.CreateTopicRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -115,7 +105,6 @@ export declare class Community { request: CommonApi.CreateTopicRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.UpdateTopicRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -130,7 +119,6 @@ export declare class Community { request: CommonApi.UpdateTopicRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.DeleteTopicRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -145,7 +133,6 @@ export declare class Community { request: CommonApi.DeleteTopicRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.CreateGroupRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -163,7 +150,6 @@ export declare class Community { request: CommonApi.CreateGroupRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.UpdateGroupRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -178,7 +164,6 @@ export declare class Community { request: CommonApi.UpdateGroupRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.DeleteGroupRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -193,7 +178,6 @@ export declare class Community { request: CommonApi.DeleteGroupRequest, requestOptions?: Community.RequestOptions, ): Promise; - /** * @param {CommonApi.JoinCommunityRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -207,7 +191,6 @@ export declare class Community { request: CommonApi.JoinCommunityRequest, requestOptions?: Community.RequestOptions, ): Promise; - protected _getCustomAuthorizationHeaders(): Promise<{ 'x-api-key': string; }>; diff --git a/libs/api-client/src/api/resources/community/client/Client.js b/libs/api-client/src/api/resources/community/client/Client.js index 775b4ef1128..4f3d90d3f78 100644 --- a/libs/api-client/src/api/resources/community/client/Client.js +++ b/libs/api-client/src/api/resources/community/client/Client.js @@ -11,7 +11,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -20,7 +19,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -28,13 +26,11 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; @@ -43,12 +39,10 @@ import * as core from '../../../../core'; import * as environments from '../../../../environments'; import * as errors from '../../../../errors/index'; import * as serializers from '../../../../serialization/index'; - export class Community { constructor(_options) { this._options = _options; } - /** * @param {CommonApi.GetCommunitiesRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -183,7 +177,6 @@ export class Community { } }); } - /** * @param {CommonApi.GetCommunityRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -270,7 +263,6 @@ export class Community { } }); } - /** * @param {CommonApi.GetMembersRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -397,7 +389,6 @@ export class Community { } }); } - /** * @param {CommonApi.CreateCommunityRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -487,7 +478,6 @@ export class Community { } }); } - /** * @param {CommonApi.UpdateCommunityRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -573,7 +563,6 @@ export class Community { } }); } - /** * @param {CommonApi.CreateTopicRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -656,7 +645,6 @@ export class Community { } }); } - /** * @param {CommonApi.UpdateTopicRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -740,7 +728,6 @@ export class Community { } }); } - /** * @param {CommonApi.DeleteTopicRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -824,7 +811,6 @@ export class Community { } }); } - /** * @param {CommonApi.CreateGroupRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -911,7 +897,6 @@ export class Community { } }); } - /** * @param {CommonApi.UpdateGroupRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -995,7 +980,6 @@ export class Community { } }); } - /** * @param {CommonApi.DeleteGroupRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -1079,7 +1063,6 @@ export class Community { } }); } - /** * @param {CommonApi.JoinCommunityRequest} request * @param {Community.RequestOptions} requestOptions - Request-specific configuration. @@ -1162,7 +1145,6 @@ export class Community { } }); } - _getCustomAuthorizationHeaders() { return __awaiter(this, void 0, void 0, function* () { const apiKeyValue = yield core.Supplier.get(this._options.apiKey); diff --git a/libs/api-client/src/api/resources/community/client/requests/CreateCommunityRequest.d.ts b/libs/api-client/src/api/resources/community/client/requests/CreateCommunityRequest.d.ts index b08147304c1..ac855cbf49a 100644 --- a/libs/api-client/src/api/resources/community/client/requests/CreateCommunityRequest.d.ts +++ b/libs/api-client/src/api/resources/community/client/requests/CreateCommunityRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/community/client/requests/CreateGroupRequest.d.ts b/libs/api-client/src/api/resources/community/client/requests/CreateGroupRequest.d.ts index 4ffa6b4c7df..9660e472753 100644 --- a/libs/api-client/src/api/resources/community/client/requests/CreateGroupRequest.d.ts +++ b/libs/api-client/src/api/resources/community/client/requests/CreateGroupRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/community/client/requests/CreateTopicRequest.d.ts b/libs/api-client/src/api/resources/community/client/requests/CreateTopicRequest.d.ts index dde5682283b..0bbf46aecea 100644 --- a/libs/api-client/src/api/resources/community/client/requests/CreateTopicRequest.d.ts +++ b/libs/api-client/src/api/resources/community/client/requests/CreateTopicRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/community/client/requests/GetCommunitiesRequest.d.ts b/libs/api-client/src/api/resources/community/client/requests/GetCommunitiesRequest.d.ts index eec6e0e954a..b9a5772b8c6 100644 --- a/libs/api-client/src/api/resources/community/client/requests/GetCommunitiesRequest.d.ts +++ b/libs/api-client/src/api/resources/community/client/requests/GetCommunitiesRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * {} diff --git a/libs/api-client/src/api/resources/community/client/requests/GetMembersRequest.d.ts b/libs/api-client/src/api/resources/community/client/requests/GetMembersRequest.d.ts index 57b8d45eb12..a9465d03617 100644 --- a/libs/api-client/src/api/resources/community/client/requests/GetMembersRequest.d.ts +++ b/libs/api-client/src/api/resources/community/client/requests/GetMembersRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/community/client/requests/JoinCommunityRequest.d.ts b/libs/api-client/src/api/resources/community/client/requests/JoinCommunityRequest.d.ts new file mode 100644 index 00000000000..9191b94a0ad --- /dev/null +++ b/libs/api-client/src/api/resources/community/client/requests/JoinCommunityRequest.d.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +/** + * @example + * { + * communityId: "community_id" + * } + */ +export interface JoinCommunityRequest { + communityId: string; +} diff --git a/libs/api-client/src/api/resources/community/client/requests/JoinCommunityRequest.js b/libs/api-client/src/api/resources/community/client/requests/JoinCommunityRequest.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/community/client/requests/JoinCommunityRequest.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/community/client/requests/UpdateCommunityRequest.d.ts b/libs/api-client/src/api/resources/community/client/requests/UpdateCommunityRequest.d.ts index 918bbe83301..186dd9d7448 100644 --- a/libs/api-client/src/api/resources/community/client/requests/UpdateCommunityRequest.d.ts +++ b/libs/api-client/src/api/resources/community/client/requests/UpdateCommunityRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/community/client/requests/UpdateGroupRequest.d.ts b/libs/api-client/src/api/resources/community/client/requests/UpdateGroupRequest.d.ts index 71a2dbd736a..0e5154a1ced 100644 --- a/libs/api-client/src/api/resources/community/client/requests/UpdateGroupRequest.d.ts +++ b/libs/api-client/src/api/resources/community/client/requests/UpdateGroupRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponse.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponse.d.ts index 3a6e4ec7055..3c50d4b2fe0 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponse.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponse { community: CommonApi.CreateCommunityResponseCommunity; adminAddress?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunity.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunity.d.ts index 08b526d364a..2b37cabd8c0 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunity.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunity.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunity { id: string; name: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItem.d.ts index 3a859829dcf..3ae73cfca10 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityAddressesItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.d.ts index 3b231e2f650..a6fcec90888 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityAddressesItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..43ebbe735b7 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateCommunityResponseCommunityAddressesItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.js b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.d.ts index 535625b6f53..b35cc3a2472 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityAddressesItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityChainNode.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityChainNode.d.ts index 84986e768d7..bf750c57b76 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityChainNode.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityChainNode.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityChainNode { id?: number; url?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.d.ts index 77229d2b907..d040988f0fc 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityCommunityStakesItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.d.ts index 7b7468fbb0c..70dd320d813 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem { transactionHash: string; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.d.ts index 2368d5f6fd1..e85fe93f14e 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityCommunityTagsItem { communityId: string; tagId: number; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.d.ts index 73ef8414106..0cf75424c80 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain Contest Manager */ diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.d.ts index 166e1571f4c..549f990c8b8 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.d.ts index ec07c76bb89..1403997252a 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain content related actions on contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.d.ts index fb53ebedafe..276df22a564 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityContestManagersItemTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItem.d.ts index 03d3914cc8b..3bb684d47cf 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityGroupsItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.d.ts index b07b08b0c5f..d289b480837 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type CreateCommunityResponseCommunityGroupsItemRequirementsItem = | CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItem.Threshold @@ -12,7 +11,6 @@ export declare namespace CreateCommunityResponseCommunityGroupsItemRequirementsI extends CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold { rule: 'threshold'; } - interface Allow extends CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow { rule: 'allow'; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.d.ts index 222f79f5d7d..d1d4eef487d 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow { data: CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData; } diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.d.ts index 4a69a6eeed8..2b732912049 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold { data: CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData; } diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.d.ts index 1dae08cc80b..66d6b38eb16 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData { threshold: string; source: CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.d.ts index 4a78e30e61c..00487f4f7c4 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource = | CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index 5f96e31a9fe..a4fdce763e2 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree { sourceType: CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType; cosmosChainId: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index 5541fa6cf53..ce436ef1c5c 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId { sourceType: CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType; evmChainId: number; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityTerms.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityTerms.d.ts index 568c6478a04..9b636453bd4 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityTerms.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityTerms.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type CreateCommunityResponseCommunityTerms = | CommonApi.CreateCommunityResponseCommunityTermsZero | string; diff --git a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityTopicsItem.d.ts index 871c4a91b19..08a4a49d8c8 100644 --- a/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateCommunityResponseCommunityTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommunityResponseCommunityTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItem.d.ts index 62ecaebfbaa..f572b6b6a47 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type CreateGroupRequestRequirementsItem = | CommonApi.CreateGroupRequestRequirementsItem.Threshold | CommonApi.CreateGroupRequestRequirementsItem.Allow; @@ -11,7 +10,6 @@ export declare namespace CreateGroupRequestRequirementsItem { extends CommonApi.CreateGroupRequestRequirementsItemThreshold { rule: 'threshold'; } - interface Allow extends CommonApi.CreateGroupRequestRequirementsItemAllow { rule: 'allow'; } diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemAllow.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemAllow.d.ts index 8adde7400b6..32abc5f52d1 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemAllow.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemAllow.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupRequestRequirementsItemAllow { data: CommonApi.CreateGroupRequestRequirementsItemAllowData; } diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThreshold.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThreshold.d.ts index 337be3516e1..3993bdfea48 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThreshold.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupRequestRequirementsItemThreshold { data: CommonApi.CreateGroupRequestRequirementsItemThresholdData; } diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.d.ts index c55d05893ce..6208d8c85a1 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupRequestRequirementsItemThresholdData { threshold: string; source: CommonApi.CreateGroupRequestRequirementsItemThresholdDataSource; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.d.ts index 1249bd4d477..93c5498d30e 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type CreateGroupRequestRequirementsItemThresholdDataSource = | CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceTokenId | CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts index 7cfab390422..51846a165d5 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupRequestRequirementsItemThresholdDataSourceThree { sourceType: CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType; cosmosChainId: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts index 5497a1c7c44..5380a1b7018 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupRequestRequirementsItemThresholdDataSourceTokenId { sourceType: CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType; evmChainId: number; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponse.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponse.d.ts index 52c0aa58d50..3ca22248567 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponse.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponse { id?: string; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItem.d.ts index 384433465ca..bf8c35fc001 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseAddressesItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUser.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUser.d.ts index d356fedb637..35ebc4c2c99 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUser.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseAddressesItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..ee1f9ac3e3f --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateGroupResponseAddressesItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.js b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserProfile.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserProfile.d.ts index 17d32926779..43e01e0118b 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseAddressesItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseAddressesItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseChainNode.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseChainNode.d.ts index 1e3578afa1f..afd69370bee 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseChainNode.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseChainNode.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseChainNode { id?: number; url?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityStakesItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityStakesItem.d.ts index d5c0800eb4d..9cb411de2b1 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityStakesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityStakesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseCommunityStakesItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.d.ts index d29dea68bd9..243dd001da6 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseCommunityStakesItemStakeTransactionsItem { transactionHash: string; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityTagsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityTagsItem.d.ts index 5bae1d6553c..f218e66705b 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityTagsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseCommunityTagsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseCommunityTagsItem { communityId: string; tagId: number; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItem.d.ts index c46bfa3ef33..6c168be3d60 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain Contest Manager */ diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.d.ts index 4962aa00eb5..d1acea005bd 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.d.ts index b1525b266fb..ee61d0290e8 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain content related actions on contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.d.ts index fa6c4520ad8..4d734858ff9 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseContestManagersItemTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItem.d.ts index 8051bd7367c..d5ac3f47ffa 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseGroupsItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.d.ts index 907ab354d19..f4e9f5a916d 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type CreateGroupResponseGroupsItemRequirementsItem = | CommonApi.CreateGroupResponseGroupsItemRequirementsItem.Threshold | CommonApi.CreateGroupResponseGroupsItemRequirementsItem.Allow; @@ -11,7 +10,6 @@ export declare namespace CreateGroupResponseGroupsItemRequirementsItem { extends CommonApi.CreateGroupResponseGroupsItemRequirementsItemThreshold { rule: 'threshold'; } - interface Allow extends CommonApi.CreateGroupResponseGroupsItemRequirementsItemAllow { rule: 'allow'; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.d.ts index b50666abd55..f3e46272b6d 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseGroupsItemRequirementsItemAllow { data: CommonApi.CreateGroupResponseGroupsItemRequirementsItemAllowData; } diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.d.ts index 3f4c1e19cd4..2b5a1a8087b 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseGroupsItemRequirementsItemThreshold { data: CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdData; } diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.d.ts index 86fb1a96e6f..1566942aa64 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseGroupsItemRequirementsItemThresholdData { threshold: string; source: CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.d.ts index a07a2af5702..e0ca11ecac8 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource = | CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index 13d1e57380f..5412b6446b4 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree { sourceType: CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType; cosmosChainId: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index b71ba5bad63..7a193ac478f 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId { sourceType: CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType; evmChainId: number; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseTerms.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseTerms.d.ts index 12afe2bfc80..ffac65e156c 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseTerms.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseTerms.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type CreateGroupResponseTerms = | CommonApi.CreateGroupResponseTermsZero | string; diff --git a/libs/api-client/src/api/resources/community/types/CreateGroupResponseTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/CreateGroupResponseTopicsItem.d.ts index f9bc1dc80d5..3dfd27fc4ec 100644 --- a/libs/api-client/src/api/resources/community/types/CreateGroupResponseTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateGroupResponseTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateGroupResponseTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/CreateTopicResponse.d.ts b/libs/api-client/src/api/resources/community/types/CreateTopicResponse.d.ts index 63e09cde515..88dded80c04 100644 --- a/libs/api-client/src/api/resources/community/types/CreateTopicResponse.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateTopicResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateTopicResponse { topic: CommonApi.CreateTopicResponseTopic; userId: number; diff --git a/libs/api-client/src/api/resources/community/types/CreateTopicResponseTopic.d.ts b/libs/api-client/src/api/resources/community/types/CreateTopicResponseTopic.d.ts index 55cdb47095d..ef1eb96bb22 100644 --- a/libs/api-client/src/api/resources/community/types/CreateTopicResponseTopic.d.ts +++ b/libs/api-client/src/api/resources/community/types/CreateTopicResponseTopic.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateTopicResponseTopic { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponse.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponse.d.ts index 62818bb8563..44308969798 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponse.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponse { limit: number; page: number; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItem.d.ts index 48733215a5c..2bfa53a62eb 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItem { id: string; name: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.d.ts index e8b748e17fb..04b03e3ce92 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemAddressesItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.d.ts index c1710c81d43..5c690c4578f 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemAddressesItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..75810708bcf --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetCommunitiesResponseResultsItemAddressesItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.js b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.d.ts index 915ef3f3dd1..2857a0424f6 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemAddressesItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemChainNode.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemChainNode.d.ts index 7153374781d..82e6b8244f5 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemChainNode.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemChainNode.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemChainNode { id?: number; url?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.d.ts index 9e31ee52244..5d1b9e2fcdd 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemCommunityStakesItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.d.ts index 22a6f023971..1c39cdc65ab 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem { transactionHash: string; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.d.ts index fa14c863a3d..f7c25d98370 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemCommunityTagsItem { communityId: string; tagId: number; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.d.ts index fdda62757ff..830eee4a98f 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain Contest Manager */ diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.d.ts index f1f13bf7f20..1b142951fe4 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.d.ts index a8a022b52eb..b02cb2a495f 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain content related actions on contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.d.ts index 63ca3f62695..6b7b016df7a 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemContestManagersItemTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.d.ts index 2e2bfc854c1..6398ac85cc6 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemGroupsItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.d.ts index 322e43a41e1..84ec68848ea 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type GetCommunitiesResponseResultsItemGroupsItemRequirementsItem = | CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.Threshold @@ -12,7 +11,6 @@ export declare namespace GetCommunitiesResponseResultsItemGroupsItemRequirements extends CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold { rule: 'threshold'; } - interface Allow extends CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow { rule: 'allow'; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.d.ts index 9fe63e47b04..14bf48d6410 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow { data: CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData; } diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.d.ts index ec6ab32f73d..a01cb14a989 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold { data: CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData; } diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.d.ts index 898a856f337..d901dad0370 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData { threshold: string; source: CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.d.ts index db7afc0d901..550c8cc0e5e 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource = | CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index 0e1a646463b..a5584816226 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree { sourceType: CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType; cosmosChainId: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index beb187dd916..419836aa389 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId { sourceType: CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType; evmChainId: number; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemTerms.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemTerms.d.ts index b30701aff35..6ddcca4cb8a 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemTerms.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemTerms.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type GetCommunitiesResponseResultsItemTerms = | CommonApi.GetCommunitiesResponseResultsItemTermsZero | string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.d.ts index b46b2fd3dfb..9647fddb101 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunitiesResponseResultsItemTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponse.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponse.d.ts index c746235fd1a..5482629dacd 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponse.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type GetCommunityResponse = | CommonApi.GetCommunityResponseAddresses | unknown; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddresses.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddresses.d.ts index 9e378cce85a..7112e7b4648 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddresses.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddresses.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddresses { id: string; name: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItem.d.ts index 315b6ac396f..16a1e961f02 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesAddressesItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.d.ts index 2b3bf38f9b0..613586757b7 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesAddressesItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..d89fdfac87c --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetCommunityResponseAddressesAddressesItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.js b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.d.ts index 364c7598b7d..eaf56a68878 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesAddressesItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.d.ts index 80318c377f5..3342aa5a841 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesAdminsAndModsItem { address: string; role: CommonApi.GetCommunityResponseAddressesAdminsAndModsItemRole; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesChainNode.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesChainNode.d.ts index 17eb6ccfe99..c23d7ecaf9a 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesChainNode.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesChainNode.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesChainNode { id?: number; url?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.d.ts index 7c9f35db309..7a5b96dc567 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesCommunityStakesItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.d.ts index 16d28250ddd..129574f4279 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem { transactionHash: string; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.d.ts index 8468a52a1a8..273a2131176 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesCommunityTagsItem { communityId: string; tagId: number; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItem.d.ts index 2b90456c751..04655c9ec91 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain Contest Manager */ diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.d.ts index 17343329454..d46cf900702 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.d.ts index 8acd6b57e53..8e2d777629d 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain content related actions on contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.d.ts index 97fdde0259b..3cfe69f7d23 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesContestManagersItemTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItem.d.ts index 53a9dd8f7c3..eb66aa72a1a 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesGroupsItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.d.ts index 7612db8d64b..b36370330a8 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type GetCommunityResponseAddressesGroupsItemRequirementsItem = | CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItem.Threshold | CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItem.Allow; @@ -11,7 +10,6 @@ export declare namespace GetCommunityResponseAddressesGroupsItemRequirementsItem extends CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold { rule: 'threshold'; } - interface Allow extends CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemAllow { rule: 'allow'; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.d.ts index 071d56da921..751d84ccc50 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesGroupsItemRequirementsItemAllow { data: CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData; } diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.d.ts index 4c5e397026c..b3305e3e62e 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold { data: CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData; } diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.d.ts index 50529e04486..76ed1c3808f 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData { threshold: string; source: CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.d.ts index f1cbabdf1dc..63130908642 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource = | CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index 694ab74bab0..2b5925ba805 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree { sourceType: CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType; cosmosChainId: string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index ecd4ab05273..787b8f9353f 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId { sourceType: CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType; evmChainId: number; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesTerms.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesTerms.d.ts index 0493bab748e..3f4b5c0ea12 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesTerms.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesTerms.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type GetCommunityResponseAddressesTerms = | CommonApi.GetCommunityResponseAddressesTermsZero | string; diff --git a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesTopicsItem.d.ts index 10af0e424cd..4db47366fd4 100644 --- a/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetCommunityResponseAddressesTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetCommunityResponseAddressesTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/GetMembersResponse.d.ts b/libs/api-client/src/api/resources/community/types/GetMembersResponse.d.ts index cf0d0d2f27a..46422079b44 100644 --- a/libs/api-client/src/api/resources/community/types/GetMembersResponse.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetMembersResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetMembersResponse { limit: number; page: number; diff --git a/libs/api-client/src/api/resources/community/types/GetMembersResponseResultsItem.d.ts b/libs/api-client/src/api/resources/community/types/GetMembersResponseResultsItem.d.ts index b8309a34aff..0fea66f391b 100644 --- a/libs/api-client/src/api/resources/community/types/GetMembersResponseResultsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/GetMembersResponseResultsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface GetMembersResponseResultsItem { userId: number; profileName?: string; diff --git a/libs/api-client/src/api/resources/community/types/JoinCommunityResponse.d.ts b/libs/api-client/src/api/resources/community/types/JoinCommunityResponse.d.ts new file mode 100644 index 00000000000..c06a928361c --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/JoinCommunityResponse.d.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface JoinCommunityResponse { + communityId: string; + base: CommonApi.JoinCommunityResponseBase; + addressId: number; + address: string; + walletId?: CommonApi.JoinCommunityResponseWalletId; + ss58Prefix?: number; +} diff --git a/libs/api-client/src/api/resources/community/types/JoinCommunityResponse.js b/libs/api-client/src/api/resources/community/types/JoinCommunityResponse.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/JoinCommunityResponse.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/community/types/JoinCommunityResponseBase.d.ts b/libs/api-client/src/api/resources/community/types/JoinCommunityResponseBase.d.ts new file mode 100644 index 00000000000..15397504f1c --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/JoinCommunityResponseBase.d.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export declare type JoinCommunityResponseBase = + | 'cosmos' + | 'substrate' + | 'ethereum' + | 'near' + | 'solana'; +export declare const JoinCommunityResponseBase: { + readonly Cosmos: 'cosmos'; + readonly Substrate: 'substrate'; + readonly Ethereum: 'ethereum'; + readonly Near: 'near'; + readonly Solana: 'solana'; +}; diff --git a/libs/api-client/src/api/resources/community/types/JoinCommunityResponseBase.js b/libs/api-client/src/api/resources/community/types/JoinCommunityResponseBase.js new file mode 100644 index 00000000000..6fa2f0f1eb2 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/JoinCommunityResponseBase.js @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export const JoinCommunityResponseBase = { + Cosmos: 'cosmos', + Substrate: 'substrate', + Ethereum: 'ethereum', + Near: 'near', + Solana: 'solana', +}; diff --git a/libs/api-client/src/api/resources/community/types/JoinCommunityResponseWalletId.d.ts b/libs/api-client/src/api/resources/community/types/JoinCommunityResponseWalletId.d.ts new file mode 100644 index 00000000000..abe6b60c7e3 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/JoinCommunityResponseWalletId.d.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export declare type JoinCommunityResponseWalletId = + | 'magic' + | 'polkadot' + | 'metamask' + | 'walletconnect' + | 'keplr-ethereum' + | 'keplr' + | 'leap' + | 'near' + | 'terrastation' + | 'terra-walletconnect' + | 'cosm-metamask' + | 'phantom' + | 'coinbase'; +export declare const JoinCommunityResponseWalletId: { + readonly Magic: 'magic'; + readonly Polkadot: 'polkadot'; + readonly Metamask: 'metamask'; + readonly Walletconnect: 'walletconnect'; + readonly KeplrEthereum: 'keplr-ethereum'; + readonly Keplr: 'keplr'; + readonly Leap: 'leap'; + readonly Near: 'near'; + readonly Terrastation: 'terrastation'; + readonly TerraWalletconnect: 'terra-walletconnect'; + readonly CosmMetamask: 'cosm-metamask'; + readonly Phantom: 'phantom'; + readonly Coinbase: 'coinbase'; +}; diff --git a/libs/api-client/src/api/resources/community/types/JoinCommunityResponseWalletId.js b/libs/api-client/src/api/resources/community/types/JoinCommunityResponseWalletId.js new file mode 100644 index 00000000000..63fa4b08e63 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/JoinCommunityResponseWalletId.js @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export const JoinCommunityResponseWalletId = { + Magic: 'magic', + Polkadot: 'polkadot', + Metamask: 'metamask', + Walletconnect: 'walletconnect', + KeplrEthereum: 'keplr-ethereum', + Keplr: 'keplr', + Leap: 'leap', + Near: 'near', + Terrastation: 'terrastation', + TerraWalletconnect: 'terra-walletconnect', + CosmMetamask: 'cosm-metamask', + Phantom: 'phantom', + Coinbase: 'coinbase', +}; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItem.d.ts index ff69736930f..236d74e1a5a 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestAddressesItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUser.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUser.d.ts index 030deecc127..d5b9952aaaa 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUser.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestAddressesItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..4533c59c6e9 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateCommunityRequestAddressesItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.js b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.d.ts index 8a799e7b831..15a29714c24 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestAddressesItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestChainNode.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestChainNode.d.ts index b8739c445f5..c86016b6ba6 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestChainNode.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestChainNode.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestChainNode { id?: number; url?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityStakesItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityStakesItem.d.ts index 814c9937304..aa118604af3 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityStakesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityStakesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestCommunityStakesItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.d.ts index 5259f96b46d..80258dc3bce 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem { transactionHash: string; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityTagsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityTagsItem.d.ts index ef4369455d3..67901dc57ae 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityTagsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestCommunityTagsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestCommunityTagsItem { communityId: string; tagId: number; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItem.d.ts index f6bac27d48a..ee5ce9ec4a6 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain Contest Manager */ diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.d.ts index 0f62493d3fa..688696515e6 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.d.ts index f73ff5e597f..12c0cb614e0 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain content related actions on contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.d.ts index 2b461cefa95..e170f68ffa4 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestContestManagersItemTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItem.d.ts index 60379332155..474e9b41bd0 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestGroupsItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.d.ts index c5e004eb18e..819159bd4df 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateCommunityRequestGroupsItemRequirementsItem = | CommonApi.UpdateCommunityRequestGroupsItemRequirementsItem.Threshold | CommonApi.UpdateCommunityRequestGroupsItemRequirementsItem.Allow; @@ -11,7 +10,6 @@ export declare namespace UpdateCommunityRequestGroupsItemRequirementsItem { extends CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThreshold { rule: 'threshold'; } - interface Allow extends CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemAllow { rule: 'allow'; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.d.ts index ad040c0793c..06b61f21251 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestGroupsItemRequirementsItemAllow { data: CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemAllowData; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.d.ts index 343ac87cc62..75cf9904f4b 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestGroupsItemRequirementsItemThreshold { data: CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdData; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.d.ts index 9e93f82ffc1..39bcdefd30a 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestGroupsItemRequirementsItemThresholdData { threshold: string; source: CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.d.ts index 7d2db13001a..3c7a9337efe 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource = | CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index eb0ac192251..df16d1c7998 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree { sourceType: CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType; cosmosChainId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index 4cdb11051aa..3443ae74c7a 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId { sourceType: CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType; evmChainId: number; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestTerms.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestTerms.d.ts index d3c7fd00e61..a94194194a1 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestTerms.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestTerms.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateCommunityRequestTerms = | CommonApi.UpdateCommunityRequestTermsZero | string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestTopicsItem.d.ts index 95b15d52df3..4b6c91f9e5f 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityRequestTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityRequestTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponse.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponse.d.ts index 528071e75df..97d37be9669 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponse.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponse { id: string; name: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItem.d.ts index c31daf99592..f6783104b54 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseAddressesItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUser.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUser.d.ts index 75aafce44a6..47c4fb2ff4a 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUser.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseAddressesItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..9122b63c168 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateCommunityResponseAddressesItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.js b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.d.ts index f63027615b1..90cc035e4b7 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseAddressesItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseChainNode.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseChainNode.d.ts index b97cb492f3f..1b7fadcd473 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseChainNode.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseChainNode.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseChainNode { id?: number; url?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityStakesItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityStakesItem.d.ts index b17fc731f98..7419a4f6ccb 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityStakesItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityStakesItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseCommunityStakesItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.d.ts index 56cb3706e49..be78513bb6b 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem { transactionHash: string; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityTagsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityTagsItem.d.ts index 01339e42b8a..98b46fd056f 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityTagsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseCommunityTagsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseCommunityTagsItem { communityId: string; tagId: number; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItem.d.ts index 2743c4e030e..7752b3feb7d 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain Contest Manager */ diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.d.ts index 60f58eb2696..8e70eb05e61 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.d.ts index f63b7bc9265..672dd5684e9 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - /** * On-Chain content related actions on contest instance */ diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.d.ts index beb8934becd..4d85168eec2 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseContestManagersItemTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItem.d.ts index 4233d454058..97c851caf65 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseGroupsItem { id?: number; communityId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.d.ts index 1ccab3bcaec..47ff3652f76 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateCommunityResponseGroupsItemRequirementsItem = | CommonApi.UpdateCommunityResponseGroupsItemRequirementsItem.Threshold | CommonApi.UpdateCommunityResponseGroupsItemRequirementsItem.Allow; @@ -11,7 +10,6 @@ export declare namespace UpdateCommunityResponseGroupsItemRequirementsItem { extends CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThreshold { rule: 'threshold'; } - interface Allow extends CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemAllow { rule: 'allow'; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.d.ts index 61aedf31acf..d61a78649a8 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseGroupsItemRequirementsItemAllow { data: CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemAllowData; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.d.ts index bf2185adf60..ceaf53adbe7 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseGroupsItemRequirementsItemThreshold { data: CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdData; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.d.ts index 99362498cfe..3fe62f67b49 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseGroupsItemRequirementsItemThresholdData { threshold: string; source: CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.d.ts index 8f904d6b34e..a3a2aa8b2fe 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource = | CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index 66a79469c0e..0433d2766c6 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree { sourceType: CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType; cosmosChainId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index 209cf155ebd..b8b6e7bb6be 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId { sourceType: CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType; evmChainId: number; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseTerms.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseTerms.d.ts index baf3b48ea59..ddd18675bb6 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseTerms.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseTerms.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateCommunityResponseTerms = | CommonApi.UpdateCommunityResponseTermsZero | string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseTopicsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseTopicsItem.d.ts index 0745cad93c5..3792e6b23d6 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseTopicsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateCommunityResponseTopicsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateCommunityResponseTopicsItem { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItem.d.ts index 9a1a5ed5fa1..353bdaede2c 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateGroupRequestRequirementsItem = | CommonApi.UpdateGroupRequestRequirementsItem.Threshold | CommonApi.UpdateGroupRequestRequirementsItem.Allow; @@ -11,7 +10,6 @@ export declare namespace UpdateGroupRequestRequirementsItem { extends CommonApi.UpdateGroupRequestRequirementsItemThreshold { rule: 'threshold'; } - interface Allow extends CommonApi.UpdateGroupRequestRequirementsItemAllow { rule: 'allow'; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemAllow.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemAllow.d.ts index e3b777a6cc2..a64e004ea0f 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemAllow.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemAllow.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupRequestRequirementsItemAllow { data: CommonApi.UpdateGroupRequestRequirementsItemAllowData; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.d.ts index bc5e3a7949f..4a35e0c4497 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupRequestRequirementsItemThreshold { data: CommonApi.UpdateGroupRequestRequirementsItemThresholdData; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.d.ts index 36877cc0490..b2ca5ebc21e 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupRequestRequirementsItemThresholdData { threshold: string; source: CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSource; diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.d.ts index a476ab1fa2d..6a5663988a7 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateGroupRequestRequirementsItemThresholdDataSource = | CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId | CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts index 6b14db4e5ea..5da6942b4bc 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupRequestRequirementsItemThresholdDataSourceThree { sourceType: CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType; cosmosChainId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts index 03ae0bc7c1b..fbbb88a1315 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId { sourceType: CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType; evmChainId: number; diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupResponse.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupResponse.d.ts index ff12ffac78a..03e674d2d39 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupResponse.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupResponse { id?: number; communityId?: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItem.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItem.d.ts index dde2d1af386..260e0cd869a 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItem.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateGroupResponseRequirementsItem = | CommonApi.UpdateGroupResponseRequirementsItem.Threshold | CommonApi.UpdateGroupResponseRequirementsItem.Allow; @@ -11,7 +10,6 @@ export declare namespace UpdateGroupResponseRequirementsItem { extends CommonApi.UpdateGroupResponseRequirementsItemThreshold { rule: 'threshold'; } - interface Allow extends CommonApi.UpdateGroupResponseRequirementsItemAllow { rule: 'allow'; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemAllow.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemAllow.d.ts index cb47e2c8cb2..eda78c1462c 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemAllow.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemAllow.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupResponseRequirementsItemAllow { data: CommonApi.UpdateGroupResponseRequirementsItemAllowData; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.d.ts index f4e5d57a172..dd2c0e656d6 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupResponseRequirementsItemThreshold { data: CommonApi.UpdateGroupResponseRequirementsItemThresholdData; } diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.d.ts index a19c59a7b18..47221324bca 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupResponseRequirementsItemThresholdData { threshold: string; source: CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSource; diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.d.ts index 14d42823b0b..c3c8a1b90c0 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export declare type UpdateGroupResponseRequirementsItemThresholdDataSource = | CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId | CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.d.ts index 9735a7fe060..26192556ea4 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupResponseRequirementsItemThresholdDataSourceThree { sourceType: CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType; cosmosChainId: string; diff --git a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.d.ts index 1eb076620ac..d7e1cba5466 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId { sourceType: CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType; evmChainId: number; diff --git a/libs/api-client/src/api/resources/community/types/UpdateTopicResponse.d.ts b/libs/api-client/src/api/resources/community/types/UpdateTopicResponse.d.ts index 6c6b3f91fd5..7d9bfaa8d69 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateTopicResponse.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateTopicResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateTopicResponse { topic: CommonApi.UpdateTopicResponseTopic; userId: number; diff --git a/libs/api-client/src/api/resources/community/types/UpdateTopicResponseTopic.d.ts b/libs/api-client/src/api/resources/community/types/UpdateTopicResponseTopic.d.ts index 2b2a3d793dc..f924975cbcc 100644 --- a/libs/api-client/src/api/resources/community/types/UpdateTopicResponseTopic.d.ts +++ b/libs/api-client/src/api/resources/community/types/UpdateTopicResponseTopic.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateTopicResponseTopic { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/reaction/client/Client.d.ts b/libs/api-client/src/api/resources/reaction/client/Client.d.ts index efc05de6b6c..e2932d01387 100644 --- a/libs/api-client/src/api/resources/reaction/client/Client.d.ts +++ b/libs/api-client/src/api/resources/reaction/client/Client.d.ts @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import * as environments from '../../../../environments'; import * as CommonApi from '../../../index'; - export declare namespace Reaction { interface Options { environment?: core.Supplier; @@ -12,7 +11,6 @@ export declare namespace Reaction { /** Override the address header */ address?: core.Supplier; } - interface RequestOptions { /** The maximum time to wait for a response in seconds. */ timeoutInSeconds?: number; @@ -24,12 +22,9 @@ export declare namespace Reaction { address?: string | undefined; } } - export declare class Reaction { protected readonly _options: Reaction.Options; - constructor(_options: Reaction.Options); - /** * @param {CommonApi.CreateThreadReactionRequest} request * @param {Reaction.RequestOptions} requestOptions - Request-specific configuration. @@ -43,7 +38,6 @@ export declare class Reaction { request: CommonApi.CreateThreadReactionRequest, requestOptions?: Reaction.RequestOptions, ): Promise; - /** * @param {CommonApi.CreateCommentReactionRequest} request * @param {Reaction.RequestOptions} requestOptions - Request-specific configuration. @@ -57,7 +51,6 @@ export declare class Reaction { request: CommonApi.CreateCommentReactionRequest, requestOptions?: Reaction.RequestOptions, ): Promise; - /** * @param {CommonApi.DeleteReactionRequest} request * @param {Reaction.RequestOptions} requestOptions - Request-specific configuration. @@ -72,7 +65,6 @@ export declare class Reaction { request: CommonApi.DeleteReactionRequest, requestOptions?: Reaction.RequestOptions, ): Promise; - protected _getCustomAuthorizationHeaders(): Promise<{ 'x-api-key': string; }>; diff --git a/libs/api-client/src/api/resources/reaction/client/Client.js b/libs/api-client/src/api/resources/reaction/client/Client.js index ca48db3525d..36694921e80 100644 --- a/libs/api-client/src/api/resources/reaction/client/Client.js +++ b/libs/api-client/src/api/resources/reaction/client/Client.js @@ -11,7 +11,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -20,7 +19,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -28,13 +26,11 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; @@ -43,12 +39,10 @@ import * as core from '../../../../core'; import * as environments from '../../../../environments'; import * as errors from '../../../../errors/index'; import * as serializers from '../../../../serialization/index'; - export class Reaction { constructor(_options) { this._options = _options; } - /** * @param {CommonApi.CreateThreadReactionRequest} request * @param {Reaction.RequestOptions} requestOptions - Request-specific configuration. @@ -140,7 +134,6 @@ export class Reaction { } }); } - /** * @param {CommonApi.CreateCommentReactionRequest} request * @param {Reaction.RequestOptions} requestOptions - Request-specific configuration. @@ -232,7 +225,6 @@ export class Reaction { } }); } - /** * @param {CommonApi.DeleteReactionRequest} request * @param {Reaction.RequestOptions} requestOptions - Request-specific configuration. @@ -316,7 +308,6 @@ export class Reaction { } }); } - _getCustomAuthorizationHeaders() { return __awaiter(this, void 0, void 0, function* () { const apiKeyValue = yield core.Supplier.get(this._options.apiKey); diff --git a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponse.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponse.d.ts index edb0358d074..b293d3fb1ad 100644 --- a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponse.d.ts +++ b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentReactionResponse { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddress.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddress.d.ts index 12269eb9e3c..a4e383bd9f0 100644 --- a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddress.d.ts +++ b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentReactionResponseAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUser.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUser.d.ts index 99ad4755bcf..d519225d1d3 100644 --- a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUser.d.ts +++ b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentReactionResponseAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..944fff3e977 --- /dev/null +++ b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateCommentReactionResponseAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.js b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.d.ts index dddc5a24a60..15e5fb547f1 100644 --- a/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateCommentReactionResponseAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponse.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponse.d.ts index 0f6d6d0a802..17ec7c0d75e 100644 --- a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponse.d.ts +++ b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponse.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadReactionResponse { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddress.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddress.d.ts index ea9768a83a7..4ae16ef3162 100644 --- a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddress.d.ts +++ b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadReactionResponseAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUser.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUser.d.ts index 04c1bf42388..202d9895a62 100644 --- a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUser.d.ts +++ b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadReactionResponseAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..c23b3a195c9 --- /dev/null +++ b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateThreadReactionResponseAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.js b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.d.ts b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.d.ts index 2fb73553275..473737bddf8 100644 --- a/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadReactionResponseAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/thread/client/Client.d.ts b/libs/api-client/src/api/resources/thread/client/Client.d.ts index b2345cf8c47..1945430d569 100644 --- a/libs/api-client/src/api/resources/thread/client/Client.d.ts +++ b/libs/api-client/src/api/resources/thread/client/Client.d.ts @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import * as environments from '../../../../environments'; import * as CommonApi from '../../../index'; - export declare namespace Thread { interface Options { environment?: core.Supplier; @@ -12,7 +11,6 @@ export declare namespace Thread { /** Override the address header */ address?: core.Supplier; } - interface RequestOptions { /** The maximum time to wait for a response in seconds. */ timeoutInSeconds?: number; @@ -24,12 +22,9 @@ export declare namespace Thread { address?: string | undefined; } } - export declare class Thread { protected readonly _options: Thread.Options; - constructor(_options: Thread.Options); - /** * @param {CommonApi.CreateThreadRequest} request * @param {Thread.RequestOptions} requestOptions - Request-specific configuration. @@ -49,7 +44,6 @@ export declare class Thread { request: CommonApi.CreateThreadRequest, requestOptions?: Thread.RequestOptions, ): Promise; - /** * @param {CommonApi.UpdateThreadRequest} request * @param {Thread.RequestOptions} requestOptions - Request-specific configuration. @@ -63,7 +57,6 @@ export declare class Thread { request: CommonApi.UpdateThreadRequest, requestOptions?: Thread.RequestOptions, ): Promise; - /** * @param {CommonApi.DeleteThreadRequest} request * @param {Thread.RequestOptions} requestOptions - Request-specific configuration. @@ -77,7 +70,6 @@ export declare class Thread { request: CommonApi.DeleteThreadRequest, requestOptions?: Thread.RequestOptions, ): Promise; - protected _getCustomAuthorizationHeaders(): Promise<{ 'x-api-key': string; }>; diff --git a/libs/api-client/src/api/resources/thread/client/Client.js b/libs/api-client/src/api/resources/thread/client/Client.js index df4f464a875..a0942159d3d 100644 --- a/libs/api-client/src/api/resources/thread/client/Client.js +++ b/libs/api-client/src/api/resources/thread/client/Client.js @@ -11,7 +11,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -20,7 +19,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -28,13 +26,11 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; @@ -43,12 +39,10 @@ import * as core from '../../../../core'; import * as environments from '../../../../environments'; import * as errors from '../../../../errors/index'; import * as serializers from '../../../../serialization/index'; - export class Thread { constructor(_options) { this._options = _options; } - /** * @param {CommonApi.CreateThreadRequest} request * @param {Thread.RequestOptions} requestOptions - Request-specific configuration. @@ -137,7 +131,6 @@ export class Thread { } }); } - /** * @param {CommonApi.UpdateThreadRequest} request * @param {Thread.RequestOptions} requestOptions - Request-specific configuration. @@ -220,7 +213,6 @@ export class Thread { } }); } - /** * @param {CommonApi.DeleteThreadRequest} request * @param {Thread.RequestOptions} requestOptions - Request-specific configuration. @@ -303,7 +295,6 @@ export class Thread { } }); } - _getCustomAuthorizationHeaders() { return __awaiter(this, void 0, void 0, function* () { const apiKeyValue = yield core.Supplier.get(this._options.apiKey); diff --git a/libs/api-client/src/api/resources/thread/client/requests/CreateThreadRequest.d.ts b/libs/api-client/src/api/resources/thread/client/requests/CreateThreadRequest.d.ts index c38c9e919e8..b55e3a277b6 100644 --- a/libs/api-client/src/api/resources/thread/client/requests/CreateThreadRequest.d.ts +++ b/libs/api-client/src/api/resources/thread/client/requests/CreateThreadRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/thread/client/requests/UpdateThreadRequest.d.ts b/libs/api-client/src/api/resources/thread/client/requests/UpdateThreadRequest.d.ts index 3d8e0807f02..ef172037d9c 100644 --- a/libs/api-client/src/api/resources/thread/client/requests/UpdateThreadRequest.d.ts +++ b/libs/api-client/src/api/resources/thread/client/requests/UpdateThreadRequest.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../../index'; - /** * @example * { diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadRequestDiscordMeta.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadRequestDiscordMeta.d.ts index 52abcc39dd9..2fa705cf255 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadRequestDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadRequestDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadRequestDiscordMeta { user: CommonApi.CreateThreadRequestDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponse.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponse.d.ts index 35bcc2954cb..74ae8c1ab28 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponse.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponse.d.ts @@ -2,20 +2,18 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponse { id?: number; addressId: number; title: string; kind: string; - stage: string; + stage?: string; body?: string; - plaintext?: string; url?: string; topicId?: number; pinned?: boolean; communityId: string; - viewCount: number; + viewCount?: number; links?: CommonApi.CreateThreadResponseLinksItem[]; contentUrl?: string; readOnly?: boolean; @@ -31,9 +29,9 @@ export interface CreateThreadResponse { archivedAt?: Date; lockedAt?: Date; discordMeta?: CommonApi.CreateThreadResponseDiscordMeta; - reactionCount: number; - reactionWeightsSum: number; - commentCount: number; + reactionCount?: number; + reactionWeightsSum?: number; + commentCount?: number; activityRankDate?: Date; createdBy?: string; profileName?: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddress.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddress.d.ts index 00f93175ec8..adeec8b830d 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddress.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUser.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUser.d.ts index 41bb280dd5e..7694fdde3b4 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUser.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..c3cd69123d4 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateThreadResponseAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserApiKey.js b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserProfile.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserProfile.d.ts index 92c06538093..4f271f60813 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItem.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItem.d.ts index 6f0c7628470..95aa965c893 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItem.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseCollaboratorsItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.d.ts index 99d9fd3e07c..bae29c29de9 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseCollaboratorsItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..d76d122c363 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateThreadResponseCollaboratorsItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.js b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.d.ts index 69b69cc1a7e..d6b33c4bb01 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseCollaboratorsItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseDiscordMeta.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseDiscordMeta.d.ts index eabdaac1122..6de593c933e 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseDiscordMeta { user: CommonApi.CreateThreadResponseDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseLinksItem.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseLinksItem.d.ts index 9470813efde..3150aa6bb36 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseLinksItem.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseLinksItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseLinksItem { source: CommonApi.CreateThreadResponseLinksItemSource; identifier: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItem.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItem.d.ts index 3e47831c9a2..0685e6ecd72 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItem.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseReactionsItem { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddress.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddress.d.ts index 08770b598cd..1ed126d8997 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddress.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseReactionsItemAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.d.ts index 53944a56f1d..0d80f7bc4fc 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseReactionsItemAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..15c113e5e31 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface CreateThreadResponseReactionsItemAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.js b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.d.ts index c081e9bc267..0b7ece10ffb 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseReactionsItemAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseTopic.d.ts b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseTopic.d.ts index f7481cfe1b7..0287dec5512 100644 --- a/libs/api-client/src/api/resources/thread/types/CreateThreadResponseTopic.d.ts +++ b/libs/api-client/src/api/resources/thread/types/CreateThreadResponseTopic.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface CreateThreadResponseTopic { id?: number; name?: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponse.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponse.d.ts index ae14115a4d5..7cc09aa9a28 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponse.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponse.d.ts @@ -2,20 +2,18 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponse { id?: number; addressId: number; title: string; kind: string; - stage: string; + stage?: string; body?: string; - plaintext?: string; url?: string; topicId?: number; pinned?: boolean; communityId: string; - viewCount: number; + viewCount?: number; links?: CommonApi.UpdateThreadResponseLinksItem[]; contentUrl?: string; readOnly?: boolean; @@ -31,9 +29,9 @@ export interface UpdateThreadResponse { archivedAt?: Date; lockedAt?: Date; discordMeta?: CommonApi.UpdateThreadResponseDiscordMeta; - reactionCount: number; - reactionWeightsSum: number; - commentCount: number; + reactionCount?: number; + reactionWeightsSum?: number; + commentCount?: number; activityRankDate?: Date; createdBy?: string; profileName?: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddress.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddress.d.ts index 3efda890103..55a6d1cf978 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddress.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUser.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUser.d.ts index 55c03895daf..4aba85fd3bd 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUser.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..aa1d7993cd3 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateThreadResponseAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserApiKey.js b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserProfile.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserProfile.d.ts index 22dbb314c8b..19456b9a30f 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItem.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItem.d.ts index fb5e82b1f8c..292701811db 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItem.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseCollaboratorsItem { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.d.ts index 5baeb66b064..8fc299afceb 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseCollaboratorsItemUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..a1bd7fb9272 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateThreadResponseCollaboratorsItemUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.js b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.d.ts index f9d81d49216..3db88866f76 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseCollaboratorsItemUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseDiscordMeta.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseDiscordMeta.d.ts index 4e273c5510f..4cd18ee5dc8 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseDiscordMeta.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseDiscordMeta { user: CommonApi.UpdateThreadResponseDiscordMetaUser; channelId: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseLinksItem.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseLinksItem.d.ts index 5a3682eb6a8..2ad0de3c34d 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseLinksItem.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseLinksItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseLinksItem { source: CommonApi.UpdateThreadResponseLinksItemSource; identifier: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItem.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItem.d.ts index 20953bb36ec..22a80bceb33 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItem.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItem.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseReactionsItem { id?: number; addressId: number; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddress.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddress.d.ts index 31da1ea9410..0fa6df3922d 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddress.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddress.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseReactionsItemAddress { id?: number; address: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.d.ts index 4e621624170..7085341f2eb 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseReactionsItemAddressUser { id?: number; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..880a00bde11 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface UpdateThreadResponseReactionsItemAddressUserApiKey { + userId?: number; + hashedApiKey: string; + salt: string; + createdAt?: Date; + updatedAt?: Date; +} diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.js b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.d.ts index 784574efdb5..49647d47256 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseReactionsItemAddressUserProfile { name?: string; email?: string; diff --git a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseTopic.d.ts b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseTopic.d.ts index cea6aa3e83c..197c6e54c25 100644 --- a/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseTopic.d.ts +++ b/libs/api-client/src/api/resources/thread/types/UpdateThreadResponseTopic.d.ts @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; - export interface UpdateThreadResponseTopic { id?: number; name?: string; diff --git a/libs/api-client/src/core/fetcher/APIResponse.d.ts b/libs/api-client/src/core/fetcher/APIResponse.d.ts index d5cf6970b8f..aae27360004 100644 --- a/libs/api-client/src/core/fetcher/APIResponse.d.ts +++ b/libs/api-client/src/core/fetcher/APIResponse.d.ts @@ -1,13 +1,11 @@ export declare type APIResponse = | SuccessfulResponse | FailedResponse; - export interface SuccessfulResponse { ok: true; body: T; headers?: Record; } - export interface FailedResponse { ok: false; error: T; diff --git a/libs/api-client/src/core/fetcher/Fetcher.d.ts b/libs/api-client/src/core/fetcher/Fetcher.d.ts index 516fabb9763..5366b52a7dc 100644 --- a/libs/api-client/src/core/fetcher/Fetcher.d.ts +++ b/libs/api-client/src/core/fetcher/Fetcher.d.ts @@ -1,5 +1,4 @@ import { APIResponse } from './APIResponse'; - export declare type FetchFunction = ( args: Fetcher.Args, ) => Promise>; @@ -19,37 +18,30 @@ export declare namespace Fetcher { responseType?: 'json' | 'blob' | 'sse' | 'streaming' | 'text'; duplex?: 'half'; } - type Error = | FailedStatusCodeError | NonJsonError | TimeoutError | UnknownError; - interface FailedStatusCodeError { reason: 'status-code'; statusCode: number; body: unknown; } - interface NonJsonError { reason: 'non-json'; statusCode: number; rawBody: string; } - interface TimeoutError { reason: 'timeout'; } - interface UnknownError { reason: 'unknown'; errorMessage: string; } } - export declare function fetcherImpl( args: Fetcher.Args, ): Promise>; - export declare const fetcher: FetchFunction; diff --git a/libs/api-client/src/core/fetcher/Fetcher.js b/libs/api-client/src/core/fetcher/Fetcher.js index 0742c5b1a08..169a756f59b 100644 --- a/libs/api-client/src/core/fetcher/Fetcher.js +++ b/libs/api-client/src/core/fetcher/Fetcher.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,13 +23,11 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; @@ -41,7 +37,6 @@ import { getRequestBody } from './getRequestBody'; import { getResponseBody } from './getResponseBody'; import { makeRequest } from './makeRequest'; import { requestWithRetries } from './requestWithRetries'; - export function fetcherImpl(args) { return __awaiter(this, void 0, void 0, function* () { const headers = {}; @@ -131,5 +126,4 @@ export function fetcherImpl(args) { } }); } - export const fetcher = fetcherImpl; diff --git a/libs/api-client/src/core/fetcher/Supplier.js b/libs/api-client/src/core/fetcher/Supplier.js index 84f494599a9..e12e42a8392 100644 --- a/libs/api-client/src/core/fetcher/Supplier.js +++ b/libs/api-client/src/core/fetcher/Supplier.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,13 +23,11 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; diff --git a/libs/api-client/src/core/fetcher/createRequestUrl.js b/libs/api-client/src/core/fetcher/createRequestUrl.js index 97ed3c875b9..94ab4b347dd 100644 --- a/libs/api-client/src/core/fetcher/createRequestUrl.js +++ b/libs/api-client/src/core/fetcher/createRequestUrl.js @@ -1,5 +1,4 @@ import qs from 'qs'; - export function createRequestUrl(baseUrl, queryParameters) { return Object.keys( queryParameters !== null && queryParameters !== void 0 diff --git a/libs/api-client/src/core/fetcher/getFetchFn.js b/libs/api-client/src/core/fetcher/getFetchFn.js index bbf9276b08c..513e1e69c6e 100644 --- a/libs/api-client/src/core/fetcher/getFetchFn.js +++ b/libs/api-client/src/core/fetcher/getFetchFn.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,18 +23,15 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { RUNTIME } from '../runtime'; - /** * Returns a fetch function based on the runtime */ diff --git a/libs/api-client/src/core/fetcher/getRequestBody.d.ts b/libs/api-client/src/core/fetcher/getRequestBody.d.ts index 3d681ae1014..fb635c578af 100644 --- a/libs/api-client/src/core/fetcher/getRequestBody.d.ts +++ b/libs/api-client/src/core/fetcher/getRequestBody.d.ts @@ -4,7 +4,6 @@ export declare namespace GetRequestBody { type: 'json' | 'file' | 'bytes' | 'other'; } } - export declare function getRequestBody({ body, type, diff --git a/libs/api-client/src/core/fetcher/getRequestBody.js b/libs/api-client/src/core/fetcher/getRequestBody.js index b9323a13912..c53709f3637 100644 --- a/libs/api-client/src/core/fetcher/getRequestBody.js +++ b/libs/api-client/src/core/fetcher/getRequestBody.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,17 +23,14 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; - export function getRequestBody({ body, type }) { return __awaiter(this, void 0, void 0, function* () { if (type.includes('json')) { diff --git a/libs/api-client/src/core/fetcher/getResponseBody.js b/libs/api-client/src/core/fetcher/getResponseBody.js index 8c0677d8bd5..797d874475c 100644 --- a/libs/api-client/src/core/fetcher/getResponseBody.js +++ b/libs/api-client/src/core/fetcher/getResponseBody.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,18 +23,15 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { chooseStreamWrapper } from './stream-wrappers/chooseStreamWrapper'; - export function getResponseBody(response, responseType) { return __awaiter(this, void 0, void 0, function* () { if (response.body != null && responseType === 'blob') { diff --git a/libs/api-client/src/core/fetcher/makeRequest.js b/libs/api-client/src/core/fetcher/makeRequest.js index 0e0b0ab9bf1..96292a162fe 100644 --- a/libs/api-client/src/core/fetcher/makeRequest.js +++ b/libs/api-client/src/core/fetcher/makeRequest.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,18 +23,15 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { anySignal, getTimeoutSignal } from './signals'; - export const makeRequest = ( fetchFn, url, diff --git a/libs/api-client/src/core/fetcher/requestWithRetries.js b/libs/api-client/src/core/fetcher/requestWithRetries.js index b27e3c31deb..296c2899f06 100644 --- a/libs/api-client/src/core/fetcher/requestWithRetries.js +++ b/libs/api-client/src/core/fetcher/requestWithRetries.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,20 +23,17 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; const INITIAL_RETRY_DELAY = 1; const MAX_RETRY_DELAY = 60; const DEFAULT_MAX_RETRIES = 2; - export function requestWithRetries( requestFn, maxRetries = DEFAULT_MAX_RETRIES, diff --git a/libs/api-client/src/core/fetcher/signals.d.ts b/libs/api-client/src/core/fetcher/signals.d.ts index 384f03c5f42..8bb15df3a27 100644 --- a/libs/api-client/src/core/fetcher/signals.d.ts +++ b/libs/api-client/src/core/fetcher/signals.d.ts @@ -3,7 +3,6 @@ export declare function getTimeoutSignal(timeoutMs: number): { signal: AbortSignal; abortId: NodeJS.Timeout; }; - /** * Returns an abort signal that is getting aborted when * at least one of the specified abort signals is aborted. diff --git a/libs/api-client/src/core/fetcher/signals.js b/libs/api-client/src/core/fetcher/signals.js index c920d2a408d..1e8a43e29cf 100644 --- a/libs/api-client/src/core/fetcher/signals.js +++ b/libs/api-client/src/core/fetcher/signals.js @@ -1,11 +1,9 @@ const TIMEOUT = 'timeout'; - export function getTimeoutSignal(timeoutMs) { const controller = new AbortController(); const abortId = setTimeout(() => controller.abort(TIMEOUT), timeoutMs); return { signal: controller.signal, abortId }; } - /** * Returns an abort signal that is getting aborted when * at least one of the specified abort signals is aborted. diff --git a/libs/api-client/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.d.ts b/libs/api-client/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.d.ts index 1d761d21d56..2ec22226b70 100644 --- a/libs/api-client/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.d.ts +++ b/libs/api-client/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.d.ts @@ -1,7 +1,6 @@ /// import type { Writable } from 'stream'; import { EventCallback, StreamWrapper } from './chooseStreamWrapper'; - export declare class Node18UniversalStreamWrapper< ReadFormat extends Uint8Array | Uint16Array | Uint32Array, > implements @@ -18,13 +17,9 @@ export declare class Node18UniversalStreamWrapper< private paused; private resumeCallback; private encoding; - constructor(readableStream: ReadableStream); - on(event: string, callback: EventCallback): void; - off(event: string, callback: EventCallback): void; - pipe( dest: | Node18UniversalStreamWrapper @@ -34,7 +29,6 @@ export declare class Node18UniversalStreamWrapper< | Node18UniversalStreamWrapper | Writable | WritableStream; - pipeTo( dest: | Node18UniversalStreamWrapper @@ -44,35 +38,24 @@ export declare class Node18UniversalStreamWrapper< | Node18UniversalStreamWrapper | Writable | WritableStream; - unpipe( dest: | Node18UniversalStreamWrapper | Writable | WritableStream, ): void; - destroy(error?: Error): void; - pause(): void; - resume(): void; - get isPaused(): boolean; - read(): Promise; - setEncoding(encoding: string): void; - text(): Promise; - json(): Promise; - private _write; private _end; private _error; private _emit; private _startReading; - [Symbol.asyncIterator](): AsyncIterableIterator; } diff --git a/libs/api-client/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.js b/libs/api-client/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.js index d3d6f330179..0bf9f8cc2af 100644 --- a/libs/api-client/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.js +++ b/libs/api-client/src/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,17 +23,14 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; - export class Node18UniversalStreamWrapper { constructor(readableStream) { this.readableStream = readableStream; @@ -53,14 +48,12 @@ export class Node18UniversalStreamWrapper { this.resumeCallback = null; this.encoding = null; } - on(event, callback) { var _a; (_a = this.events[event]) === null || _a === void 0 ? void 0 : _a.push(callback); } - off(event, callback) { var _a; this.events[event] = @@ -68,7 +61,6 @@ export class Node18UniversalStreamWrapper { ? void 0 : _a.filter((cb) => cb !== callback); } - pipe(dest) { this.on('data', (chunk) => __awaiter(this, void 0, void 0, function* () { @@ -109,11 +101,9 @@ export class Node18UniversalStreamWrapper { this._startReading(); return dest; } - pipeTo(dest) { return this.pipe(dest); } - unpipe(dest) { this.off('data', (chunk) => __awaiter(this, void 0, void 0, function* () { @@ -152,7 +142,6 @@ export class Node18UniversalStreamWrapper { }), ); } - destroy(error) { this.reader .cancel(error) @@ -163,12 +152,10 @@ export class Node18UniversalStreamWrapper { this._emit('error', err); }); } - pause() { this.paused = true; this._emit('pause'); } - resume() { if (this.paused) { this.paused = false; @@ -179,11 +166,9 @@ export class Node18UniversalStreamWrapper { } } } - get isPaused() { return this.paused; } - read() { return __awaiter(this, void 0, void 0, function* () { if (this.paused) { @@ -198,11 +183,9 @@ export class Node18UniversalStreamWrapper { return value; }); } - setEncoding(encoding) { this.encoding = encoding; } - text() { return __awaiter(this, void 0, void 0, function* () { const chunks = []; @@ -215,26 +198,21 @@ export class Node18UniversalStreamWrapper { return decoder.decode(yield new Blob(chunks).arrayBuffer()); }); } - json() { return __awaiter(this, void 0, void 0, function* () { const text = yield this.text(); return JSON.parse(text); }); } - _write(chunk) { this._emit('data', chunk); } - _end() { this._emit('end'); } - _error(error) { this._emit('error', error); } - _emit(event, data) { if (this.events[event]) { for (const callback of this.events[event] || []) { @@ -242,7 +220,6 @@ export class Node18UniversalStreamWrapper { } } } - _startReading() { return __awaiter(this, void 0, void 0, function* () { try { @@ -268,7 +245,6 @@ export class Node18UniversalStreamWrapper { } }); } - [Symbol.asyncIterator]() { return { next: () => diff --git a/libs/api-client/src/core/fetcher/stream-wrappers/NodePre18StreamWrapper.d.ts b/libs/api-client/src/core/fetcher/stream-wrappers/NodePre18StreamWrapper.d.ts index 3d4b5118d06..414db353cfc 100644 --- a/libs/api-client/src/core/fetcher/stream-wrappers/NodePre18StreamWrapper.d.ts +++ b/libs/api-client/src/core/fetcher/stream-wrappers/NodePre18StreamWrapper.d.ts @@ -1,40 +1,24 @@ /// import type { Readable, Writable } from 'stream'; import { EventCallback, StreamWrapper } from './chooseStreamWrapper'; - export declare class NodePre18StreamWrapper implements StreamWrapper { private readableStream; private encoding; - constructor(readableStream: Readable); - on(event: string, callback: EventCallback): void; - off(event: string, callback: EventCallback): void; - pipe(dest: Writable): Writable; - pipeTo(dest: Writable): Writable; - unpipe(dest?: Writable): void; - destroy(error?: Error): void; - pause(): void; - resume(): void; - get isPaused(): boolean; - read(): Promise; - setEncoding(encoding?: string): void; - text(): Promise; - json(): Promise; - [Symbol.asyncIterator](): AsyncIterableIterator; } diff --git a/libs/api-client/src/core/fetcher/stream-wrappers/NodePre18StreamWrapper.js b/libs/api-client/src/core/fetcher/stream-wrappers/NodePre18StreamWrapper.js index 917355c5683..64c7ae9616a 100644 --- a/libs/api-client/src/core/fetcher/stream-wrappers/NodePre18StreamWrapper.js +++ b/libs/api-client/src/core/fetcher/stream-wrappers/NodePre18StreamWrapper.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,13 +23,11 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; @@ -54,7 +50,6 @@ var __asyncValues = return this; }), i); - function verb(n) { i[n] = o[n] && @@ -64,36 +59,29 @@ var __asyncValues = }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); } }; - export class NodePre18StreamWrapper { constructor(readableStream) { this.readableStream = readableStream; } - on(event, callback) { this.readableStream.on(event, callback); } - off(event, callback) { this.readableStream.off(event, callback); } - pipe(dest) { this.readableStream.pipe(dest); return dest; } - pipeTo(dest) { return this.pipe(dest); } - unpipe(dest) { if (dest) { this.readableStream.unpipe(dest); @@ -101,23 +89,18 @@ export class NodePre18StreamWrapper { this.readableStream.unpipe(); } } - destroy(error) { this.readableStream.destroy(error); } - pause() { this.readableStream.pause(); } - resume() { this.readableStream.resume(); } - get isPaused() { return this.readableStream.isPaused(); } - read() { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { @@ -134,12 +117,10 @@ export class NodePre18StreamWrapper { }); }); } - setEncoding(encoding) { this.readableStream.setEncoding(encoding); this.encoding = encoding; } - text() { var e_1, _a; return __awaiter(this, void 0, void 0, function* () { @@ -168,14 +149,12 @@ export class NodePre18StreamWrapper { return decoder.decode(Buffer.concat(chunks)); }); } - json() { return __awaiter(this, void 0, void 0, function* () { const text = yield this.text(); return JSON.parse(text); }); } - [Symbol.asyncIterator]() { const readableStream = this.readableStream; const iterator = readableStream[Symbol.asyncIterator](); diff --git a/libs/api-client/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.d.ts b/libs/api-client/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.d.ts index af139fd1eeb..9e0bf4d9dc9 100644 --- a/libs/api-client/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.d.ts +++ b/libs/api-client/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.d.ts @@ -1,7 +1,5 @@ import { StreamWrapper } from './chooseStreamWrapper'; - declare type EventCallback = (data?: any) => void; - export declare class UndiciStreamWrapper< ReadFormat extends Uint8Array | Uint16Array | Uint32Array, > implements @@ -16,46 +14,29 @@ export declare class UndiciStreamWrapper< private paused; private resumeCallback; private encoding; - constructor(readableStream: ReadableStream); - on(event: string, callback: EventCallback): void; - off(event: string, callback: EventCallback): void; - pipe( dest: UndiciStreamWrapper | WritableStream, ): UndiciStreamWrapper | WritableStream; - pipeTo( dest: UndiciStreamWrapper | WritableStream, ): UndiciStreamWrapper | WritableStream; - unpipe(dest: UndiciStreamWrapper | WritableStream): void; - destroy(error?: Error): void; - pause(): void; - resume(): void; - get isPaused(): boolean; - read(): Promise; - setEncoding(encoding: string): void; - text(): Promise; - json(): Promise; - private _write; private _end; private _error; private _emit; private _startReading; - [Symbol.asyncIterator](): AsyncIterableIterator; } - export {}; diff --git a/libs/api-client/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.js b/libs/api-client/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.js index baf90c48e13..87ef9a04889 100644 --- a/libs/api-client/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.js +++ b/libs/api-client/src/core/fetcher/stream-wrappers/UndiciStreamWrapper.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,17 +23,14 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; - export class UndiciStreamWrapper { constructor(readableStream) { this.readableStream = readableStream; @@ -53,14 +48,12 @@ export class UndiciStreamWrapper { this.resumeCallback = null; this.encoding = null; } - on(event, callback) { var _a; (_a = this.events[event]) === null || _a === void 0 ? void 0 : _a.push(callback); } - off(event, callback) { var _a; this.events[event] = @@ -68,7 +61,6 @@ export class UndiciStreamWrapper { ? void 0 : _a.filter((cb) => cb !== callback); } - pipe(dest) { this.on('data', (chunk) => { if (dest instanceof UndiciStreamWrapper) { @@ -97,11 +89,9 @@ export class UndiciStreamWrapper { this._startReading(); return dest; } - pipeTo(dest) { return this.pipe(dest); } - unpipe(dest) { this.off('data', (chunk) => { if (dest instanceof UndiciStreamWrapper) { @@ -128,7 +118,6 @@ export class UndiciStreamWrapper { } }); } - destroy(error) { this.reader .cancel(error) @@ -139,12 +128,10 @@ export class UndiciStreamWrapper { this._emit('error', err); }); } - pause() { this.paused = true; this._emit('pause'); } - resume() { if (this.paused) { this.paused = false; @@ -155,11 +142,9 @@ export class UndiciStreamWrapper { } } } - get isPaused() { return this.paused; } - read() { return __awaiter(this, void 0, void 0, function* () { if (this.paused) { @@ -174,11 +159,9 @@ export class UndiciStreamWrapper { return value; }); } - setEncoding(encoding) { this.encoding = encoding; } - text() { return __awaiter(this, void 0, void 0, function* () { const chunks = []; @@ -191,26 +174,21 @@ export class UndiciStreamWrapper { return decoder.decode(yield new Blob(chunks).arrayBuffer()); }); } - json() { return __awaiter(this, void 0, void 0, function* () { const text = yield this.text(); return JSON.parse(text); }); } - _write(chunk) { this._emit('data', chunk); } - _end() { this._emit('end'); } - _error(error) { this._emit('error', error); } - _emit(event, data) { if (this.events[event]) { for (const callback of this.events[event] || []) { @@ -218,7 +196,6 @@ export class UndiciStreamWrapper { } } } - _startReading() { return __awaiter(this, void 0, void 0, function* () { try { @@ -244,7 +221,6 @@ export class UndiciStreamWrapper { } }); } - [Symbol.asyncIterator]() { return { next: () => diff --git a/libs/api-client/src/core/fetcher/stream-wrappers/chooseStreamWrapper.d.ts b/libs/api-client/src/core/fetcher/stream-wrappers/chooseStreamWrapper.d.ts index e3f98f40f1c..702261c87d5 100644 --- a/libs/api-client/src/core/fetcher/stream-wrappers/chooseStreamWrapper.d.ts +++ b/libs/api-client/src/core/fetcher/stream-wrappers/chooseStreamWrapper.d.ts @@ -1,35 +1,20 @@ export declare type EventCallback = (data?: any) => void; - export interface StreamWrapper { setEncoding(encoding?: string): void; - on(event: string, callback: EventCallback): void; - off(event: string, callback: EventCallback): void; - pipe(dest: WritableStream): WritableStream; - pipeTo(dest: WritableStream): WritableStream; - unpipe(dest?: WritableStream): void; - destroy(error?: Error): void; - pause(): void; - resume(): void; - get isPaused(): boolean; - read(): Promise; - text(): Promise; - json(): Promise; - [Symbol.asyncIterator](): AsyncIterableIterator; } - export declare function chooseStreamWrapper( responseBody: any, ): Promise>>; diff --git a/libs/api-client/src/core/fetcher/stream-wrappers/chooseStreamWrapper.js b/libs/api-client/src/core/fetcher/stream-wrappers/chooseStreamWrapper.js index 2e44cb01d86..f42ff901dea 100644 --- a/libs/api-client/src/core/fetcher/stream-wrappers/chooseStreamWrapper.js +++ b/libs/api-client/src/core/fetcher/stream-wrappers/chooseStreamWrapper.js @@ -8,7 +8,6 @@ var __awaiter = resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { @@ -17,7 +16,6 @@ var __awaiter = reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); @@ -25,18 +23,15 @@ var __awaiter = reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { RUNTIME } from '../../runtime'; - export function chooseStreamWrapper(responseBody) { return __awaiter(this, void 0, void 0, function* () { if ( diff --git a/libs/api-client/src/core/runtime/runtime.d.ts b/libs/api-client/src/core/runtime/runtime.d.ts index 4b25c356808..baea1726df4 100644 --- a/libs/api-client/src/core/runtime/runtime.d.ts +++ b/libs/api-client/src/core/runtime/runtime.d.ts @@ -2,7 +2,6 @@ * A constant that indicates which environment and version the SDK is running in. */ export declare const RUNTIME: Runtime; - export interface Runtime { type: | 'browser' diff --git a/libs/api-client/src/core/runtime/runtime.js b/libs/api-client/src/core/runtime/runtime.js index e60d146f7ca..54e52f707c0 100644 --- a/libs/api-client/src/core/runtime/runtime.js +++ b/libs/api-client/src/core/runtime/runtime.js @@ -65,7 +65,6 @@ const isCloudflare = * A constant that indicates which environment and version the SDK is running in. */ export const RUNTIME = evaluateRuntime(); - function evaluateRuntime() { if (isBrowser) { return { diff --git a/libs/api-client/src/core/schemas/Schema.d.ts b/libs/api-client/src/core/schemas/Schema.d.ts index cdb27cf7c20..dd04024af3d 100644 --- a/libs/api-client/src/core/schemas/Schema.d.ts +++ b/libs/api-client/src/core/schemas/Schema.d.ts @@ -1,5 +1,4 @@ import { SchemaUtils } from './builders'; - export declare type Schema = BaseSchema< Raw, Parsed @@ -9,13 +8,11 @@ export declare type inferRaw = S extends Schema ? Raw : never; export declare type inferParsed = S extends Schema ? Parsed : never; - export interface BaseSchema { parse: (raw: unknown, opts?: SchemaOptions) => MaybeValid; json: (parsed: unknown, opts?: SchemaOptions) => MaybeValid; getType: () => SchemaType | SchemaType; } - export declare const SchemaType: { readonly DATE: 'date'; readonly ENUM: 'enum'; @@ -36,22 +33,18 @@ export declare const SchemaType: { }; export declare type SchemaType = (typeof SchemaType)[keyof typeof SchemaType]; export declare type MaybeValid = Valid | Invalid; - export interface Valid { ok: true; value: T; } - export interface Invalid { ok: false; errors: ValidationError[]; } - export interface ValidationError { path: string[]; message: string; } - export interface SchemaOptions { /** * how to handle unrecognized keys in objects diff --git a/libs/api-client/src/core/schemas/builders/date/date.d.ts b/libs/api-client/src/core/schemas/builders/date/date.d.ts index 41865f10573..f7da04f607d 100644 --- a/libs/api-client/src/core/schemas/builders/date/date.d.ts +++ b/libs/api-client/src/core/schemas/builders/date/date.d.ts @@ -1,3 +1,2 @@ import { Schema } from '../../Schema'; - export declare function date(): Schema; diff --git a/libs/api-client/src/core/schemas/builders/date/date.js b/libs/api-client/src/core/schemas/builders/date/date.js index 8dd36c56927..b0d41593e72 100644 --- a/libs/api-client/src/core/schemas/builders/date/date.js +++ b/libs/api-client/src/core/schemas/builders/date/date.js @@ -5,7 +5,6 @@ import { getSchemaUtils } from '../schema-utils'; // https://stackoverflow.com/questions/12756159/regex-and-iso8601-formatted-datetime const ISO_8601_REGEX = /^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([.,]\d+(?!:))?)?(\17[0-5]\d([.,]\d+)?)?([zZ]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/; - export function date() { const baseSchema = { parse: (raw, { breadcrumbsPrefix = [] } = {}) => { diff --git a/libs/api-client/src/core/schemas/builders/enum/enum.d.ts b/libs/api-client/src/core/schemas/builders/enum/enum.d.ts index 2504688611a..5d8aa2521d3 100644 --- a/libs/api-client/src/core/schemas/builders/enum/enum.d.ts +++ b/libs/api-client/src/core/schemas/builders/enum/enum.d.ts @@ -1,5 +1,4 @@ import { Schema } from '../../Schema'; - export declare function enum_( values: E, ): Schema; diff --git a/libs/api-client/src/core/schemas/builders/enum/enum.js b/libs/api-client/src/core/schemas/builders/enum/enum.js index f5f87bd9fd8..6bddb310a18 100644 --- a/libs/api-client/src/core/schemas/builders/enum/enum.js +++ b/libs/api-client/src/core/schemas/builders/enum/enum.js @@ -1,7 +1,6 @@ import { SchemaType } from '../../Schema'; import { createIdentitySchemaCreator } from '../../utils/createIdentitySchemaCreator'; import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForIncorrectType'; - export function enum_(values) { const validValues = new Set(values); const schemaCreator = createIdentitySchemaCreator( diff --git a/libs/api-client/src/core/schemas/builders/lazy/lazy.d.ts b/libs/api-client/src/core/schemas/builders/lazy/lazy.d.ts index 77f10279964..c907e5a3be2 100644 --- a/libs/api-client/src/core/schemas/builders/lazy/lazy.d.ts +++ b/libs/api-client/src/core/schemas/builders/lazy/lazy.d.ts @@ -1,16 +1,12 @@ import { BaseSchema, Schema } from '../../Schema'; - export declare type SchemaGetter> = () => SchemaType; - export declare function lazy( getter: SchemaGetter>, ): Schema; - export declare function constructLazyBaseSchema( getter: SchemaGetter>, ): BaseSchema; - export declare function getMemoizedSchema>( getter: SchemaGetter, ): SchemaType; diff --git a/libs/api-client/src/core/schemas/builders/lazy/lazy.js b/libs/api-client/src/core/schemas/builders/lazy/lazy.js index f73e7a3a0ec..d63717436fe 100644 --- a/libs/api-client/src/core/schemas/builders/lazy/lazy.js +++ b/libs/api-client/src/core/schemas/builders/lazy/lazy.js @@ -1,5 +1,4 @@ import { getSchemaUtils } from '../schema-utils'; - export function lazy(getter) { const baseSchema = constructLazyBaseSchema(getter); return Object.assign( @@ -7,7 +6,6 @@ export function lazy(getter) { getSchemaUtils(baseSchema), ); } - export function constructLazyBaseSchema(getter) { return { parse: (raw, opts) => getMemoizedSchema(getter).parse(raw, opts), @@ -15,7 +13,6 @@ export function constructLazyBaseSchema(getter) { getType: () => getMemoizedSchema(getter).getType(), }; } - export function getMemoizedSchema(getter) { const castedGetter = getter; if (castedGetter.__zurg_memoized == null) { diff --git a/libs/api-client/src/core/schemas/builders/lazy/lazyObject.d.ts b/libs/api-client/src/core/schemas/builders/lazy/lazyObject.d.ts index 595114661b8..5df3d5d964a 100644 --- a/libs/api-client/src/core/schemas/builders/lazy/lazyObject.d.ts +++ b/libs/api-client/src/core/schemas/builders/lazy/lazyObject.d.ts @@ -1,6 +1,5 @@ import { ObjectSchema } from '../object/types'; import { SchemaGetter } from './lazy'; - export declare function lazyObject( getter: SchemaGetter>, ): ObjectSchema; diff --git a/libs/api-client/src/core/schemas/builders/lazy/lazyObject.js b/libs/api-client/src/core/schemas/builders/lazy/lazyObject.js index 803c249a5df..a682008c426 100644 --- a/libs/api-client/src/core/schemas/builders/lazy/lazyObject.js +++ b/libs/api-client/src/core/schemas/builders/lazy/lazyObject.js @@ -2,7 +2,6 @@ import { getObjectUtils } from '../object'; import { getObjectLikeUtils } from '../object-like'; import { getSchemaUtils } from '../schema-utils'; import { constructLazyBaseSchema, getMemoizedSchema } from './lazy'; - export function lazyObject(getter) { const baseSchema = Object.assign( Object.assign({}, constructLazyBaseSchema(getter)), diff --git a/libs/api-client/src/core/schemas/builders/list/list.d.ts b/libs/api-client/src/core/schemas/builders/list/list.d.ts index d89be3f353b..2812eefb982 100644 --- a/libs/api-client/src/core/schemas/builders/list/list.d.ts +++ b/libs/api-client/src/core/schemas/builders/list/list.d.ts @@ -1,5 +1,4 @@ import { Schema } from '../../Schema'; - export declare function list( schema: Schema, ): Schema; diff --git a/libs/api-client/src/core/schemas/builders/list/list.js b/libs/api-client/src/core/schemas/builders/list/list.js index 56c31e89260..61812c72ac9 100644 --- a/libs/api-client/src/core/schemas/builders/list/list.js +++ b/libs/api-client/src/core/schemas/builders/list/list.js @@ -2,7 +2,6 @@ import { SchemaType } from '../../Schema'; import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForIncorrectType'; import { maybeSkipValidation } from '../../utils/maybeSkipValidation'; import { getSchemaUtils } from '../schema-utils'; - export function list(schema) { const baseSchema = { parse: (raw, opts) => @@ -48,7 +47,6 @@ export function list(schema) { getSchemaUtils(baseSchema), ); } - function validateAndTransformArray(value, transformItem) { if (!Array.isArray(value)) { return { diff --git a/libs/api-client/src/core/schemas/builders/literals/booleanLiteral.d.ts b/libs/api-client/src/core/schemas/builders/literals/booleanLiteral.d.ts index 513867ef59d..ab1bc501c24 100644 --- a/libs/api-client/src/core/schemas/builders/literals/booleanLiteral.d.ts +++ b/libs/api-client/src/core/schemas/builders/literals/booleanLiteral.d.ts @@ -1,5 +1,4 @@ import { Schema } from '../../Schema'; - export declare function booleanLiteral( literal: V, ): Schema; diff --git a/libs/api-client/src/core/schemas/builders/literals/booleanLiteral.js b/libs/api-client/src/core/schemas/builders/literals/booleanLiteral.js index 9e5f3a8ce07..9b5f386d3f7 100644 --- a/libs/api-client/src/core/schemas/builders/literals/booleanLiteral.js +++ b/libs/api-client/src/core/schemas/builders/literals/booleanLiteral.js @@ -1,7 +1,6 @@ import { SchemaType } from '../../Schema'; import { createIdentitySchemaCreator } from '../../utils/createIdentitySchemaCreator'; import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForIncorrectType'; - export function booleanLiteral(literal) { const schemaCreator = createIdentitySchemaCreator( SchemaType.BOOLEAN_LITERAL, diff --git a/libs/api-client/src/core/schemas/builders/literals/stringLiteral.d.ts b/libs/api-client/src/core/schemas/builders/literals/stringLiteral.d.ts index a8558be7839..e8dc74ec1a1 100644 --- a/libs/api-client/src/core/schemas/builders/literals/stringLiteral.d.ts +++ b/libs/api-client/src/core/schemas/builders/literals/stringLiteral.d.ts @@ -1,5 +1,4 @@ import { Schema } from '../../Schema'; - export declare function stringLiteral( literal: V, ): Schema; diff --git a/libs/api-client/src/core/schemas/builders/literals/stringLiteral.js b/libs/api-client/src/core/schemas/builders/literals/stringLiteral.js index 9df4f93b646..ada0cc908f8 100644 --- a/libs/api-client/src/core/schemas/builders/literals/stringLiteral.js +++ b/libs/api-client/src/core/schemas/builders/literals/stringLiteral.js @@ -1,7 +1,6 @@ import { SchemaType } from '../../Schema'; import { createIdentitySchemaCreator } from '../../utils/createIdentitySchemaCreator'; import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForIncorrectType'; - export function stringLiteral(literal) { const schemaCreator = createIdentitySchemaCreator( SchemaType.STRING_LITERAL, diff --git a/libs/api-client/src/core/schemas/builders/object-like/getObjectLikeUtils.d.ts b/libs/api-client/src/core/schemas/builders/object-like/getObjectLikeUtils.d.ts index d09479aff97..047545ce9bf 100644 --- a/libs/api-client/src/core/schemas/builders/object-like/getObjectLikeUtils.d.ts +++ b/libs/api-client/src/core/schemas/builders/object-like/getObjectLikeUtils.d.ts @@ -1,10 +1,8 @@ import { BaseSchema } from '../../Schema'; import { ObjectLikeSchema, ObjectLikeUtils } from './types'; - export declare function getObjectLikeUtils( schema: BaseSchema, ): ObjectLikeUtils; - /** * object-like utils are defined in one file to resolve issues with circular imports */ diff --git a/libs/api-client/src/core/schemas/builders/object-like/getObjectLikeUtils.js b/libs/api-client/src/core/schemas/builders/object-like/getObjectLikeUtils.js index dbe3c94356e..d378675405f 100644 --- a/libs/api-client/src/core/schemas/builders/object-like/getObjectLikeUtils.js +++ b/libs/api-client/src/core/schemas/builders/object-like/getObjectLikeUtils.js @@ -2,14 +2,12 @@ import { filterObject } from '../../utils/filterObject'; import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForIncorrectType'; import { isPlainObject } from '../../utils/isPlainObject'; import { getSchemaUtils } from '../schema-utils'; - export function getObjectLikeUtils(schema) { return { withParsedProperties: (properties) => withParsedProperties(schema, properties), }; } - /** * object-like utils are defined in one file to resolve issues with circular imports */ diff --git a/libs/api-client/src/core/schemas/builders/object-like/types.d.ts b/libs/api-client/src/core/schemas/builders/object-like/types.d.ts index 85319841a72..c61cd0a9763 100644 --- a/libs/api-client/src/core/schemas/builders/object-like/types.d.ts +++ b/libs/api-client/src/core/schemas/builders/object-like/types.d.ts @@ -1,9 +1,7 @@ import { BaseSchema, Schema } from '../../Schema'; - export declare type ObjectLikeSchema = Schema & BaseSchema & ObjectLikeUtils; - export interface ObjectLikeUtils { withParsedProperties: >(properties: { [K in keyof T]: T[K] | ((parsed: Parsed) => T[K]); diff --git a/libs/api-client/src/core/schemas/builders/object/object.d.ts b/libs/api-client/src/core/schemas/builders/object/object.d.ts index 57736ed5900..b8996cc0821 100644 --- a/libs/api-client/src/core/schemas/builders/object/object.d.ts +++ b/libs/api-client/src/core/schemas/builders/object/object.d.ts @@ -4,12 +4,10 @@ import { ObjectUtils, PropertySchemas, } from './types'; - export declare function object< ParsedKeys extends string, T extends PropertySchemas, >(schemas: T): inferObjectSchemaFromPropertySchemas; - export declare function getObjectUtils( schema: BaseObjectSchema, ): ObjectUtils; diff --git a/libs/api-client/src/core/schemas/builders/object/object.js b/libs/api-client/src/core/schemas/builders/object/object.js index 8c4b874f78b..4ec584f7e53 100644 --- a/libs/api-client/src/core/schemas/builders/object/object.js +++ b/libs/api-client/src/core/schemas/builders/object/object.js @@ -9,7 +9,6 @@ import { partition } from '../../utils/partition'; import { getObjectLikeUtils } from '../object-like'; import { getSchemaUtils } from '../schema-utils'; import { isProperty } from './property'; - export function object(schemas) { const baseSchema = { _getRawProperties: () => @@ -166,7 +165,6 @@ export function object(schemas) { getObjectUtils(baseSchema), ); } - function validateAndTransformObject({ value, requiredKeys, @@ -238,7 +236,6 @@ function validateAndTransformObject({ }; } } - export function getObjectUtils(schema) { return { extend: (extension) => { @@ -284,7 +281,6 @@ export function getObjectUtils(schema) { }, }; } - function validateAndTransformExtendedObject({ extensionKeys, value, @@ -317,11 +313,9 @@ function validateAndTransformExtendedObject({ }; } } - function isSchemaRequired(schema) { return !isSchemaOptional(schema); } - function isSchemaOptional(schema) { switch (schema.getType()) { case SchemaType.ANY: diff --git a/libs/api-client/src/core/schemas/builders/object/objectWithoutOptionalProperties.d.ts b/libs/api-client/src/core/schemas/builders/object/objectWithoutOptionalProperties.d.ts index c238a8a9612..0e24550d4a0 100644 --- a/libs/api-client/src/core/schemas/builders/object/objectWithoutOptionalProperties.d.ts +++ b/libs/api-client/src/core/schemas/builders/object/objectWithoutOptionalProperties.d.ts @@ -4,12 +4,10 @@ import { ObjectSchema, PropertySchemas, } from './types'; - export declare function objectWithoutOptionalProperties< ParsedKeys extends string, T extends PropertySchemas, >(schemas: T): inferObjectWithoutOptionalPropertiesSchemaFromPropertySchemas; - export declare type inferObjectWithoutOptionalPropertiesSchemaFromPropertySchemas< T extends PropertySchemas, > = ObjectSchema< diff --git a/libs/api-client/src/core/schemas/builders/object/objectWithoutOptionalProperties.js b/libs/api-client/src/core/schemas/builders/object/objectWithoutOptionalProperties.js index 6399edc6a7f..1198d38c6c2 100644 --- a/libs/api-client/src/core/schemas/builders/object/objectWithoutOptionalProperties.js +++ b/libs/api-client/src/core/schemas/builders/object/objectWithoutOptionalProperties.js @@ -1,5 +1,4 @@ import { object } from './object'; - export function objectWithoutOptionalProperties(schemas) { return object(schemas); } diff --git a/libs/api-client/src/core/schemas/builders/object/property.d.ts b/libs/api-client/src/core/schemas/builders/object/property.d.ts index 88caba502b6..185ed9fae34 100644 --- a/libs/api-client/src/core/schemas/builders/object/property.d.ts +++ b/libs/api-client/src/core/schemas/builders/object/property.d.ts @@ -1,16 +1,13 @@ import { Schema } from '../../Schema'; - export declare function property( rawKey: RawKey, valueSchema: Schema, ): Property; - export interface Property { rawKey: RawKey; valueSchema: Schema; isProperty: true; } - export declare function isProperty>( maybeProperty: unknown, ): maybeProperty is O; diff --git a/libs/api-client/src/core/schemas/builders/object/property.js b/libs/api-client/src/core/schemas/builders/object/property.js index e4e44293e5b..e2170a9a6b8 100644 --- a/libs/api-client/src/core/schemas/builders/object/property.js +++ b/libs/api-client/src/core/schemas/builders/object/property.js @@ -5,7 +5,6 @@ export function property(rawKey, valueSchema) { isProperty: true, }; } - export function isProperty(maybeProperty) { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition return maybeProperty.isProperty; diff --git a/libs/api-client/src/core/schemas/builders/object/types.d.ts b/libs/api-client/src/core/schemas/builders/object/types.d.ts index 64ac4d5350a..60be6bc78ec 100644 --- a/libs/api-client/src/core/schemas/builders/object/types.d.ts +++ b/libs/api-client/src/core/schemas/builders/object/types.d.ts @@ -3,23 +3,19 @@ import { addQuestionMarksToNullableProperties } from '../../utils/addQuestionMar import { ObjectLikeUtils } from '../object-like'; import { SchemaUtils } from '../schema-utils'; import { Property } from './property'; - export declare type ObjectSchema = BaseObjectSchema & ObjectLikeUtils & ObjectUtils & SchemaUtils; - export interface BaseObjectSchema extends BaseSchema { _getRawProperties: () => (keyof Raw)[]; _getParsedProperties: () => (keyof Parsed)[]; } - export interface ObjectUtils { extend: ( schemas: ObjectSchema, ) => ObjectSchema; } - export declare type inferRawObject> = O extends ObjectSchema ? Raw : never; export declare type inferParsedObject> = diff --git a/libs/api-client/src/core/schemas/builders/primitives/any.js b/libs/api-client/src/core/schemas/builders/primitives/any.js index c01ab681695..adda69ff6db 100644 --- a/libs/api-client/src/core/schemas/builders/primitives/any.js +++ b/libs/api-client/src/core/schemas/builders/primitives/any.js @@ -1,6 +1,5 @@ import { SchemaType } from '../../Schema'; import { createIdentitySchemaCreator } from '../../utils/createIdentitySchemaCreator'; - export const any = createIdentitySchemaCreator(SchemaType.ANY, (value) => ({ ok: true, value, diff --git a/libs/api-client/src/core/schemas/builders/primitives/boolean.js b/libs/api-client/src/core/schemas/builders/primitives/boolean.js index 3287cb866cf..ea2143debb4 100644 --- a/libs/api-client/src/core/schemas/builders/primitives/boolean.js +++ b/libs/api-client/src/core/schemas/builders/primitives/boolean.js @@ -1,7 +1,6 @@ import { SchemaType } from '../../Schema'; import { createIdentitySchemaCreator } from '../../utils/createIdentitySchemaCreator'; import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForIncorrectType'; - export const boolean = createIdentitySchemaCreator( SchemaType.BOOLEAN, (value, { breadcrumbsPrefix = [] } = {}) => { diff --git a/libs/api-client/src/core/schemas/builders/primitives/number.js b/libs/api-client/src/core/schemas/builders/primitives/number.js index a91d926b1cd..9f36251e408 100644 --- a/libs/api-client/src/core/schemas/builders/primitives/number.js +++ b/libs/api-client/src/core/schemas/builders/primitives/number.js @@ -1,7 +1,6 @@ import { SchemaType } from '../../Schema'; import { createIdentitySchemaCreator } from '../../utils/createIdentitySchemaCreator'; import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForIncorrectType'; - export const number = createIdentitySchemaCreator( SchemaType.NUMBER, (value, { breadcrumbsPrefix = [] } = {}) => { diff --git a/libs/api-client/src/core/schemas/builders/primitives/string.js b/libs/api-client/src/core/schemas/builders/primitives/string.js index ce2d817ea92..4d703804f29 100644 --- a/libs/api-client/src/core/schemas/builders/primitives/string.js +++ b/libs/api-client/src/core/schemas/builders/primitives/string.js @@ -1,7 +1,6 @@ import { SchemaType } from '../../Schema'; import { createIdentitySchemaCreator } from '../../utils/createIdentitySchemaCreator'; import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForIncorrectType'; - export const string = createIdentitySchemaCreator( SchemaType.STRING, (value, { breadcrumbsPrefix = [] } = {}) => { diff --git a/libs/api-client/src/core/schemas/builders/primitives/unknown.js b/libs/api-client/src/core/schemas/builders/primitives/unknown.js index 7a0e33581b4..8402a5db991 100644 --- a/libs/api-client/src/core/schemas/builders/primitives/unknown.js +++ b/libs/api-client/src/core/schemas/builders/primitives/unknown.js @@ -1,6 +1,5 @@ import { SchemaType } from '../../Schema'; import { createIdentitySchemaCreator } from '../../utils/createIdentitySchemaCreator'; - export const unknown = createIdentitySchemaCreator( SchemaType.UNKNOWN, (value) => ({ ok: true, value }), diff --git a/libs/api-client/src/core/schemas/builders/record/record.d.ts b/libs/api-client/src/core/schemas/builders/record/record.d.ts index 56b299eac32..e1db09bbc0c 100644 --- a/libs/api-client/src/core/schemas/builders/record/record.d.ts +++ b/libs/api-client/src/core/schemas/builders/record/record.d.ts @@ -1,6 +1,5 @@ import { Schema } from '../../Schema'; import { RecordSchema } from './types'; - export declare function record< RawKey extends string | number, RawValue, diff --git a/libs/api-client/src/core/schemas/builders/record/record.js b/libs/api-client/src/core/schemas/builders/record/record.js index 0573485d559..573557f894e 100644 --- a/libs/api-client/src/core/schemas/builders/record/record.js +++ b/libs/api-client/src/core/schemas/builders/record/record.js @@ -4,7 +4,6 @@ import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForI import { isPlainObject } from '../../utils/isPlainObject'; import { maybeSkipValidation } from '../../utils/maybeSkipValidation'; import { getSchemaUtils } from '../schema-utils'; - export function record(keySchema, valueSchema) { const baseSchema = { parse: (raw, opts) => { @@ -98,7 +97,6 @@ export function record(keySchema, valueSchema) { getSchemaUtils(baseSchema), ); } - function validateAndTransformRecord({ value, isKeyNumeric, diff --git a/libs/api-client/src/core/schemas/builders/record/types.d.ts b/libs/api-client/src/core/schemas/builders/record/types.d.ts index 44300c0afc7..e76d8efb387 100644 --- a/libs/api-client/src/core/schemas/builders/record/types.d.ts +++ b/libs/api-client/src/core/schemas/builders/record/types.d.ts @@ -1,6 +1,5 @@ import { BaseSchema } from '../../Schema'; import { SchemaUtils } from '../schema-utils'; - export declare type RecordSchema< RawKey extends string | number, RawValue, diff --git a/libs/api-client/src/core/schemas/builders/schema-utils/JsonError.d.ts b/libs/api-client/src/core/schemas/builders/schema-utils/JsonError.d.ts index f5ea0496b4c..93e54905927 100644 --- a/libs/api-client/src/core/schemas/builders/schema-utils/JsonError.d.ts +++ b/libs/api-client/src/core/schemas/builders/schema-utils/JsonError.d.ts @@ -1,7 +1,5 @@ import { ValidationError } from '../../Schema'; - export declare class JsonError extends Error { readonly errors: ValidationError[]; - constructor(errors: ValidationError[]); } diff --git a/libs/api-client/src/core/schemas/builders/schema-utils/JsonError.js b/libs/api-client/src/core/schemas/builders/schema-utils/JsonError.js index a47c21815c9..dec4f621f4f 100644 --- a/libs/api-client/src/core/schemas/builders/schema-utils/JsonError.js +++ b/libs/api-client/src/core/schemas/builders/schema-utils/JsonError.js @@ -1,5 +1,4 @@ import { stringifyValidationError } from './stringifyValidationErrors'; - export class JsonError extends Error { constructor(errors) { super(errors.map(stringifyValidationError).join('; ')); diff --git a/libs/api-client/src/core/schemas/builders/schema-utils/ParseError.d.ts b/libs/api-client/src/core/schemas/builders/schema-utils/ParseError.d.ts index 5a1bba4469b..aba423a5c07 100644 --- a/libs/api-client/src/core/schemas/builders/schema-utils/ParseError.d.ts +++ b/libs/api-client/src/core/schemas/builders/schema-utils/ParseError.d.ts @@ -1,7 +1,5 @@ import { ValidationError } from '../../Schema'; - export declare class ParseError extends Error { readonly errors: ValidationError[]; - constructor(errors: ValidationError[]); } diff --git a/libs/api-client/src/core/schemas/builders/schema-utils/ParseError.js b/libs/api-client/src/core/schemas/builders/schema-utils/ParseError.js index 498131c475e..b42bd42dd14 100644 --- a/libs/api-client/src/core/schemas/builders/schema-utils/ParseError.js +++ b/libs/api-client/src/core/schemas/builders/schema-utils/ParseError.js @@ -1,5 +1,4 @@ import { stringifyValidationError } from './stringifyValidationErrors'; - export class ParseError extends Error { constructor(errors) { super(errors.map(stringifyValidationError).join('; ')); diff --git a/libs/api-client/src/core/schemas/builders/schema-utils/getSchemaUtils.d.ts b/libs/api-client/src/core/schemas/builders/schema-utils/getSchemaUtils.d.ts index 1f012da07eb..089960517f4 100644 --- a/libs/api-client/src/core/schemas/builders/schema-utils/getSchemaUtils.d.ts +++ b/libs/api-client/src/core/schemas/builders/schema-utils/getSchemaUtils.d.ts @@ -1,5 +1,4 @@ import { BaseSchema, Schema, SchemaOptions } from '../../Schema'; - export interface SchemaUtils { optional: () => Schema; transform: ( @@ -8,23 +7,19 @@ export interface SchemaUtils { parseOrThrow: (raw: unknown, opts?: SchemaOptions) => Parsed; jsonOrThrow: (raw: unknown, opts?: SchemaOptions) => Raw; } - export interface SchemaTransformer { transform: (parsed: Parsed) => Transformed; untransform: (transformed: any) => Parsed; } - export declare function getSchemaUtils( schema: BaseSchema, ): SchemaUtils; - /** * schema utils are defined in one file to resolve issues with circular imports */ export declare function optional( schema: BaseSchema, ): Schema; - export declare function transform( schema: BaseSchema, transformer: SchemaTransformer, diff --git a/libs/api-client/src/core/schemas/builders/schema-utils/getSchemaUtils.js b/libs/api-client/src/core/schemas/builders/schema-utils/getSchemaUtils.js index ce4f7e2c5a6..a7d963dd5e3 100644 --- a/libs/api-client/src/core/schemas/builders/schema-utils/getSchemaUtils.js +++ b/libs/api-client/src/core/schemas/builders/schema-utils/getSchemaUtils.js @@ -1,7 +1,6 @@ import { SchemaType } from '../../Schema'; import { JsonError } from './JsonError'; import { ParseError } from './ParseError'; - export function getSchemaUtils(schema) { return { optional: () => optional(schema), @@ -22,7 +21,6 @@ export function getSchemaUtils(schema) { }, }; } - /** * schema utils are defined in one file to resolve issues with circular imports */ @@ -62,7 +60,6 @@ export function optional(schema) { getSchemaUtils(baseSchema), ); } - export function transform(schema, transformer) { const baseSchema = { parse: (raw, opts) => { diff --git a/libs/api-client/src/core/schemas/builders/schema-utils/stringifyValidationErrors.d.ts b/libs/api-client/src/core/schemas/builders/schema-utils/stringifyValidationErrors.d.ts index 5eed5772451..737956c6ad1 100644 --- a/libs/api-client/src/core/schemas/builders/schema-utils/stringifyValidationErrors.d.ts +++ b/libs/api-client/src/core/schemas/builders/schema-utils/stringifyValidationErrors.d.ts @@ -1,5 +1,4 @@ import { ValidationError } from '../../Schema'; - export declare function stringifyValidationError( error: ValidationError, ): string; diff --git a/libs/api-client/src/core/schemas/builders/set/set.d.ts b/libs/api-client/src/core/schemas/builders/set/set.d.ts index 397e873714a..f5301ee8f06 100644 --- a/libs/api-client/src/core/schemas/builders/set/set.d.ts +++ b/libs/api-client/src/core/schemas/builders/set/set.d.ts @@ -1,5 +1,4 @@ import { Schema } from '../../Schema'; - export declare function set( schema: Schema, ): Schema>; diff --git a/libs/api-client/src/core/schemas/builders/set/set.js b/libs/api-client/src/core/schemas/builders/set/set.js index 3fd4c5307a6..18b0dad1dca 100644 --- a/libs/api-client/src/core/schemas/builders/set/set.js +++ b/libs/api-client/src/core/schemas/builders/set/set.js @@ -3,7 +3,6 @@ import { getErrorMessageForIncorrectType } from '../../utils/getErrorMessageForI import { maybeSkipValidation } from '../../utils/maybeSkipValidation'; import { list } from '../list'; import { getSchemaUtils } from '../schema-utils'; - export function set(schema) { const listSchema = list(schema); const baseSchema = { diff --git a/libs/api-client/src/core/schemas/builders/undiscriminated-union/types.d.ts b/libs/api-client/src/core/schemas/builders/undiscriminated-union/types.d.ts index d02e1a186f4..3af85cee6b3 100644 --- a/libs/api-client/src/core/schemas/builders/undiscriminated-union/types.d.ts +++ b/libs/api-client/src/core/schemas/builders/undiscriminated-union/types.d.ts @@ -1,5 +1,4 @@ import { inferParsed, inferRaw, Schema } from '../../Schema'; - export declare type UndiscriminatedUnionSchema = Schema< inferRawUnidiscriminatedUnionSchema, diff --git a/libs/api-client/src/core/schemas/builders/undiscriminated-union/undiscriminatedUnion.d.ts b/libs/api-client/src/core/schemas/builders/undiscriminated-union/undiscriminatedUnion.d.ts index 3b4a278f76c..a3cc61622b1 100644 --- a/libs/api-client/src/core/schemas/builders/undiscriminated-union/undiscriminatedUnion.d.ts +++ b/libs/api-client/src/core/schemas/builders/undiscriminated-union/undiscriminatedUnion.d.ts @@ -3,7 +3,6 @@ import { inferParsedUnidiscriminatedUnionSchema, inferRawUnidiscriminatedUnionSchema, } from './types'; - export declare function undiscriminatedUnion< Schemas extends [Schema, ...Schema[]], >( diff --git a/libs/api-client/src/core/schemas/builders/undiscriminated-union/undiscriminatedUnion.js b/libs/api-client/src/core/schemas/builders/undiscriminated-union/undiscriminatedUnion.js index efeee32584d..3f3a814d77b 100644 --- a/libs/api-client/src/core/schemas/builders/undiscriminated-union/undiscriminatedUnion.js +++ b/libs/api-client/src/core/schemas/builders/undiscriminated-union/undiscriminatedUnion.js @@ -1,7 +1,6 @@ import { SchemaType } from '../../Schema'; import { maybeSkipValidation } from '../../utils/maybeSkipValidation'; import { getSchemaUtils } from '../schema-utils'; - export function undiscriminatedUnion(schemas) { const baseSchema = { parse: (raw, opts) => { @@ -25,7 +24,6 @@ export function undiscriminatedUnion(schemas) { getSchemaUtils(baseSchema), ); } - function validateAndTransformUndiscriminatedUnion(transform, schemas, opts) { const errors = []; for (const [index, schema] of schemas.entries()) { diff --git a/libs/api-client/src/core/schemas/builders/union/discriminant.d.ts b/libs/api-client/src/core/schemas/builders/union/discriminant.d.ts index 6635d562627..4e4d68cc5da 100644 --- a/libs/api-client/src/core/schemas/builders/union/discriminant.d.ts +++ b/libs/api-client/src/core/schemas/builders/union/discriminant.d.ts @@ -5,7 +5,6 @@ export declare function discriminant< parsedDiscriminant: ParsedDiscriminant, rawDiscriminant: RawDiscriminant, ): Discriminant; - export interface Discriminant< RawDiscriminant extends string, ParsedDiscriminant extends string, diff --git a/libs/api-client/src/core/schemas/builders/union/types.d.ts b/libs/api-client/src/core/schemas/builders/union/types.d.ts index f624f9f1435..e337b9633d4 100644 --- a/libs/api-client/src/core/schemas/builders/union/types.d.ts +++ b/libs/api-client/src/core/schemas/builders/union/types.d.ts @@ -1,6 +1,5 @@ import { inferParsedObject, inferRawObject, ObjectSchema } from '../object'; import { Discriminant } from './discriminant'; - export declare type UnionSubtypes< DiscriminantValues extends string | number | symbol, > = { diff --git a/libs/api-client/src/core/schemas/builders/union/union.d.ts b/libs/api-client/src/core/schemas/builders/union/union.d.ts index a4bc288c11f..d92c6ceeedd 100644 --- a/libs/api-client/src/core/schemas/builders/union/union.d.ts +++ b/libs/api-client/src/core/schemas/builders/union/union.d.ts @@ -1,7 +1,6 @@ import { ObjectLikeSchema } from '../object-like'; import { Discriminant } from './discriminant'; import { inferParsedUnion, inferRawUnion, UnionSubtypes } from './types'; - export declare function union< D extends string | Discriminant, U extends UnionSubtypes, diff --git a/libs/api-client/src/core/schemas/builders/union/union.js b/libs/api-client/src/core/schemas/builders/union/union.js index 5ccb601187b..b9b8b3b9339 100644 --- a/libs/api-client/src/core/schemas/builders/union/union.js +++ b/libs/api-client/src/core/schemas/builders/union/union.js @@ -23,7 +23,6 @@ import { maybeSkipValidation } from '../../utils/maybeSkipValidation'; import { enum_ } from '../enum'; import { getObjectLikeUtils } from '../object-like'; import { getSchemaUtils } from '../schema-utils'; - export function union(discriminant, union) { const rawDiscriminant = typeof discriminant === 'string' @@ -119,7 +118,6 @@ export function union(discriminant, union) { getObjectLikeUtils(baseSchema), ); } - function transformAndValidateUnion({ value, discriminant, diff --git a/libs/api-client/src/core/schemas/utils/createIdentitySchemaCreator.d.ts b/libs/api-client/src/core/schemas/utils/createIdentitySchemaCreator.d.ts index dbd270420e0..3d5c5fc0aed 100644 --- a/libs/api-client/src/core/schemas/utils/createIdentitySchemaCreator.d.ts +++ b/libs/api-client/src/core/schemas/utils/createIdentitySchemaCreator.d.ts @@ -1,5 +1,4 @@ import { MaybeValid, Schema, SchemaOptions, SchemaType } from '../Schema'; - export declare function createIdentitySchemaCreator( schemaType: SchemaType, validate: (value: unknown, opts?: SchemaOptions) => MaybeValid, diff --git a/libs/api-client/src/core/schemas/utils/createIdentitySchemaCreator.js b/libs/api-client/src/core/schemas/utils/createIdentitySchemaCreator.js index 2b471a57fb0..1633fa26952 100644 --- a/libs/api-client/src/core/schemas/utils/createIdentitySchemaCreator.js +++ b/libs/api-client/src/core/schemas/utils/createIdentitySchemaCreator.js @@ -1,6 +1,5 @@ import { getSchemaUtils } from '../builders/schema-utils'; import { maybeSkipValidation } from './maybeSkipValidation'; - export function createIdentitySchemaCreator(schemaType, validate) { return () => { const baseSchema = { diff --git a/libs/api-client/src/core/schemas/utils/getErrorMessageForIncorrectType.js b/libs/api-client/src/core/schemas/utils/getErrorMessageForIncorrectType.js index dab15aaf2ff..dc5199a617c 100644 --- a/libs/api-client/src/core/schemas/utils/getErrorMessageForIncorrectType.js +++ b/libs/api-client/src/core/schemas/utils/getErrorMessageForIncorrectType.js @@ -1,7 +1,6 @@ export function getErrorMessageForIncorrectType(value, expectedType) { return `Expected ${expectedType}. Received ${getTypeAsString(value)}.`; } - function getTypeAsString(value) { if (Array.isArray(value)) { return 'list'; diff --git a/libs/api-client/src/core/schemas/utils/maybeSkipValidation.d.ts b/libs/api-client/src/core/schemas/utils/maybeSkipValidation.d.ts index 89e75960344..e0d253bb720 100644 --- a/libs/api-client/src/core/schemas/utils/maybeSkipValidation.d.ts +++ b/libs/api-client/src/core/schemas/utils/maybeSkipValidation.d.ts @@ -1,5 +1,4 @@ import { BaseSchema } from '../Schema'; - export declare function maybeSkipValidation< S extends BaseSchema, Raw, diff --git a/libs/api-client/src/core/schemas/utils/maybeSkipValidation.js b/libs/api-client/src/core/schemas/utils/maybeSkipValidation.js index 4777b31a7a1..f229e436cbf 100644 --- a/libs/api-client/src/core/schemas/utils/maybeSkipValidation.js +++ b/libs/api-client/src/core/schemas/utils/maybeSkipValidation.js @@ -4,7 +4,6 @@ export function maybeSkipValidation(schema) { parse: transformAndMaybeSkipValidation(schema.parse), }); } - function transformAndMaybeSkipValidation(transform) { return (value, opts) => { const transformed = transform(value, opts); diff --git a/libs/api-client/src/errors/CommonApiError.d.ts b/libs/api-client/src/errors/CommonApiError.d.ts index 281b9956f43..37e6362dae3 100644 --- a/libs/api-client/src/errors/CommonApiError.d.ts +++ b/libs/api-client/src/errors/CommonApiError.d.ts @@ -4,7 +4,6 @@ export declare class CommonApiError extends Error { readonly statusCode?: number; readonly body?: unknown; - constructor({ message, statusCode, diff --git a/libs/api-client/src/errors/CommonApiError.js b/libs/api-client/src/errors/CommonApiError.js index 26834314b2b..498215fff94 100644 --- a/libs/api-client/src/errors/CommonApiError.js +++ b/libs/api-client/src/errors/CommonApiError.js @@ -13,7 +13,6 @@ export class CommonApiError extends Error { } } } - function buildMessage({ message, statusCode, body }) { let lines = []; if (message != null) { diff --git a/libs/api-client/src/serialization/resources/comment/client/requests/CreateCommentRequest.d.ts b/libs/api-client/src/serialization/resources/comment/client/requests/CreateCommentRequest.d.ts index 97c33da7122..922d912b47b 100644 --- a/libs/api-client/src/serialization/resources/comment/client/requests/CreateCommentRequest.d.ts +++ b/libs/api-client/src/serialization/resources/comment/client/requests/CreateCommentRequest.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; import { CreateCommentRequestDiscordMeta } from '../../types/CreateCommentRequestDiscordMeta'; - export declare const CreateCommentRequest: core.serialization.Schema< serializers.CreateCommentRequest.Raw, CommonApi.CreateCommentRequest diff --git a/libs/api-client/src/serialization/resources/comment/client/requests/CreateCommentRequest.js b/libs/api-client/src/serialization/resources/comment/client/requests/CreateCommentRequest.js index b7b643f94d7..53a9b0eae41 100644 --- a/libs/api-client/src/serialization/resources/comment/client/requests/CreateCommentRequest.js +++ b/libs/api-client/src/serialization/resources/comment/client/requests/CreateCommentRequest.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../../core'; import { CreateCommentRequestDiscordMeta } from '../../types/CreateCommentRequestDiscordMeta'; - export const CreateCommentRequest = core.serialization.object({ threadId: core.serialization.property( 'thread_id', diff --git a/libs/api-client/src/serialization/resources/comment/client/requests/DeleteCommentRequest.d.ts b/libs/api-client/src/serialization/resources/comment/client/requests/DeleteCommentRequest.d.ts index d99d61df377..77323fcc4f8 100644 --- a/libs/api-client/src/serialization/resources/comment/client/requests/DeleteCommentRequest.d.ts +++ b/libs/api-client/src/serialization/resources/comment/client/requests/DeleteCommentRequest.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; - export declare const DeleteCommentRequest: core.serialization.Schema< serializers.DeleteCommentRequest.Raw, CommonApi.DeleteCommentRequest diff --git a/libs/api-client/src/serialization/resources/comment/client/requests/DeleteCommentRequest.js b/libs/api-client/src/serialization/resources/comment/client/requests/DeleteCommentRequest.js index a94e612ce2b..1fd2bdeaece 100644 --- a/libs/api-client/src/serialization/resources/comment/client/requests/DeleteCommentRequest.js +++ b/libs/api-client/src/serialization/resources/comment/client/requests/DeleteCommentRequest.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../../core'; - export const DeleteCommentRequest = core.serialization.object({ commentId: core.serialization.property( 'comment_id', diff --git a/libs/api-client/src/serialization/resources/comment/client/requests/UpdateCommentRequest.d.ts b/libs/api-client/src/serialization/resources/comment/client/requests/UpdateCommentRequest.d.ts index 499993144d6..6c2abfeef44 100644 --- a/libs/api-client/src/serialization/resources/comment/client/requests/UpdateCommentRequest.d.ts +++ b/libs/api-client/src/serialization/resources/comment/client/requests/UpdateCommentRequest.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; - export declare const UpdateCommentRequest: core.serialization.Schema< serializers.UpdateCommentRequest.Raw, CommonApi.UpdateCommentRequest diff --git a/libs/api-client/src/serialization/resources/comment/client/requests/UpdateCommentRequest.js b/libs/api-client/src/serialization/resources/comment/client/requests/UpdateCommentRequest.js index f8189adb53e..3aceaaef83c 100644 --- a/libs/api-client/src/serialization/resources/comment/client/requests/UpdateCommentRequest.js +++ b/libs/api-client/src/serialization/resources/comment/client/requests/UpdateCommentRequest.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../../core'; - export const UpdateCommentRequest = core.serialization.object({ commentId: core.serialization.property( 'comment_id', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMeta.d.ts index 4ec147c1b64..ea88cf6d143 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentRequestDiscordMetaUser } from './CreateCommentRequestDiscordMetaUser'; - export declare const CreateCommentRequestDiscordMeta: core.serialization.ObjectSchema< serializers.CreateCommentRequestDiscordMeta.Raw, CommonApi.CreateCommentRequestDiscordMeta diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMeta.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMeta.js index 099515db81e..7da623654fd 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentRequestDiscordMetaUser } from './CreateCommentRequestDiscordMetaUser'; - export const CreateCommentRequestDiscordMeta = core.serialization.object({ user: CreateCommentRequestDiscordMetaUser, channelId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMetaUser.d.ts index bdd5bd6e821..e4ef6efe90c 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentRequestDiscordMetaUser: core.serialization.ObjectSchema< serializers.CreateCommentRequestDiscordMetaUser.Raw, CommonApi.CreateCommentRequestDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMetaUser.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMetaUser.js index 2240328c749..84047ec5d01 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentRequestDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentRequestDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), username: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponse.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponse.d.ts index 08599439fbd..36fe31be0e8 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponse.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponse.d.ts @@ -10,7 +10,6 @@ import { CreateCommentResponseDiscordMeta } from './CreateCommentResponseDiscord import { CreateCommentResponseReaction } from './CreateCommentResponseReaction'; import { CreateCommentResponseSearch } from './CreateCommentResponseSearch'; import { CreateCommentResponseThread } from './CreateCommentResponseThread'; - export declare const CreateCommentResponse: core.serialization.ObjectSchema< serializers.CreateCommentResponse.Raw, CommonApi.CreateCommentResponse @@ -21,7 +20,6 @@ export declare namespace CreateCommentResponse { thread_id: number; address_id: number; text: string; - plaintext: string; parent_id?: string | null; content_url?: string | null; canvas_signed_data?: string | null; diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponse.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponse.js index 95edf61eb30..3a28e2fc348 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponse.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponse.js @@ -8,7 +8,6 @@ import { CreateCommentResponseDiscordMeta } from './CreateCommentResponseDiscord import { CreateCommentResponseReaction } from './CreateCommentResponseReaction'; import { CreateCommentResponseSearch } from './CreateCommentResponseSearch'; import { CreateCommentResponseThread } from './CreateCommentResponseThread'; - export const CreateCommentResponse = core.serialization.object({ id: core.serialization.number().optional(), threadId: core.serialization.property( @@ -20,7 +19,6 @@ export const CreateCommentResponse = core.serialization.object({ core.serialization.number(), ), text: core.serialization.string(), - plaintext: core.serialization.string(), parentId: core.serialization.property( 'parent_id', core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddress.d.ts index aab37db03aa..c3dc886076b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateCommentResponseAddressRole } from './CreateCommentResponseAddressRole'; import { CreateCommentResponseAddressUser } from './CreateCommentResponseAddressUser'; import { CreateCommentResponseAddressWalletId } from './CreateCommentResponseAddressWalletId'; - export declare const CreateCommentResponseAddress: core.serialization.ObjectSchema< serializers.CreateCommentResponseAddress.Raw, CommonApi.CreateCommentResponseAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddress.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddress.js index 393b0ee5587..1517c0e837f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateCommentResponseAddressRole } from './CreateCommentResponseAddressRole'; import { CreateCommentResponseAddressUser } from './CreateCommentResponseAddressUser'; import { CreateCommentResponseAddressWalletId } from './CreateCommentResponseAddressWalletId'; - export const CreateCommentResponseAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressRole.d.ts index bd5bc87c23f..140cb3a73b2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseAddressRole: core.serialization.Schema< serializers.CreateCommentResponseAddressRole.Raw, CommonApi.CreateCommentResponseAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressRole.js index c9e7811f571..97a8f8c9c1f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressRole.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseAddressRole = core.serialization.enum_([ 'admin', 'moderator', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUser.d.ts index 7c0cd21a7b9..c7dafdeda91 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUser.d.ts @@ -8,7 +8,6 @@ import { CreateCommentResponseAddressUserApiKey } from './CreateCommentResponseA import { CreateCommentResponseAddressUserEmailNotificationInterval } from './CreateCommentResponseAddressUserEmailNotificationInterval'; import { CreateCommentResponseAddressUserProfile } from './CreateCommentResponseAddressUserProfile'; import { CreateCommentResponseAddressUserProfileTagsItem } from './CreateCommentResponseAddressUserProfileTagsItem'; - export declare const CreateCommentResponseAddressUser: core.serialization.ObjectSchema< serializers.CreateCommentResponseAddressUser.Raw, CommonApi.CreateCommentResponseAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUser.js index 5c3bbd27c93..e10e7377a36 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUser.js @@ -6,7 +6,6 @@ import { CreateCommentResponseAddressUserApiKey } from './CreateCommentResponseA import { CreateCommentResponseAddressUserEmailNotificationInterval } from './CreateCommentResponseAddressUserEmailNotificationInterval'; import { CreateCommentResponseAddressUserProfile } from './CreateCommentResponseAddressUserProfile'; import { CreateCommentResponseAddressUserProfileTagsItem } from './CreateCommentResponseAddressUserProfileTagsItem'; - export const CreateCommentResponseAddressUser = core.serialization.object({ id: core.serialization.number().optional(), email: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..927ee1bc1eb --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateCommentResponseAddressUserApiKey: core.serialization.ObjectSchema< + serializers.CreateCommentResponseAddressUserApiKey.Raw, + CommonApi.CreateCommentResponseAddressUserApiKey +>; +export declare namespace CreateCommentResponseAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserApiKey.js new file mode 100644 index 00000000000..49799a7a40f --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserApiKey.js @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateCommentResponseAddressUserApiKey = core.serialization.object( + { + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }, +); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserEmailNotificationInterval.d.ts index de47a6128cf..bd05cb919be 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateCommentResponseAddressUserEmailNotificationInterval.Raw, CommonApi.CreateCommentResponseAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserEmailNotificationInterval.js index a7dc91fbc78..15f8c1e4d87 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfile.d.ts index 63d5914e61b..050136d30f4 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseAddressUserProfileBackgroundImage } from './CreateCommentResponseAddressUserProfileBackgroundImage'; - export declare const CreateCommentResponseAddressUserProfile: core.serialization.ObjectSchema< serializers.CreateCommentResponseAddressUserProfile.Raw, CommonApi.CreateCommentResponseAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfile.js index d38448a0922..e3b8fd1cdee 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseAddressUserProfileBackgroundImage } from './CreateCommentResponseAddressUserProfileBackgroundImage'; - export const CreateCommentResponseAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileBackgroundImage.d.ts index e03613f717a..56d5a4d6e7a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateCommentResponseAddressUserProfileBackgroundImage.Raw, CommonApi.CreateCommentResponseAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileBackgroundImage.js index f029779ace7..3cd72541128 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileTagsItem.d.ts index 5e15dcb0a19..65b59f507b7 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseAddressUserProfileTagsItem.Raw, CommonApi.CreateCommentResponseAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileTagsItem.js index fd0eedbdb33..d77e23d3d36 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressWalletId.d.ts index 1b2830347b9..db198ca040f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseAddressWalletId: core.serialization.Schema< serializers.CreateCommentResponseAddressWalletId.Raw, CommonApi.CreateCommentResponseAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressWalletId.js index f5c06015b1a..3d5b18ef31b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseAddressWalletId = core.serialization.enum_([ 'magic', 'polkadot', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseCommentVersionHistoriesItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseCommentVersionHistoriesItem.d.ts index b150b5b2e08..76533686afd 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseCommentVersionHistoriesItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseCommentVersionHistoriesItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseCommentVersionHistoriesItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseCommentVersionHistoriesItem.Raw, CommonApi.CreateCommentResponseCommentVersionHistoriesItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseCommentVersionHistoriesItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseCommentVersionHistoriesItem.js index df52af528f8..d4c1cfcb946 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseCommentVersionHistoriesItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseCommentVersionHistoriesItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseCommentVersionHistoriesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMeta.d.ts index 3e4c3f638ba..403070d7447 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseDiscordMetaUser } from './CreateCommentResponseDiscordMetaUser'; - export declare const CreateCommentResponseDiscordMeta: core.serialization.ObjectSchema< serializers.CreateCommentResponseDiscordMeta.Raw, CommonApi.CreateCommentResponseDiscordMeta diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMeta.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMeta.js index 96e2b5dd365..2befa0d86bd 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseDiscordMetaUser } from './CreateCommentResponseDiscordMetaUser'; - export const CreateCommentResponseDiscordMeta = core.serialization.object({ user: CreateCommentResponseDiscordMetaUser, channelId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMetaUser.d.ts index c14cb66f9cb..8a5b2af25de 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseDiscordMetaUser: core.serialization.ObjectSchema< serializers.CreateCommentResponseDiscordMetaUser.Raw, CommonApi.CreateCommentResponseDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMetaUser.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMetaUser.js index 7ae34622c04..187f74657a2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), username: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReaction.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReaction.d.ts index 3d789bf930e..deaac1322c0 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReaction.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReaction.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseReactionAddress } from './CreateCommentResponseReactionAddress'; - export declare const CreateCommentResponseReaction: core.serialization.ObjectSchema< serializers.CreateCommentResponseReaction.Raw, CommonApi.CreateCommentResponseReaction diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReaction.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReaction.js index 4eccd987f58..7a9cf241c03 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReaction.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReaction.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseReactionAddress } from './CreateCommentResponseReactionAddress'; - export const CreateCommentResponseReaction = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddress.d.ts index 21efb650a68..75541528f9d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateCommentResponseReactionAddressRole } from './CreateCommentResponseReactionAddressRole'; import { CreateCommentResponseReactionAddressUser } from './CreateCommentResponseReactionAddressUser'; import { CreateCommentResponseReactionAddressWalletId } from './CreateCommentResponseReactionAddressWalletId'; - export declare const CreateCommentResponseReactionAddress: core.serialization.ObjectSchema< serializers.CreateCommentResponseReactionAddress.Raw, CommonApi.CreateCommentResponseReactionAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddress.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddress.js index 4c857fb77d6..90e6965e878 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateCommentResponseReactionAddressRole } from './CreateCommentResponseReactionAddressRole'; import { CreateCommentResponseReactionAddressUser } from './CreateCommentResponseReactionAddressUser'; import { CreateCommentResponseReactionAddressWalletId } from './CreateCommentResponseReactionAddressWalletId'; - export const CreateCommentResponseReactionAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressRole.d.ts index 2e3e6ec9e99..1d46d7f79cb 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseReactionAddressRole: core.serialization.Schema< serializers.CreateCommentResponseReactionAddressRole.Raw, CommonApi.CreateCommentResponseReactionAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressRole.js index cc26daa407d..e5dfe07aa9f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseReactionAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUser.d.ts index fbdcacf56c8..ccad9741bdc 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUser.d.ts @@ -8,7 +8,6 @@ import { CreateCommentResponseReactionAddressUserApiKey } from './CreateCommentR import { CreateCommentResponseReactionAddressUserEmailNotificationInterval } from './CreateCommentResponseReactionAddressUserEmailNotificationInterval'; import { CreateCommentResponseReactionAddressUserProfile } from './CreateCommentResponseReactionAddressUserProfile'; import { CreateCommentResponseReactionAddressUserProfileTagsItem } from './CreateCommentResponseReactionAddressUserProfileTagsItem'; - export declare const CreateCommentResponseReactionAddressUser: core.serialization.ObjectSchema< serializers.CreateCommentResponseReactionAddressUser.Raw, CommonApi.CreateCommentResponseReactionAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUser.js index ba5ee7a1668..d30f495533c 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUser.js @@ -6,7 +6,6 @@ import { CreateCommentResponseReactionAddressUserApiKey } from './CreateCommentR import { CreateCommentResponseReactionAddressUserEmailNotificationInterval } from './CreateCommentResponseReactionAddressUserEmailNotificationInterval'; import { CreateCommentResponseReactionAddressUserProfile } from './CreateCommentResponseReactionAddressUserProfile'; import { CreateCommentResponseReactionAddressUserProfileTagsItem } from './CreateCommentResponseReactionAddressUserProfileTagsItem'; - export const CreateCommentResponseReactionAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.d.ts new file mode 100644 index 00000000000..e3c716b46c0 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateCommentResponseReactionAddressUserApiKey: core.serialization.ObjectSchema< + serializers.CreateCommentResponseReactionAddressUserApiKey.Raw, + CommonApi.CreateCommentResponseReactionAddressUserApiKey +>; +export declare namespace CreateCommentResponseReactionAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.js new file mode 100644 index 00000000000..309632d1311 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateCommentResponseReactionAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserEmailNotificationInterval.d.ts index a43dca8fb73..673a9d94bb3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseReactionAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateCommentResponseReactionAddressUserEmailNotificationInterval.Raw, CommonApi.CreateCommentResponseReactionAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserEmailNotificationInterval.js index 5451aca91a2..5fee5c03483 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseReactionAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.d.ts index 09986ba2a75..ccaa787bd91 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseReactionAddressUserProfileBackgroundImage } from './CreateCommentResponseReactionAddressUserProfileBackgroundImage'; - export declare const CreateCommentResponseReactionAddressUserProfile: core.serialization.ObjectSchema< serializers.CreateCommentResponseReactionAddressUserProfile.Raw, CommonApi.CreateCommentResponseReactionAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.js index 3286ca4cd8a..06a038e8a68 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseReactionAddressUserProfileBackgroundImage } from './CreateCommentResponseReactionAddressUserProfileBackgroundImage'; - export const CreateCommentResponseReactionAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileBackgroundImage.d.ts index 8c9331f5b5f..8d74f6d3936 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseReactionAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateCommentResponseReactionAddressUserProfileBackgroundImage.Raw, CommonApi.CreateCommentResponseReactionAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileBackgroundImage.js index 5f09011763b..97785adf6fe 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseReactionAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileTagsItem.d.ts index 01161bcc0e7..16778e0e6a2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseReactionAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseReactionAddressUserProfileTagsItem.Raw, CommonApi.CreateCommentResponseReactionAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileTagsItem.js index d464f6082f7..3ca4dd17c89 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseReactionAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressWalletId.d.ts index 3d2520d9c48..96a4fd136dd 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseReactionAddressWalletId: core.serialization.Schema< serializers.CreateCommentResponseReactionAddressWalletId.Raw, CommonApi.CreateCommentResponseReactionAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressWalletId.js index be578debee9..ae4bb1bd9d8 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseReactionAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseReactionAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseSearch.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseSearch.d.ts index cb42c97dc34..e6706dd1b33 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseSearch.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseSearch.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseSearch: core.serialization.Schema< serializers.CreateCommentResponseSearch.Raw, CommonApi.CreateCommentResponseSearch diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseSearch.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseSearch.js index 5d4b5b105eb..5ee1808b701 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseSearch.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseSearch.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseSearch = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThread.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThread.d.ts index 8f2bccadb65..4a740715fc7 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThread.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThread.d.ts @@ -12,7 +12,6 @@ import { CreateCommentResponseThreadReactionsItem } from './CreateCommentRespons import { CreateCommentResponseThreadSearch } from './CreateCommentResponseThreadSearch'; import { CreateCommentResponseThreadThreadVersionHistoriesItem } from './CreateCommentResponseThreadThreadVersionHistoriesItem'; import { CreateCommentResponseThreadTopic } from './CreateCommentResponseThreadTopic'; - export declare const CreateCommentResponseThread: core.serialization.ObjectSchema< serializers.CreateCommentResponseThread.Raw, CommonApi.CreateCommentResponseThread @@ -23,14 +22,13 @@ export declare namespace CreateCommentResponseThread { address_id: number; title: string; kind: string; - stage: string; + stage?: string | null; body?: string | null; - plaintext?: string | null; url?: string | null; topic_id?: number | null; pinned?: boolean | null; community_id: string; - view_count: number; + view_count?: number | null; links?: CreateCommentResponseThreadLinksItem.Raw[] | null; content_url?: string | null; read_only?: boolean | null; @@ -46,9 +44,9 @@ export declare namespace CreateCommentResponseThread { archived_at?: string | null; locked_at?: string | null; discord_meta?: CreateCommentResponseThreadDiscordMeta.Raw | null; - reaction_count: number; - reaction_weights_sum: number; - comment_count: number; + reaction_count?: number | null; + reaction_weights_sum?: number | null; + comment_count?: number | null; activity_rank_date?: string | null; created_by?: string | null; profile_name?: string | null; diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThread.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThread.js index 02695ab24f7..b0c8e47cf0a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThread.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThread.js @@ -10,7 +10,6 @@ import { CreateCommentResponseThreadReactionsItem } from './CreateCommentRespons import { CreateCommentResponseThreadSearch } from './CreateCommentResponseThreadSearch'; import { CreateCommentResponseThreadThreadVersionHistoriesItem } from './CreateCommentResponseThreadThreadVersionHistoriesItem'; import { CreateCommentResponseThreadTopic } from './CreateCommentResponseThreadTopic'; - export const CreateCommentResponseThread = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( @@ -19,9 +18,8 @@ export const CreateCommentResponseThread = core.serialization.object({ ), title: core.serialization.string(), kind: core.serialization.string(), - stage: core.serialization.string(), + stage: core.serialization.string().optional(), body: core.serialization.string().optional(), - plaintext: core.serialization.string().optional(), url: core.serialization.string().optional(), topicId: core.serialization.property( 'topic_id', @@ -34,7 +32,7 @@ export const CreateCommentResponseThread = core.serialization.object({ ), viewCount: core.serialization.property( 'view_count', - core.serialization.number(), + core.serialization.number().optional(), ), links: core.serialization .list(CreateCommentResponseThreadLinksItem) @@ -97,15 +95,15 @@ export const CreateCommentResponseThread = core.serialization.object({ ), reactionCount: core.serialization.property( 'reaction_count', - core.serialization.number(), + core.serialization.number().optional(), ), reactionWeightsSum: core.serialization.property( 'reaction_weights_sum', - core.serialization.number(), + core.serialization.number().optional(), ), commentCount: core.serialization.property( 'comment_count', - core.serialization.number(), + core.serialization.number().optional(), ), activityRankDate: core.serialization.property( 'activity_rank_date', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddress.d.ts index 360decd541a..30f7e826a00 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateCommentResponseThreadAddressRole } from './CreateCommentResponseThreadAddressRole'; import { CreateCommentResponseThreadAddressUser } from './CreateCommentResponseThreadAddressUser'; import { CreateCommentResponseThreadAddressWalletId } from './CreateCommentResponseThreadAddressWalletId'; - export declare const CreateCommentResponseThreadAddress: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadAddress.Raw, CommonApi.CreateCommentResponseThreadAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddress.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddress.js index 8cae9a7b68a..91dca80180b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateCommentResponseThreadAddressRole } from './CreateCommentResponseThreadAddressRole'; import { CreateCommentResponseThreadAddressUser } from './CreateCommentResponseThreadAddressUser'; import { CreateCommentResponseThreadAddressWalletId } from './CreateCommentResponseThreadAddressWalletId'; - export const CreateCommentResponseThreadAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressRole.d.ts index 669d7a4b5ff..68c1627080e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadAddressRole: core.serialization.Schema< serializers.CreateCommentResponseThreadAddressRole.Raw, CommonApi.CreateCommentResponseThreadAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressRole.js index b39608b1660..b768f52e9d8 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressRole.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadAddressRole = core.serialization.enum_([ 'admin', 'moderator', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUser.d.ts index 06e3184bec0..f14ba431147 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUser.d.ts @@ -8,7 +8,6 @@ import { CreateCommentResponseThreadAddressUserApiKey } from './CreateCommentRes import { CreateCommentResponseThreadAddressUserEmailNotificationInterval } from './CreateCommentResponseThreadAddressUserEmailNotificationInterval'; import { CreateCommentResponseThreadAddressUserProfile } from './CreateCommentResponseThreadAddressUserProfile'; import { CreateCommentResponseThreadAddressUserProfileTagsItem } from './CreateCommentResponseThreadAddressUserProfileTagsItem'; - export declare const CreateCommentResponseThreadAddressUser: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadAddressUser.Raw, CommonApi.CreateCommentResponseThreadAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUser.js index a8dd1d5db16..8606c7d9911 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUser.js @@ -6,7 +6,6 @@ import { CreateCommentResponseThreadAddressUserApiKey } from './CreateCommentRes import { CreateCommentResponseThreadAddressUserEmailNotificationInterval } from './CreateCommentResponseThreadAddressUserEmailNotificationInterval'; import { CreateCommentResponseThreadAddressUserProfile } from './CreateCommentResponseThreadAddressUserProfile'; import { CreateCommentResponseThreadAddressUserProfileTagsItem } from './CreateCommentResponseThreadAddressUserProfileTagsItem'; - export const CreateCommentResponseThreadAddressUser = core.serialization.object( { id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.d.ts new file mode 100644 index 00000000000..247914d6daf --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateCommentResponseThreadAddressUserApiKey: core.serialization.ObjectSchema< + serializers.CreateCommentResponseThreadAddressUserApiKey.Raw, + CommonApi.CreateCommentResponseThreadAddressUserApiKey +>; +export declare namespace CreateCommentResponseThreadAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.js new file mode 100644 index 00000000000..76872e05c6e --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateCommentResponseThreadAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserEmailNotificationInterval.d.ts index 12290fa04a7..de658ee76d5 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateCommentResponseThreadAddressUserEmailNotificationInterval.Raw, CommonApi.CreateCommentResponseThreadAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserEmailNotificationInterval.js index a7fe1703b7e..f546a78b5a9 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.d.ts index 4856a647253..88269b64fee 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseThreadAddressUserProfileBackgroundImage } from './CreateCommentResponseThreadAddressUserProfileBackgroundImage'; - export declare const CreateCommentResponseThreadAddressUserProfile: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadAddressUserProfile.Raw, CommonApi.CreateCommentResponseThreadAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.js index a2dc4a29420..d0c84cf2300 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseThreadAddressUserProfileBackgroundImage } from './CreateCommentResponseThreadAddressUserProfileBackgroundImage'; - export const CreateCommentResponseThreadAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileBackgroundImage.d.ts index 19a15980131..44761a41870 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadAddressUserProfileBackgroundImage.Raw, CommonApi.CreateCommentResponseThreadAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileBackgroundImage.js index 21fea3c51c2..99c0f19dc69 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileTagsItem.d.ts index dd388bcb2f9..ee52b722def 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadAddressUserProfileTagsItem.Raw, CommonApi.CreateCommentResponseThreadAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileTagsItem.js index c8d00c13fe9..8d3a11a020c 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressWalletId.d.ts index b1e1c23d74f..066abd6a329 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadAddressWalletId: core.serialization.Schema< serializers.CreateCommentResponseThreadAddressWalletId.Raw, CommonApi.CreateCommentResponseThreadAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressWalletId.js index 3616479f620..2892c968c37 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.d.ts index 8a8b3c84795..a989c366b51 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateCommentResponseThreadCollaboratorsItemRole } from './CreateCommentResponseThreadCollaboratorsItemRole'; import { CreateCommentResponseThreadCollaboratorsItemUser } from './CreateCommentResponseThreadCollaboratorsItemUser'; import { CreateCommentResponseThreadCollaboratorsItemWalletId } from './CreateCommentResponseThreadCollaboratorsItemWalletId'; - export declare const CreateCommentResponseThreadCollaboratorsItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadCollaboratorsItem.Raw, CommonApi.CreateCommentResponseThreadCollaboratorsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.js index 93884541462..60e99907eda 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateCommentResponseThreadCollaboratorsItemRole } from './CreateCommentResponseThreadCollaboratorsItemRole'; import { CreateCommentResponseThreadCollaboratorsItemUser } from './CreateCommentResponseThreadCollaboratorsItemUser'; import { CreateCommentResponseThreadCollaboratorsItemWalletId } from './CreateCommentResponseThreadCollaboratorsItemWalletId'; - export const CreateCommentResponseThreadCollaboratorsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemRole.d.ts index 021561e0ba8..7b4f82d16ec 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadCollaboratorsItemRole: core.serialization.Schema< serializers.CreateCommentResponseThreadCollaboratorsItemRole.Raw, CommonApi.CreateCommentResponseThreadCollaboratorsItemRole diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemRole.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemRole.js index 782a88548f6..5feb104d68d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadCollaboratorsItemRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.d.ts index e2ff7e66dc8..510c12d0de2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.d.ts @@ -8,7 +8,6 @@ import { CreateCommentResponseThreadCollaboratorsItemUserApiKey } from './Create import { CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval } from './CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval'; import { CreateCommentResponseThreadCollaboratorsItemUserProfile } from './CreateCommentResponseThreadCollaboratorsItemUserProfile'; import { CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem } from './CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem'; - export declare const CreateCommentResponseThreadCollaboratorsItemUser: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadCollaboratorsItemUser.Raw, CommonApi.CreateCommentResponseThreadCollaboratorsItemUser diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.js index 3fe80a02229..6053bd34805 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUser.js @@ -6,7 +6,6 @@ import { CreateCommentResponseThreadCollaboratorsItemUserApiKey } from './Create import { CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval } from './CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval'; import { CreateCommentResponseThreadCollaboratorsItemUserProfile } from './CreateCommentResponseThreadCollaboratorsItemUserProfile'; import { CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem } from './CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem'; - export const CreateCommentResponseThreadCollaboratorsItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..d3ae03069c9 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateCommentResponseThreadCollaboratorsItemUserApiKey: core.serialization.ObjectSchema< + serializers.CreateCommentResponseThreadCollaboratorsItemUserApiKey.Raw, + CommonApi.CreateCommentResponseThreadCollaboratorsItemUserApiKey +>; +export declare namespace CreateCommentResponseThreadCollaboratorsItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..30e2bf423e4 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateCommentResponseThreadCollaboratorsItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.d.ts index 44a87dd0e31..333f74eb69e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.Raw, CommonApi.CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.js index df5b7debbfb..f4bdbd3cddf 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.d.ts index 2b0fb31dc4a..dc072941968 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage } from './CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage'; - export declare const CreateCommentResponseThreadCollaboratorsItemUserProfile: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadCollaboratorsItemUserProfile.Raw, CommonApi.CreateCommentResponseThreadCollaboratorsItemUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.js index 6d68931bd33..598329229d4 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage } from './CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage'; - export const CreateCommentResponseThreadCollaboratorsItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.d.ts index 0697bf729a2..2eed0164218 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.Raw, CommonApi.CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.js index 122490207a4..210abf65ef7 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.d.ts index d68940242e5..7559def0bb2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.Raw, CommonApi.CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.js index 53e641ae190..a4495355103 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadCollaboratorsItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemWalletId.d.ts index fabd3fd3c74..e60c7e8722b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadCollaboratorsItemWalletId: core.serialization.Schema< serializers.CreateCommentResponseThreadCollaboratorsItemWalletId.Raw, CommonApi.CreateCommentResponseThreadCollaboratorsItemWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemWalletId.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemWalletId.js index eeb526656f7..664b18a36a0 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadCollaboratorsItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadCollaboratorsItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMeta.d.ts index 9ecfb068be9..c3b46f1b797 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseThreadDiscordMetaUser } from './CreateCommentResponseThreadDiscordMetaUser'; - export declare const CreateCommentResponseThreadDiscordMeta: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadDiscordMeta.Raw, CommonApi.CreateCommentResponseThreadDiscordMeta diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMeta.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMeta.js index 1d95d550da8..95b4930a2a0 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseThreadDiscordMetaUser } from './CreateCommentResponseThreadDiscordMetaUser'; - export const CreateCommentResponseThreadDiscordMeta = core.serialization.object( { user: CreateCommentResponseThreadDiscordMetaUser, diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMetaUser.d.ts index e05bc9f49de..e7d6804313f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadDiscordMetaUser: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadDiscordMetaUser.Raw, CommonApi.CreateCommentResponseThreadDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMetaUser.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMetaUser.js index 8bfd4e96c97..4a5437a6791 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItem.d.ts index 57d4ecff405..0c917a8d428 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseThreadLinksItemSource } from './CreateCommentResponseThreadLinksItemSource'; - export declare const CreateCommentResponseThreadLinksItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadLinksItem.Raw, CommonApi.CreateCommentResponseThreadLinksItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItem.js index f7767c83579..763339daa8b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseThreadLinksItemSource } from './CreateCommentResponseThreadLinksItemSource'; - export const CreateCommentResponseThreadLinksItem = core.serialization.object({ source: CreateCommentResponseThreadLinksItemSource, identifier: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItemSource.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItemSource.d.ts index d087244f639..6d56231c5ec 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItemSource.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItemSource.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadLinksItemSource: core.serialization.Schema< serializers.CreateCommentResponseThreadLinksItemSource.Raw, CommonApi.CreateCommentResponseThreadLinksItemSource diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItemSource.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItemSource.js index 3b798d6efbc..1f10e364183 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItemSource.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadLinksItemSource.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadLinksItemSource = core.serialization.enum_([ 'snapshot', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItem.d.ts index 6ef63903b89..ed75668bf75 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseThreadReactionsItemAddress } from './CreateCommentResponseThreadReactionsItemAddress'; - export declare const CreateCommentResponseThreadReactionsItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadReactionsItem.Raw, CommonApi.CreateCommentResponseThreadReactionsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItem.js index 635256cb993..7e280790ba0 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseThreadReactionsItemAddress } from './CreateCommentResponseThreadReactionsItemAddress'; - export const CreateCommentResponseThreadReactionsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.d.ts index 2ae95c26ad5..14743c4116a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateCommentResponseThreadReactionsItemAddressRole } from './CreateCommentResponseThreadReactionsItemAddressRole'; import { CreateCommentResponseThreadReactionsItemAddressUser } from './CreateCommentResponseThreadReactionsItemAddressUser'; import { CreateCommentResponseThreadReactionsItemAddressWalletId } from './CreateCommentResponseThreadReactionsItemAddressWalletId'; - export declare const CreateCommentResponseThreadReactionsItemAddress: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadReactionsItemAddress.Raw, CommonApi.CreateCommentResponseThreadReactionsItemAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.js index dc02490e8d5..288a63b6bcf 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateCommentResponseThreadReactionsItemAddressRole } from './CreateCommentResponseThreadReactionsItemAddressRole'; import { CreateCommentResponseThreadReactionsItemAddressUser } from './CreateCommentResponseThreadReactionsItemAddressUser'; import { CreateCommentResponseThreadReactionsItemAddressWalletId } from './CreateCommentResponseThreadReactionsItemAddressWalletId'; - export const CreateCommentResponseThreadReactionsItemAddress = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressRole.d.ts index d7447a0bfe9..d2246128379 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadReactionsItemAddressRole: core.serialization.Schema< serializers.CreateCommentResponseThreadReactionsItemAddressRole.Raw, CommonApi.CreateCommentResponseThreadReactionsItemAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressRole.js index 691179c723f..85af626d898 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadReactionsItemAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.d.ts index 71034917903..ad463157d60 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.d.ts @@ -8,7 +8,6 @@ import { CreateCommentResponseThreadReactionsItemAddressUserApiKey } from './Cre import { CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval } from './CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval'; import { CreateCommentResponseThreadReactionsItemAddressUserProfile } from './CreateCommentResponseThreadReactionsItemAddressUserProfile'; import { CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem } from './CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem'; - export declare const CreateCommentResponseThreadReactionsItemAddressUser: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadReactionsItemAddressUser.Raw, CommonApi.CreateCommentResponseThreadReactionsItemAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.js index 16c7b62bc07..c08764d85c3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUser.js @@ -6,7 +6,6 @@ import { CreateCommentResponseThreadReactionsItemAddressUserApiKey } from './Cre import { CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval } from './CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval'; import { CreateCommentResponseThreadReactionsItemAddressUserProfile } from './CreateCommentResponseThreadReactionsItemAddressUserProfile'; import { CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem } from './CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem'; - export const CreateCommentResponseThreadReactionsItemAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..d19aa76dcb1 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateCommentResponseThreadReactionsItemAddressUserApiKey: core.serialization.ObjectSchema< + serializers.CreateCommentResponseThreadReactionsItemAddressUserApiKey.Raw, + CommonApi.CreateCommentResponseThreadReactionsItemAddressUserApiKey +>; +export declare namespace CreateCommentResponseThreadReactionsItemAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..665163b9ff1 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateCommentResponseThreadReactionsItemAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.d.ts index bcacdf739d4..4f1a3913973 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.Raw, CommonApi.CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.js index 24c9eb5dbcd..bc2165457fe 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.d.ts index dcc95b5e6a6..c515e993017 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage } from './CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage'; - export declare const CreateCommentResponseThreadReactionsItemAddressUserProfile: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadReactionsItemAddressUserProfile.Raw, CommonApi.CreateCommentResponseThreadReactionsItemAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.js index d2214fbf0ac..c58fd60935f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage } from './CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage'; - export const CreateCommentResponseThreadReactionsItemAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.d.ts index 5803abc47a2..07fe04661ff 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.Raw, CommonApi.CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.js index 75e107a5cf5..6cee406ba40 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.d.ts index f9674aabdcb..1963d7c64af 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.Raw, CommonApi.CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.js index 5983f229a88..ee9c2d854bf 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadReactionsItemAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressWalletId.d.ts index cbd9d79b26d..21b3888fefc 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadReactionsItemAddressWalletId: core.serialization.Schema< serializers.CreateCommentResponseThreadReactionsItemAddressWalletId.Raw, CommonApi.CreateCommentResponseThreadReactionsItemAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressWalletId.js index 91243cd87f5..500846e7dfc 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadReactionsItemAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadReactionsItemAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadSearch.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadSearch.d.ts index 8af7aae5900..2d9d2b80dff 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadSearch.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadSearch.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadSearch: core.serialization.Schema< serializers.CreateCommentResponseThreadSearch.Raw, CommonApi.CreateCommentResponseThreadSearch diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadSearch.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadSearch.js index d3f6d9d15d3..5324a81091d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadSearch.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadSearch.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadSearch = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadThreadVersionHistoriesItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadThreadVersionHistoriesItem.d.ts index a36152320be..945a6eafb6e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadThreadVersionHistoriesItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadThreadVersionHistoriesItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadThreadVersionHistoriesItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadThreadVersionHistoriesItem.Raw, CommonApi.CreateCommentResponseThreadThreadVersionHistoriesItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadThreadVersionHistoriesItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadThreadVersionHistoriesItem.js index 64ad3c5081e..df4ebb9c869 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadThreadVersionHistoriesItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadThreadVersionHistoriesItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadThreadVersionHistoriesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopic.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopic.d.ts index be0e9c6ef71..96da7ce1abf 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopic.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopic.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentResponseThreadTopicContestTopicsItem } from './CreateCommentResponseThreadTopicContestTopicsItem'; import { CreateCommentResponseThreadTopicWeightedVoting } from './CreateCommentResponseThreadTopicWeightedVoting'; - export declare const CreateCommentResponseThreadTopic: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadTopic.Raw, CommonApi.CreateCommentResponseThreadTopic diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopic.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopic.js index d134960a1d0..a8960844c2e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopic.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopic.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateCommentResponseThreadTopicContestTopicsItem } from './CreateCommentResponseThreadTopicContestTopicsItem'; import { CreateCommentResponseThreadTopicWeightedVoting } from './CreateCommentResponseThreadTopicWeightedVoting'; - export const CreateCommentResponseThreadTopic = core.serialization.object({ id: core.serialization.number().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicContestTopicsItem.d.ts index 2ea89b7962f..4c8f3a4c095 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadTopicContestTopicsItem: core.serialization.ObjectSchema< serializers.CreateCommentResponseThreadTopicContestTopicsItem.Raw, CommonApi.CreateCommentResponseThreadTopicContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicContestTopicsItem.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicContestTopicsItem.js index e1f4ae0e6f4..71b69bfea0f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadTopicContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicWeightedVoting.d.ts index 31b91da90eb..5f71c485cf3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentResponseThreadTopicWeightedVoting: core.serialization.Schema< serializers.CreateCommentResponseThreadTopicWeightedVoting.Raw, CommonApi.CreateCommentResponseThreadTopicWeightedVoting diff --git a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicWeightedVoting.js b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicWeightedVoting.js index 7713c773c5f..945418b964f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/comment/types/CreateCommentResponseThreadTopicWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentResponseThreadTopicWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/comment/types/DeleteCommentResponse.d.ts b/libs/api-client/src/serialization/resources/comment/types/DeleteCommentResponse.d.ts index 8260bd0a665..da9ce4b2f44 100644 --- a/libs/api-client/src/serialization/resources/comment/types/DeleteCommentResponse.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/DeleteCommentResponse.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const DeleteCommentResponse: core.serialization.ObjectSchema< serializers.DeleteCommentResponse.Raw, CommonApi.DeleteCommentResponse diff --git a/libs/api-client/src/serialization/resources/comment/types/DeleteCommentResponse.js b/libs/api-client/src/serialization/resources/comment/types/DeleteCommentResponse.js index 5bec2396453..30706b64d21 100644 --- a/libs/api-client/src/serialization/resources/comment/types/DeleteCommentResponse.js +++ b/libs/api-client/src/serialization/resources/comment/types/DeleteCommentResponse.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const DeleteCommentResponse = core.serialization.object({ commentId: core.serialization.property( 'comment_id', diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsRequestOrderDirection.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsRequestOrderDirection.d.ts index 1a7562d652b..84d9ec9d0a0 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsRequestOrderDirection.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsRequestOrderDirection.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsRequestOrderDirection: core.serialization.Schema< serializers.GetCommentsRequestOrderDirection.Raw, CommonApi.GetCommentsRequestOrderDirection diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsRequestOrderDirection.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsRequestOrderDirection.js index 959c92ffbfe..914172da896 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsRequestOrderDirection.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsRequestOrderDirection.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsRequestOrderDirection = core.serialization.enum_([ 'ASC', 'DESC', diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponse.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponse.d.ts index 7c94d3c22cc..515edeb4abc 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponse.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponse.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItem } from './GetCommentsResponseResultsItem'; - export declare const GetCommentsResponse: core.serialization.ObjectSchema< serializers.GetCommentsResponse.Raw, CommonApi.GetCommentsResponse diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponse.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponse.js index a65747976db..4b524a8ca34 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponse.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponse.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItem } from './GetCommentsResponseResultsItem'; - export const GetCommentsResponse = core.serialization.object({ limit: core.serialization.number(), page: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItem.d.ts index d7674357662..8c6d73621d4 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItem.d.ts @@ -10,7 +10,6 @@ import { GetCommentsResponseResultsItemDiscordMeta } from './GetCommentsResponse import { GetCommentsResponseResultsItemReaction } from './GetCommentsResponseResultsItemReaction'; import { GetCommentsResponseResultsItemSearch } from './GetCommentsResponseResultsItemSearch'; import { GetCommentsResponseResultsItemThread } from './GetCommentsResponseResultsItemThread'; - export declare const GetCommentsResponseResultsItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItem.Raw, CommonApi.GetCommentsResponseResultsItem @@ -21,7 +20,6 @@ export declare namespace GetCommentsResponseResultsItem { thread_id: number; address_id: number; text: string; - plaintext: string; parent_id?: string | null; content_url?: string | null; canvas_signed_data?: string | null; diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItem.js index a5069345d05..d271fa83e4a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItem.js @@ -8,7 +8,6 @@ import { GetCommentsResponseResultsItemDiscordMeta } from './GetCommentsResponse import { GetCommentsResponseResultsItemReaction } from './GetCommentsResponseResultsItemReaction'; import { GetCommentsResponseResultsItemSearch } from './GetCommentsResponseResultsItemSearch'; import { GetCommentsResponseResultsItemThread } from './GetCommentsResponseResultsItemThread'; - export const GetCommentsResponseResultsItem = core.serialization.object({ id: core.serialization.number().optional(), threadId: core.serialization.property( @@ -20,7 +19,6 @@ export const GetCommentsResponseResultsItem = core.serialization.object({ core.serialization.number(), ), text: core.serialization.string(), - plaintext: core.serialization.string(), parentId: core.serialization.property( 'parent_id', core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddress.d.ts index 8d6fa0ecfe0..63976a8447f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemAddressRole } from './GetCommentsResponseResultsItemAddressRole'; import { GetCommentsResponseResultsItemAddressUser } from './GetCommentsResponseResultsItemAddressUser'; import { GetCommentsResponseResultsItemAddressWalletId } from './GetCommentsResponseResultsItemAddressWalletId'; - export declare const GetCommentsResponseResultsItemAddress: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemAddress.Raw, CommonApi.GetCommentsResponseResultsItemAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddress.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddress.js index d3ad551f7e6..ff74679220e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemAddressRole } from './GetCommentsResponseResultsItemAddressRole'; import { GetCommentsResponseResultsItemAddressUser } from './GetCommentsResponseResultsItemAddressUser'; import { GetCommentsResponseResultsItemAddressWalletId } from './GetCommentsResponseResultsItemAddressWalletId'; - export const GetCommentsResponseResultsItemAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressRole.d.ts index 387814649b2..985346966d5 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemAddressRole: core.serialization.Schema< serializers.GetCommentsResponseResultsItemAddressRole.Raw, CommonApi.GetCommentsResponseResultsItemAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressRole.js index 8f4e357c671..17593476506 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUser.d.ts index 4f833a106a1..2c13cb0ac4d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUser.d.ts @@ -8,7 +8,6 @@ import { GetCommentsResponseResultsItemAddressUserApiKey } from './GetCommentsRe import { GetCommentsResponseResultsItemAddressUserEmailNotificationInterval } from './GetCommentsResponseResultsItemAddressUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemAddressUserProfile } from './GetCommentsResponseResultsItemAddressUserProfile'; import { GetCommentsResponseResultsItemAddressUserProfileTagsItem } from './GetCommentsResponseResultsItemAddressUserProfileTagsItem'; - export declare const GetCommentsResponseResultsItemAddressUser: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemAddressUser.Raw, CommonApi.GetCommentsResponseResultsItemAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUser.js index 1c6b7714833..942d6ad37ad 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUser.js @@ -6,7 +6,6 @@ import { GetCommentsResponseResultsItemAddressUserApiKey } from './GetCommentsRe import { GetCommentsResponseResultsItemAddressUserEmailNotificationInterval } from './GetCommentsResponseResultsItemAddressUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemAddressUserProfile } from './GetCommentsResponseResultsItemAddressUserProfile'; import { GetCommentsResponseResultsItemAddressUserProfileTagsItem } from './GetCommentsResponseResultsItemAddressUserProfileTagsItem'; - export const GetCommentsResponseResultsItemAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..237069da68e --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetCommentsResponseResultsItemAddressUserApiKey: core.serialization.ObjectSchema< + serializers.GetCommentsResponseResultsItemAddressUserApiKey.Raw, + CommonApi.GetCommentsResponseResultsItemAddressUserApiKey +>; +export declare namespace GetCommentsResponseResultsItemAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.js new file mode 100644 index 00000000000..5c69b370815 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetCommentsResponseResultsItemAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserEmailNotificationInterval.d.ts index 6f027f04291..ea9fac9135a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.GetCommentsResponseResultsItemAddressUserEmailNotificationInterval.Raw, CommonApi.GetCommentsResponseResultsItemAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserEmailNotificationInterval.js index 61f0ac95c44..f630a195d97 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.d.ts index 3d03782cce3..c14fa6896a0 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemAddressUserProfileBackgroundImage } from './GetCommentsResponseResultsItemAddressUserProfileBackgroundImage'; - export declare const GetCommentsResponseResultsItemAddressUserProfile: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemAddressUserProfile.Raw, CommonApi.GetCommentsResponseResultsItemAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.js index bce0ef197f4..35ae5360481 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemAddressUserProfileBackgroundImage } from './GetCommentsResponseResultsItemAddressUserProfileBackgroundImage'; - export const GetCommentsResponseResultsItemAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileBackgroundImage.d.ts index 5abda0fcac3..0f2175385b2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemAddressUserProfileBackgroundImage.Raw, CommonApi.GetCommentsResponseResultsItemAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileBackgroundImage.js index 7b49fa8e597..9cefc7f87f6 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileTagsItem.d.ts index 40ae8ee274f..d6be09a1108 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemAddressUserProfileTagsItem.Raw, CommonApi.GetCommentsResponseResultsItemAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileTagsItem.js index 1d520c96eff..6cb7443a961 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressWalletId.d.ts index e2244f5bc53..3e68d8b99a2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemAddressWalletId: core.serialization.Schema< serializers.GetCommentsResponseResultsItemAddressWalletId.Raw, CommonApi.GetCommentsResponseResultsItemAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressWalletId.js index 60a37930a6e..053a3bfdbff 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemCommentVersionHistoriesItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemCommentVersionHistoriesItem.d.ts index e60de510ad9..76ba8f176d8 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemCommentVersionHistoriesItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemCommentVersionHistoriesItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemCommentVersionHistoriesItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemCommentVersionHistoriesItem.Raw, CommonApi.GetCommentsResponseResultsItemCommentVersionHistoriesItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemCommentVersionHistoriesItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemCommentVersionHistoriesItem.js index 5a2068935a2..64c289800d3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemCommentVersionHistoriesItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemCommentVersionHistoriesItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemCommentVersionHistoriesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.d.ts index c882270b525..fc458f59228 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemDiscordMetaUser } from './GetCommentsResponseResultsItemDiscordMetaUser'; - export declare const GetCommentsResponseResultsItemDiscordMeta: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemDiscordMeta.Raw, CommonApi.GetCommentsResponseResultsItemDiscordMeta diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.js index 24b6d854a03..ad31b24efd9 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemDiscordMetaUser } from './GetCommentsResponseResultsItemDiscordMetaUser'; - export const GetCommentsResponseResultsItemDiscordMeta = core.serialization.object({ user: GetCommentsResponseResultsItemDiscordMetaUser, diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMetaUser.d.ts index 8edf40a17d0..d5c0330be48 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemDiscordMetaUser: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemDiscordMetaUser.Raw, CommonApi.GetCommentsResponseResultsItemDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMetaUser.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMetaUser.js index ce48ed1b6c0..c00ceee0c58 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReaction.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReaction.d.ts index 94e389d2c86..dd4b567e5b4 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReaction.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReaction.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemReactionAddress } from './GetCommentsResponseResultsItemReactionAddress'; - export declare const GetCommentsResponseResultsItemReaction: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemReaction.Raw, CommonApi.GetCommentsResponseResultsItemReaction diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReaction.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReaction.js index 0984bed2dc4..89fc878aad4 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReaction.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReaction.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemReactionAddress } from './GetCommentsResponseResultsItemReactionAddress'; - export const GetCommentsResponseResultsItemReaction = core.serialization.object( { id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.d.ts index cba24738a33..f6415b3a9e9 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemReactionAddressRole } from './GetCommentsResponseResultsItemReactionAddressRole'; import { GetCommentsResponseResultsItemReactionAddressUser } from './GetCommentsResponseResultsItemReactionAddressUser'; import { GetCommentsResponseResultsItemReactionAddressWalletId } from './GetCommentsResponseResultsItemReactionAddressWalletId'; - export declare const GetCommentsResponseResultsItemReactionAddress: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemReactionAddress.Raw, CommonApi.GetCommentsResponseResultsItemReactionAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.js index e0c675756d0..613c1d47371 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemReactionAddressRole } from './GetCommentsResponseResultsItemReactionAddressRole'; import { GetCommentsResponseResultsItemReactionAddressUser } from './GetCommentsResponseResultsItemReactionAddressUser'; import { GetCommentsResponseResultsItemReactionAddressWalletId } from './GetCommentsResponseResultsItemReactionAddressWalletId'; - export const GetCommentsResponseResultsItemReactionAddress = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressRole.d.ts index 54afe007844..e126b67d2ff 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemReactionAddressRole: core.serialization.Schema< serializers.GetCommentsResponseResultsItemReactionAddressRole.Raw, CommonApi.GetCommentsResponseResultsItemReactionAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressRole.js index 62b02a3da5e..e8fcea6b5c4 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemReactionAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.d.ts index f856d6fe15f..b475c8bf2ef 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.d.ts @@ -8,7 +8,6 @@ import { GetCommentsResponseResultsItemReactionAddressUserApiKey } from './GetCo import { GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval } from './GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemReactionAddressUserProfile } from './GetCommentsResponseResultsItemReactionAddressUserProfile'; import { GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem } from './GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem'; - export declare const GetCommentsResponseResultsItemReactionAddressUser: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemReactionAddressUser.Raw, CommonApi.GetCommentsResponseResultsItemReactionAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.js index 725fcb2264c..5e6d15ba81f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUser.js @@ -6,7 +6,6 @@ import { GetCommentsResponseResultsItemReactionAddressUserApiKey } from './GetCo import { GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval } from './GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemReactionAddressUserProfile } from './GetCommentsResponseResultsItemReactionAddressUserProfile'; import { GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem } from './GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem'; - export const GetCommentsResponseResultsItemReactionAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.d.ts new file mode 100644 index 00000000000..d9391150f57 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetCommentsResponseResultsItemReactionAddressUserApiKey: core.serialization.ObjectSchema< + serializers.GetCommentsResponseResultsItemReactionAddressUserApiKey.Raw, + CommonApi.GetCommentsResponseResultsItemReactionAddressUserApiKey +>; +export declare namespace GetCommentsResponseResultsItemReactionAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.js new file mode 100644 index 00000000000..9ef95430875 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetCommentsResponseResultsItemReactionAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval.d.ts index 0b94d9e38ef..f0c8f52396f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval.Raw, CommonApi.GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval.js index 6f0820f80fb..d00a294ad83 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemReactionAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.d.ts index a1eb63a4f86..736a471a74a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage } from './GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage'; - export declare const GetCommentsResponseResultsItemReactionAddressUserProfile: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemReactionAddressUserProfile.Raw, CommonApi.GetCommentsResponseResultsItemReactionAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.js index 63e59e4574a..0a9fdcff826 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage } from './GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage'; - export const GetCommentsResponseResultsItemReactionAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage.d.ts index ec78934e0cf..1409c2afe99 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage.Raw, CommonApi.GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage.js index 283a0b574ff..21f870f65b1 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemReactionAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem.d.ts index 3e0b6ef733a..029c9fd84d3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem.Raw, CommonApi.GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem.js index baff0543588..0de69d3548e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemReactionAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressWalletId.d.ts index fa0fe904fab..5aa7e60dcfe 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemReactionAddressWalletId: core.serialization.Schema< serializers.GetCommentsResponseResultsItemReactionAddressWalletId.Raw, CommonApi.GetCommentsResponseResultsItemReactionAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressWalletId.js index fa40d54932f..5cc8a4fe043 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemReactionAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemReactionAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemSearch.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemSearch.d.ts index 6ac625ac286..8c21cf1ff07 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemSearch.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemSearch.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemSearch: core.serialization.Schema< serializers.GetCommentsResponseResultsItemSearch.Raw, CommonApi.GetCommentsResponseResultsItemSearch diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemSearch.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemSearch.js index ff7695725d1..f230521dc2b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemSearch.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemSearch.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemSearch = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThread.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThread.d.ts index 844bf98304e..2643d10b578 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThread.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThread.d.ts @@ -12,7 +12,6 @@ import { GetCommentsResponseResultsItemThreadReactionsItem } from './GetComments import { GetCommentsResponseResultsItemThreadSearch } from './GetCommentsResponseResultsItemThreadSearch'; import { GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem } from './GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem'; import { GetCommentsResponseResultsItemThreadTopic } from './GetCommentsResponseResultsItemThreadTopic'; - export declare const GetCommentsResponseResultsItemThread: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThread.Raw, CommonApi.GetCommentsResponseResultsItemThread @@ -23,14 +22,13 @@ export declare namespace GetCommentsResponseResultsItemThread { address_id: number; title: string; kind: string; - stage: string; + stage?: string | null; body?: string | null; - plaintext?: string | null; url?: string | null; topic_id?: number | null; pinned?: boolean | null; community_id: string; - view_count: number; + view_count?: number | null; links?: GetCommentsResponseResultsItemThreadLinksItem.Raw[] | null; content_url?: string | null; read_only?: boolean | null; @@ -46,9 +44,9 @@ export declare namespace GetCommentsResponseResultsItemThread { archived_at?: string | null; locked_at?: string | null; discord_meta?: GetCommentsResponseResultsItemThreadDiscordMeta.Raw | null; - reaction_count: number; - reaction_weights_sum: number; - comment_count: number; + reaction_count?: number | null; + reaction_weights_sum?: number | null; + comment_count?: number | null; activity_rank_date?: string | null; created_by?: string | null; profile_name?: string | null; diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThread.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThread.js index 56bf3c99aaa..0b4ec4f425e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThread.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThread.js @@ -10,7 +10,6 @@ import { GetCommentsResponseResultsItemThreadReactionsItem } from './GetComments import { GetCommentsResponseResultsItemThreadSearch } from './GetCommentsResponseResultsItemThreadSearch'; import { GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem } from './GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem'; import { GetCommentsResponseResultsItemThreadTopic } from './GetCommentsResponseResultsItemThreadTopic'; - export const GetCommentsResponseResultsItemThread = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( @@ -19,9 +18,8 @@ export const GetCommentsResponseResultsItemThread = core.serialization.object({ ), title: core.serialization.string(), kind: core.serialization.string(), - stage: core.serialization.string(), + stage: core.serialization.string().optional(), body: core.serialization.string().optional(), - plaintext: core.serialization.string().optional(), url: core.serialization.string().optional(), topicId: core.serialization.property( 'topic_id', @@ -34,7 +32,7 @@ export const GetCommentsResponseResultsItemThread = core.serialization.object({ ), viewCount: core.serialization.property( 'view_count', - core.serialization.number(), + core.serialization.number().optional(), ), links: core.serialization .list(GetCommentsResponseResultsItemThreadLinksItem) @@ -97,15 +95,15 @@ export const GetCommentsResponseResultsItemThread = core.serialization.object({ ), reactionCount: core.serialization.property( 'reaction_count', - core.serialization.number(), + core.serialization.number().optional(), ), reactionWeightsSum: core.serialization.property( 'reaction_weights_sum', - core.serialization.number(), + core.serialization.number().optional(), ), commentCount: core.serialization.property( 'comment_count', - core.serialization.number(), + core.serialization.number().optional(), ), activityRankDate: core.serialization.property( 'activity_rank_date', diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.d.ts index 3b0ed9d6a5d..f4a53c50f22 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadAddressRole } from './GetCommentsResponseResultsItemThreadAddressRole'; import { GetCommentsResponseResultsItemThreadAddressUser } from './GetCommentsResponseResultsItemThreadAddressUser'; import { GetCommentsResponseResultsItemThreadAddressWalletId } from './GetCommentsResponseResultsItemThreadAddressWalletId'; - export declare const GetCommentsResponseResultsItemThreadAddress: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadAddress.Raw, CommonApi.GetCommentsResponseResultsItemThreadAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.js index 2d63e4e7888..c0e47df7780 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadAddressRole } from './GetCommentsResponseResultsItemThreadAddressRole'; import { GetCommentsResponseResultsItemThreadAddressUser } from './GetCommentsResponseResultsItemThreadAddressUser'; import { GetCommentsResponseResultsItemThreadAddressWalletId } from './GetCommentsResponseResultsItemThreadAddressWalletId'; - export const GetCommentsResponseResultsItemThreadAddress = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressRole.d.ts index 6e934dd374b..c13cd0bee5b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadAddressRole: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadAddressRole.Raw, CommonApi.GetCommentsResponseResultsItemThreadAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressRole.js index af9a5dd89ce..3d196516c9b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.d.ts index 90c8fad1cd7..7788a76a7a1 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.d.ts @@ -8,7 +8,6 @@ import { GetCommentsResponseResultsItemThreadAddressUserApiKey } from './GetComm import { GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval } from './GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemThreadAddressUserProfile } from './GetCommentsResponseResultsItemThreadAddressUserProfile'; import { GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem } from './GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem'; - export declare const GetCommentsResponseResultsItemThreadAddressUser: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadAddressUser.Raw, CommonApi.GetCommentsResponseResultsItemThreadAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.js index 9b97bf38e8e..7dcde017574 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUser.js @@ -6,7 +6,6 @@ import { GetCommentsResponseResultsItemThreadAddressUserApiKey } from './GetComm import { GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval } from './GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemThreadAddressUserProfile } from './GetCommentsResponseResultsItemThreadAddressUserProfile'; import { GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem } from './GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem'; - export const GetCommentsResponseResultsItemThreadAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.d.ts new file mode 100644 index 00000000000..f9371664c6d --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetCommentsResponseResultsItemThreadAddressUserApiKey: core.serialization.ObjectSchema< + serializers.GetCommentsResponseResultsItemThreadAddressUserApiKey.Raw, + CommonApi.GetCommentsResponseResultsItemThreadAddressUserApiKey +>; +export declare namespace GetCommentsResponseResultsItemThreadAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.js new file mode 100644 index 00000000000..fe10ef95ad5 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetCommentsResponseResultsItemThreadAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval.d.ts index dafdf0d4054..90e5963d9a3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval.Raw, CommonApi.GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval.js index a9ff9f2fe30..6d23be05dff 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.d.ts index 5a7808f66e6..71b4aa4aecb 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage } from './GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage'; - export declare const GetCommentsResponseResultsItemThreadAddressUserProfile: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadAddressUserProfile.Raw, CommonApi.GetCommentsResponseResultsItemThreadAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.js index 2c9ce47a60f..473a17c7591 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage } from './GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage'; - export const GetCommentsResponseResultsItemThreadAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage.d.ts index 30db751b02a..da999893c08 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage.Raw, CommonApi.GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage.js index fdf4fc3aa10..41caabaca58 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem.d.ts index 91c30e7e480..8a0ee35d728 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem.Raw, CommonApi.GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem.js index 51c71aebdc1..d30501b45d7 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressWalletId.d.ts index 4ea25e4bfec..060dfc1637b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadAddressWalletId: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadAddressWalletId.Raw, CommonApi.GetCommentsResponseResultsItemThreadAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressWalletId.js index 57980fa6502..b9f34ddd5c3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.d.ts index cf6feabeda8..dd6d40041cd 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemRole } from './GetCommentsResponseResultsItemThreadCollaboratorsItemRole'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemUser } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUser'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId } from './GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId'; - export declare const GetCommentsResponseResultsItemThreadCollaboratorsItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadCollaboratorsItem.Raw, CommonApi.GetCommentsResponseResultsItemThreadCollaboratorsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.js index f3c7a65eb61..6d19a3ef822 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemRole } from './GetCommentsResponseResultsItemThreadCollaboratorsItemRole'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemUser } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUser'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId } from './GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId'; - export const GetCommentsResponseResultsItemThreadCollaboratorsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemRole.d.ts index fbf2ab2f2de..53d926e73e5 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadCollaboratorsItemRole: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadCollaboratorsItemRole.Raw, CommonApi.GetCommentsResponseResultsItemThreadCollaboratorsItemRole diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemRole.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemRole.js index 913de751f04..def50b5584d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadCollaboratorsItemRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.d.ts index b29236b808e..c3e2ef6c35b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.d.ts @@ -8,7 +8,6 @@ import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey } from import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem'; - export declare const GetCommentsResponseResultsItemThreadCollaboratorsItemUser: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadCollaboratorsItemUser.Raw, CommonApi.GetCommentsResponseResultsItemThreadCollaboratorsItemUser diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.js index e9dc15003bf..cbdaba598cc 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUser.js @@ -6,7 +6,6 @@ import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey } from import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem'; - export const GetCommentsResponseResultsItemThreadCollaboratorsItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..2a49d566cb2 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey: core.serialization.ObjectSchema< + serializers.GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.Raw, + CommonApi.GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey +>; +export declare namespace GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..8f06a70f53d --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetCommentsResponseResultsItemThreadCollaboratorsItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval.d.ts index ac028d1ff80..67c15bef3c9 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval.Raw, CommonApi.GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval.js index 41a46705624..d0a17223236 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadCollaboratorsItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.d.ts index 0820627bd4d..004191cc366 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage'; - export declare const GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.Raw, CommonApi.GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.js index 2beffbe6797..d71b0108aab 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage } from './GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage'; - export const GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage.d.ts index ca2a47bfb8a..1779b3085bb 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage.Raw, CommonApi.GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage.js index 4bd9f74f190..46468acd06b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem.d.ts index c9f1271cf3c..c377d78fe5f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem.Raw, CommonApi.GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem.js index 57785eb5568..0dac00db66b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadCollaboratorsItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId.d.ts index 590c3064b1b..d94d4e8dc3a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId.Raw, CommonApi.GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId.js index 15d4aa9e566..0329b2d936d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadCollaboratorsItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.d.ts index 531da065cae..0d871ccf491 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadDiscordMetaUser } from './GetCommentsResponseResultsItemThreadDiscordMetaUser'; - export declare const GetCommentsResponseResultsItemThreadDiscordMeta: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadDiscordMeta.Raw, CommonApi.GetCommentsResponseResultsItemThreadDiscordMeta diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.js index 48e5a6eac05..e6562e92cd5 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadDiscordMetaUser } from './GetCommentsResponseResultsItemThreadDiscordMetaUser'; - export const GetCommentsResponseResultsItemThreadDiscordMeta = core.serialization.object({ user: GetCommentsResponseResultsItemThreadDiscordMetaUser, diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMetaUser.d.ts index a520ae8b4fd..75ad19554c9 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadDiscordMetaUser: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadDiscordMetaUser.Raw, CommonApi.GetCommentsResponseResultsItemThreadDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMetaUser.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMetaUser.js index 186a6f79aa4..9d3d1d8482a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.d.ts index 8391c41b8ad..1ee7c38ee65 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadLinksItemSource } from './GetCommentsResponseResultsItemThreadLinksItemSource'; - export declare const GetCommentsResponseResultsItemThreadLinksItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadLinksItem.Raw, CommonApi.GetCommentsResponseResultsItemThreadLinksItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.js index 7c2af7a0f76..8f57d1cdccc 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadLinksItemSource } from './GetCommentsResponseResultsItemThreadLinksItemSource'; - export const GetCommentsResponseResultsItemThreadLinksItem = core.serialization.object({ source: GetCommentsResponseResultsItemThreadLinksItemSource, diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItemSource.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItemSource.d.ts index 17f96996052..676f5c83d4d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItemSource.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItemSource.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadLinksItemSource: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadLinksItemSource.Raw, CommonApi.GetCommentsResponseResultsItemThreadLinksItemSource diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItemSource.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItemSource.js index 922149989f8..881b8f1685f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItemSource.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadLinksItemSource.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadLinksItemSource = core.serialization.enum_([ 'snapshot', diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.d.ts index b34c035750f..bdeb390054d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadReactionsItemAddress } from './GetCommentsResponseResultsItemThreadReactionsItemAddress'; - export declare const GetCommentsResponseResultsItemThreadReactionsItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadReactionsItem.Raw, CommonApi.GetCommentsResponseResultsItemThreadReactionsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.js index ab971fc1f77..5290a955be8 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadReactionsItemAddress } from './GetCommentsResponseResultsItemThreadReactionsItemAddress'; - export const GetCommentsResponseResultsItemThreadReactionsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.d.ts index 9f58e9af8da..f1bd196cc15 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressRole } from './GetCommentsResponseResultsItemThreadReactionsItemAddressRole'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressUser } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUser'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId } from './GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId'; - export declare const GetCommentsResponseResultsItemThreadReactionsItemAddress: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadReactionsItemAddress.Raw, CommonApi.GetCommentsResponseResultsItemThreadReactionsItemAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.js index 7d499c779ff..59bedea7d5f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressRole } from './GetCommentsResponseResultsItemThreadReactionsItemAddressRole'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressUser } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUser'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId } from './GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId'; - export const GetCommentsResponseResultsItemThreadReactionsItemAddress = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressRole.d.ts index 4ecb7a7fc4f..9d7c47572ee 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadReactionsItemAddressRole: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadReactionsItemAddressRole.Raw, CommonApi.GetCommentsResponseResultsItemThreadReactionsItemAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressRole.js index 831731b2f0a..0bc6cb1906e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadReactionsItemAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.d.ts index 46022e43f2f..7c487f8a2ec 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.d.ts @@ -8,7 +8,6 @@ import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey } fr import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem'; - export declare const GetCommentsResponseResultsItemThreadReactionsItemAddressUser: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadReactionsItemAddressUser.Raw, CommonApi.GetCommentsResponseResultsItemThreadReactionsItemAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.js index 61bb84d76e1..b297b6348d4 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUser.js @@ -6,7 +6,6 @@ import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey } fr import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem'; - export const GetCommentsResponseResultsItemThreadReactionsItemAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..9428384d37e --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey: core.serialization.ObjectSchema< + serializers.GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.Raw, + CommonApi.GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey +>; +export declare namespace GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..6451fe527e7 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetCommentsResponseResultsItemThreadReactionsItemAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval.d.ts index 0bd59d2254c..c90cc1c8d50 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval.Raw, CommonApi.GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval.js index 4fdd97f003a..19532f41cb7 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadReactionsItemAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.d.ts index 77505f6ad98..81e2ea72fd2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage'; - export declare const GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.Raw, CommonApi.GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.js index 38f4fbe1631..1c6950161d3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage } from './GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage'; - export const GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage.d.ts index 08c6c24ea07..c53f7cfe8b3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage.Raw, CommonApi.GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage.js index a3aa81926a5..317762ed81f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem.d.ts index 550a17820a0..e77be48f6a8 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem.Raw, CommonApi.GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem.js index 7f5c4cc87ad..05ca78c02c1 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadReactionsItemAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId.d.ts index 73eb5dea06f..458a7626cdc 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId.Raw, CommonApi.GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId.js index 3dcb050ea4d..3109c0e8482 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadReactionsItemAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadSearch.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadSearch.d.ts index 18d21d48fe9..8e75fd6af35 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadSearch.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadSearch.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadSearch: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadSearch.Raw, CommonApi.GetCommentsResponseResultsItemThreadSearch diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadSearch.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadSearch.js index 7b424fa0e5a..7eb980b6722 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadSearch.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadSearch.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadSearch = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem.d.ts index 119226bd11c..51c01287b08 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem.Raw, CommonApi.GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem.js index 69a58629aef..53407ef21e7 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadThreadVersionHistoriesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.d.ts index 18635c931aa..4370e1c67f7 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommentsResponseResultsItemThreadTopicContestTopicsItem } from './GetCommentsResponseResultsItemThreadTopicContestTopicsItem'; import { GetCommentsResponseResultsItemThreadTopicWeightedVoting } from './GetCommentsResponseResultsItemThreadTopicWeightedVoting'; - export declare const GetCommentsResponseResultsItemThreadTopic: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadTopic.Raw, CommonApi.GetCommentsResponseResultsItemThreadTopic diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.js index b48cab60400..7a6df1568a7 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopic.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommentsResponseResultsItemThreadTopicContestTopicsItem } from './GetCommentsResponseResultsItemThreadTopicContestTopicsItem'; import { GetCommentsResponseResultsItemThreadTopicWeightedVoting } from './GetCommentsResponseResultsItemThreadTopicWeightedVoting'; - export const GetCommentsResponseResultsItemThreadTopic = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicContestTopicsItem.d.ts index a3681256efe..b257d3c171d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadTopicContestTopicsItem: core.serialization.ObjectSchema< serializers.GetCommentsResponseResultsItemThreadTopicContestTopicsItem.Raw, CommonApi.GetCommentsResponseResultsItemThreadTopicContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicContestTopicsItem.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicContestTopicsItem.js index 012cc40ded0..de0f36fdd60 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadTopicContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicWeightedVoting.d.ts index e38e9aca06d..3acd880d9d0 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommentsResponseResultsItemThreadTopicWeightedVoting: core.serialization.Schema< serializers.GetCommentsResponseResultsItemThreadTopicWeightedVoting.Raw, CommonApi.GetCommentsResponseResultsItemThreadTopicWeightedVoting diff --git a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicWeightedVoting.js b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicWeightedVoting.js index 8b70784d1e8..2b37bf956a5 100644 --- a/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/comment/types/GetCommentsResponseResultsItemThreadTopicWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommentsResponseResultsItemThreadTopicWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponse.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponse.d.ts index aad95608990..a2a6589165f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponse.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponse.d.ts @@ -10,7 +10,6 @@ import { UpdateCommentResponseDiscordMeta } from './UpdateCommentResponseDiscord import { UpdateCommentResponseReaction } from './UpdateCommentResponseReaction'; import { UpdateCommentResponseSearch } from './UpdateCommentResponseSearch'; import { UpdateCommentResponseThread } from './UpdateCommentResponseThread'; - export declare const UpdateCommentResponse: core.serialization.ObjectSchema< serializers.UpdateCommentResponse.Raw, CommonApi.UpdateCommentResponse @@ -21,7 +20,6 @@ export declare namespace UpdateCommentResponse { thread_id: number; address_id: number; text: string; - plaintext: string; parent_id?: string | null; content_url?: string | null; canvas_signed_data?: string | null; diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponse.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponse.js index 7cfc3354faa..709471e58f1 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponse.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponse.js @@ -8,7 +8,6 @@ import { UpdateCommentResponseDiscordMeta } from './UpdateCommentResponseDiscord import { UpdateCommentResponseReaction } from './UpdateCommentResponseReaction'; import { UpdateCommentResponseSearch } from './UpdateCommentResponseSearch'; import { UpdateCommentResponseThread } from './UpdateCommentResponseThread'; - export const UpdateCommentResponse = core.serialization.object({ id: core.serialization.number().optional(), threadId: core.serialization.property( @@ -20,7 +19,6 @@ export const UpdateCommentResponse = core.serialization.object({ core.serialization.number(), ), text: core.serialization.string(), - plaintext: core.serialization.string(), parentId: core.serialization.property( 'parent_id', core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddress.d.ts index e3468e791e2..862f7b93902 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateCommentResponseAddressRole } from './UpdateCommentResponseAddressRole'; import { UpdateCommentResponseAddressUser } from './UpdateCommentResponseAddressUser'; import { UpdateCommentResponseAddressWalletId } from './UpdateCommentResponseAddressWalletId'; - export declare const UpdateCommentResponseAddress: core.serialization.ObjectSchema< serializers.UpdateCommentResponseAddress.Raw, CommonApi.UpdateCommentResponseAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddress.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddress.js index d8337bb2fc7..a08affbb5a6 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateCommentResponseAddressRole } from './UpdateCommentResponseAddressRole'; import { UpdateCommentResponseAddressUser } from './UpdateCommentResponseAddressUser'; import { UpdateCommentResponseAddressWalletId } from './UpdateCommentResponseAddressWalletId'; - export const UpdateCommentResponseAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressRole.d.ts index 0072753e081..e3fa034dd0c 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseAddressRole: core.serialization.Schema< serializers.UpdateCommentResponseAddressRole.Raw, CommonApi.UpdateCommentResponseAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressRole.js index 45f63157778..2fa157216ba 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressRole.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseAddressRole = core.serialization.enum_([ 'admin', 'moderator', diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUser.d.ts index 8281f82727b..d7803095064 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUser.d.ts @@ -8,7 +8,6 @@ import { UpdateCommentResponseAddressUserApiKey } from './UpdateCommentResponseA import { UpdateCommentResponseAddressUserEmailNotificationInterval } from './UpdateCommentResponseAddressUserEmailNotificationInterval'; import { UpdateCommentResponseAddressUserProfile } from './UpdateCommentResponseAddressUserProfile'; import { UpdateCommentResponseAddressUserProfileTagsItem } from './UpdateCommentResponseAddressUserProfileTagsItem'; - export declare const UpdateCommentResponseAddressUser: core.serialization.ObjectSchema< serializers.UpdateCommentResponseAddressUser.Raw, CommonApi.UpdateCommentResponseAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUser.js index 2ab9e1ec743..c7a095a3419 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUser.js @@ -6,7 +6,6 @@ import { UpdateCommentResponseAddressUserApiKey } from './UpdateCommentResponseA import { UpdateCommentResponseAddressUserEmailNotificationInterval } from './UpdateCommentResponseAddressUserEmailNotificationInterval'; import { UpdateCommentResponseAddressUserProfile } from './UpdateCommentResponseAddressUserProfile'; import { UpdateCommentResponseAddressUserProfileTagsItem } from './UpdateCommentResponseAddressUserProfileTagsItem'; - export const UpdateCommentResponseAddressUser = core.serialization.object({ id: core.serialization.number().optional(), email: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..0441f8a4ae9 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateCommentResponseAddressUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateCommentResponseAddressUserApiKey.Raw, + CommonApi.UpdateCommentResponseAddressUserApiKey +>; +export declare namespace UpdateCommentResponseAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserApiKey.js new file mode 100644 index 00000000000..91ea841e0b0 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserApiKey.js @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateCommentResponseAddressUserApiKey = core.serialization.object( + { + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }, +); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserEmailNotificationInterval.d.ts index c7208922389..830aa88fb2a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateCommentResponseAddressUserEmailNotificationInterval.Raw, CommonApi.UpdateCommentResponseAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserEmailNotificationInterval.js index e99427f537a..3dc407d50bd 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfile.d.ts index b298d5599cc..efafe3b7131 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseAddressUserProfileBackgroundImage } from './UpdateCommentResponseAddressUserProfileBackgroundImage'; - export declare const UpdateCommentResponseAddressUserProfile: core.serialization.ObjectSchema< serializers.UpdateCommentResponseAddressUserProfile.Raw, CommonApi.UpdateCommentResponseAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfile.js index 2f1219e80a4..b6de1c42d17 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseAddressUserProfileBackgroundImage } from './UpdateCommentResponseAddressUserProfileBackgroundImage'; - export const UpdateCommentResponseAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileBackgroundImage.d.ts index cdf334188c4..fa2536dfe40 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateCommentResponseAddressUserProfileBackgroundImage.Raw, CommonApi.UpdateCommentResponseAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileBackgroundImage.js index b3d9648e4fa..4745f0daab9 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileTagsItem.d.ts index 6c868da8988..6f06ea1e5a6 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseAddressUserProfileTagsItem.Raw, CommonApi.UpdateCommentResponseAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileTagsItem.js index bc1099e6744..ff2f79c3397 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressWalletId.d.ts index f00922531d5..89ae2d9cfad 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseAddressWalletId: core.serialization.Schema< serializers.UpdateCommentResponseAddressWalletId.Raw, CommonApi.UpdateCommentResponseAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressWalletId.js index 589941951e0..695640f5f1e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseAddressWalletId = core.serialization.enum_([ 'magic', 'polkadot', diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseCommentVersionHistoriesItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseCommentVersionHistoriesItem.d.ts index a3e4ee31c1b..4537503bccd 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseCommentVersionHistoriesItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseCommentVersionHistoriesItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseCommentVersionHistoriesItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseCommentVersionHistoriesItem.Raw, CommonApi.UpdateCommentResponseCommentVersionHistoriesItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseCommentVersionHistoriesItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseCommentVersionHistoriesItem.js index 085dc2aafe6..6bd56aadaf4 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseCommentVersionHistoriesItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseCommentVersionHistoriesItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseCommentVersionHistoriesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMeta.d.ts index b1d9917b157..1458a695de1 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseDiscordMetaUser } from './UpdateCommentResponseDiscordMetaUser'; - export declare const UpdateCommentResponseDiscordMeta: core.serialization.ObjectSchema< serializers.UpdateCommentResponseDiscordMeta.Raw, CommonApi.UpdateCommentResponseDiscordMeta diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMeta.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMeta.js index 68e9d7655b2..a615c1c43fe 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseDiscordMetaUser } from './UpdateCommentResponseDiscordMetaUser'; - export const UpdateCommentResponseDiscordMeta = core.serialization.object({ user: UpdateCommentResponseDiscordMetaUser, channelId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMetaUser.d.ts index 58ca46da242..2c4ea51753b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseDiscordMetaUser: core.serialization.ObjectSchema< serializers.UpdateCommentResponseDiscordMetaUser.Raw, CommonApi.UpdateCommentResponseDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMetaUser.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMetaUser.js index ade9e63371e..f379f5d531b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), username: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReaction.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReaction.d.ts index a199b2ff4e4..824b6c09759 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReaction.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReaction.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseReactionAddress } from './UpdateCommentResponseReactionAddress'; - export declare const UpdateCommentResponseReaction: core.serialization.ObjectSchema< serializers.UpdateCommentResponseReaction.Raw, CommonApi.UpdateCommentResponseReaction diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReaction.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReaction.js index 08d185e5f1f..2036354592b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReaction.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReaction.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseReactionAddress } from './UpdateCommentResponseReactionAddress'; - export const UpdateCommentResponseReaction = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddress.d.ts index a1064ee259c..2d2a62226c1 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateCommentResponseReactionAddressRole } from './UpdateCommentResponseReactionAddressRole'; import { UpdateCommentResponseReactionAddressUser } from './UpdateCommentResponseReactionAddressUser'; import { UpdateCommentResponseReactionAddressWalletId } from './UpdateCommentResponseReactionAddressWalletId'; - export declare const UpdateCommentResponseReactionAddress: core.serialization.ObjectSchema< serializers.UpdateCommentResponseReactionAddress.Raw, CommonApi.UpdateCommentResponseReactionAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddress.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddress.js index 6adf10f0c08..dcc417487ea 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateCommentResponseReactionAddressRole } from './UpdateCommentResponseReactionAddressRole'; import { UpdateCommentResponseReactionAddressUser } from './UpdateCommentResponseReactionAddressUser'; import { UpdateCommentResponseReactionAddressWalletId } from './UpdateCommentResponseReactionAddressWalletId'; - export const UpdateCommentResponseReactionAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressRole.d.ts index 2740aab401a..37104333d06 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseReactionAddressRole: core.serialization.Schema< serializers.UpdateCommentResponseReactionAddressRole.Raw, CommonApi.UpdateCommentResponseReactionAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressRole.js index 8aa45433a68..d2b42868520 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseReactionAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUser.d.ts index 7eb7e07a7ef..7768bdfdee6 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUser.d.ts @@ -8,7 +8,6 @@ import { UpdateCommentResponseReactionAddressUserApiKey } from './UpdateCommentR import { UpdateCommentResponseReactionAddressUserEmailNotificationInterval } from './UpdateCommentResponseReactionAddressUserEmailNotificationInterval'; import { UpdateCommentResponseReactionAddressUserProfile } from './UpdateCommentResponseReactionAddressUserProfile'; import { UpdateCommentResponseReactionAddressUserProfileTagsItem } from './UpdateCommentResponseReactionAddressUserProfileTagsItem'; - export declare const UpdateCommentResponseReactionAddressUser: core.serialization.ObjectSchema< serializers.UpdateCommentResponseReactionAddressUser.Raw, CommonApi.UpdateCommentResponseReactionAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUser.js index 0c26f4c1979..631ba8ea5bc 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUser.js @@ -6,7 +6,6 @@ import { UpdateCommentResponseReactionAddressUserApiKey } from './UpdateCommentR import { UpdateCommentResponseReactionAddressUserEmailNotificationInterval } from './UpdateCommentResponseReactionAddressUserEmailNotificationInterval'; import { UpdateCommentResponseReactionAddressUserProfile } from './UpdateCommentResponseReactionAddressUserProfile'; import { UpdateCommentResponseReactionAddressUserProfileTagsItem } from './UpdateCommentResponseReactionAddressUserProfileTagsItem'; - export const UpdateCommentResponseReactionAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.d.ts new file mode 100644 index 00000000000..72838eea723 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateCommentResponseReactionAddressUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateCommentResponseReactionAddressUserApiKey.Raw, + CommonApi.UpdateCommentResponseReactionAddressUserApiKey +>; +export declare namespace UpdateCommentResponseReactionAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.js new file mode 100644 index 00000000000..e019da8d4a1 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateCommentResponseReactionAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserEmailNotificationInterval.d.ts index 69c16bf7f93..d8e0d2f968f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseReactionAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateCommentResponseReactionAddressUserEmailNotificationInterval.Raw, CommonApi.UpdateCommentResponseReactionAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserEmailNotificationInterval.js index 2b42c16f635..ec8479117b3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseReactionAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.d.ts index 34dfb26f6b9..9ffb95f9114 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseReactionAddressUserProfileBackgroundImage } from './UpdateCommentResponseReactionAddressUserProfileBackgroundImage'; - export declare const UpdateCommentResponseReactionAddressUserProfile: core.serialization.ObjectSchema< serializers.UpdateCommentResponseReactionAddressUserProfile.Raw, CommonApi.UpdateCommentResponseReactionAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.js index 9cd9d91c084..f0fa1b1ec85 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseReactionAddressUserProfileBackgroundImage } from './UpdateCommentResponseReactionAddressUserProfileBackgroundImage'; - export const UpdateCommentResponseReactionAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileBackgroundImage.d.ts index b27fd81397d..1c654e6d61d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseReactionAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateCommentResponseReactionAddressUserProfileBackgroundImage.Raw, CommonApi.UpdateCommentResponseReactionAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileBackgroundImage.js index 106d1adf2df..ca9f1c4560f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseReactionAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileTagsItem.d.ts index 7727e72c43c..79f1c3e44c6 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseReactionAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseReactionAddressUserProfileTagsItem.Raw, CommonApi.UpdateCommentResponseReactionAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileTagsItem.js index c2db676fbb5..c048cdb37fc 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseReactionAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressWalletId.d.ts index d1233258b87..49c00e9d6bd 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseReactionAddressWalletId: core.serialization.Schema< serializers.UpdateCommentResponseReactionAddressWalletId.Raw, CommonApi.UpdateCommentResponseReactionAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressWalletId.js index 13a84851c9c..b0f9fa57030 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseReactionAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseReactionAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseSearch.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseSearch.d.ts index 8bcbdcac84e..fd6ccb25e32 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseSearch.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseSearch.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseSearch: core.serialization.Schema< serializers.UpdateCommentResponseSearch.Raw, CommonApi.UpdateCommentResponseSearch diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseSearch.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseSearch.js index 7b73c793fb2..cb62322a7bd 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseSearch.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseSearch.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseSearch = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThread.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThread.d.ts index 3567457fef3..4840ed52ba6 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThread.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThread.d.ts @@ -12,7 +12,6 @@ import { UpdateCommentResponseThreadReactionsItem } from './UpdateCommentRespons import { UpdateCommentResponseThreadSearch } from './UpdateCommentResponseThreadSearch'; import { UpdateCommentResponseThreadThreadVersionHistoriesItem } from './UpdateCommentResponseThreadThreadVersionHistoriesItem'; import { UpdateCommentResponseThreadTopic } from './UpdateCommentResponseThreadTopic'; - export declare const UpdateCommentResponseThread: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThread.Raw, CommonApi.UpdateCommentResponseThread @@ -23,14 +22,13 @@ export declare namespace UpdateCommentResponseThread { address_id: number; title: string; kind: string; - stage: string; + stage?: string | null; body?: string | null; - plaintext?: string | null; url?: string | null; topic_id?: number | null; pinned?: boolean | null; community_id: string; - view_count: number; + view_count?: number | null; links?: UpdateCommentResponseThreadLinksItem.Raw[] | null; content_url?: string | null; read_only?: boolean | null; @@ -46,9 +44,9 @@ export declare namespace UpdateCommentResponseThread { archived_at?: string | null; locked_at?: string | null; discord_meta?: UpdateCommentResponseThreadDiscordMeta.Raw | null; - reaction_count: number; - reaction_weights_sum: number; - comment_count: number; + reaction_count?: number | null; + reaction_weights_sum?: number | null; + comment_count?: number | null; activity_rank_date?: string | null; created_by?: string | null; profile_name?: string | null; diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThread.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThread.js index 3d0b88fe2f5..aee326342a2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThread.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThread.js @@ -10,7 +10,6 @@ import { UpdateCommentResponseThreadReactionsItem } from './UpdateCommentRespons import { UpdateCommentResponseThreadSearch } from './UpdateCommentResponseThreadSearch'; import { UpdateCommentResponseThreadThreadVersionHistoriesItem } from './UpdateCommentResponseThreadThreadVersionHistoriesItem'; import { UpdateCommentResponseThreadTopic } from './UpdateCommentResponseThreadTopic'; - export const UpdateCommentResponseThread = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( @@ -19,9 +18,8 @@ export const UpdateCommentResponseThread = core.serialization.object({ ), title: core.serialization.string(), kind: core.serialization.string(), - stage: core.serialization.string(), + stage: core.serialization.string().optional(), body: core.serialization.string().optional(), - plaintext: core.serialization.string().optional(), url: core.serialization.string().optional(), topicId: core.serialization.property( 'topic_id', @@ -34,7 +32,7 @@ export const UpdateCommentResponseThread = core.serialization.object({ ), viewCount: core.serialization.property( 'view_count', - core.serialization.number(), + core.serialization.number().optional(), ), links: core.serialization .list(UpdateCommentResponseThreadLinksItem) @@ -97,15 +95,15 @@ export const UpdateCommentResponseThread = core.serialization.object({ ), reactionCount: core.serialization.property( 'reaction_count', - core.serialization.number(), + core.serialization.number().optional(), ), reactionWeightsSum: core.serialization.property( 'reaction_weights_sum', - core.serialization.number(), + core.serialization.number().optional(), ), commentCount: core.serialization.property( 'comment_count', - core.serialization.number(), + core.serialization.number().optional(), ), activityRankDate: core.serialization.property( 'activity_rank_date', diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddress.d.ts index cbaf6f53de9..ffc0f6879c1 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateCommentResponseThreadAddressRole } from './UpdateCommentResponseThreadAddressRole'; import { UpdateCommentResponseThreadAddressUser } from './UpdateCommentResponseThreadAddressUser'; import { UpdateCommentResponseThreadAddressWalletId } from './UpdateCommentResponseThreadAddressWalletId'; - export declare const UpdateCommentResponseThreadAddress: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadAddress.Raw, CommonApi.UpdateCommentResponseThreadAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddress.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddress.js index 643ea9451e1..e50e8815c3b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateCommentResponseThreadAddressRole } from './UpdateCommentResponseThreadAddressRole'; import { UpdateCommentResponseThreadAddressUser } from './UpdateCommentResponseThreadAddressUser'; import { UpdateCommentResponseThreadAddressWalletId } from './UpdateCommentResponseThreadAddressWalletId'; - export const UpdateCommentResponseThreadAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressRole.d.ts index 89e92681515..b21e7a78ecf 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadAddressRole: core.serialization.Schema< serializers.UpdateCommentResponseThreadAddressRole.Raw, CommonApi.UpdateCommentResponseThreadAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressRole.js index 907ce10fab3..2e0fc662277 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressRole.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadAddressRole = core.serialization.enum_([ 'admin', 'moderator', diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUser.d.ts index 65875276fa1..3399630823e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUser.d.ts @@ -8,7 +8,6 @@ import { UpdateCommentResponseThreadAddressUserApiKey } from './UpdateCommentRes import { UpdateCommentResponseThreadAddressUserEmailNotificationInterval } from './UpdateCommentResponseThreadAddressUserEmailNotificationInterval'; import { UpdateCommentResponseThreadAddressUserProfile } from './UpdateCommentResponseThreadAddressUserProfile'; import { UpdateCommentResponseThreadAddressUserProfileTagsItem } from './UpdateCommentResponseThreadAddressUserProfileTagsItem'; - export declare const UpdateCommentResponseThreadAddressUser: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadAddressUser.Raw, CommonApi.UpdateCommentResponseThreadAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUser.js index 2baf74d8fd2..f16bb5d1542 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUser.js @@ -6,7 +6,6 @@ import { UpdateCommentResponseThreadAddressUserApiKey } from './UpdateCommentRes import { UpdateCommentResponseThreadAddressUserEmailNotificationInterval } from './UpdateCommentResponseThreadAddressUserEmailNotificationInterval'; import { UpdateCommentResponseThreadAddressUserProfile } from './UpdateCommentResponseThreadAddressUserProfile'; import { UpdateCommentResponseThreadAddressUserProfileTagsItem } from './UpdateCommentResponseThreadAddressUserProfileTagsItem'; - export const UpdateCommentResponseThreadAddressUser = core.serialization.object( { id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.d.ts new file mode 100644 index 00000000000..b031ceafed5 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateCommentResponseThreadAddressUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateCommentResponseThreadAddressUserApiKey.Raw, + CommonApi.UpdateCommentResponseThreadAddressUserApiKey +>; +export declare namespace UpdateCommentResponseThreadAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.js new file mode 100644 index 00000000000..3b18a7fd48e --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateCommentResponseThreadAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserEmailNotificationInterval.d.ts index 20c85ae321f..3e14528feae 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateCommentResponseThreadAddressUserEmailNotificationInterval.Raw, CommonApi.UpdateCommentResponseThreadAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserEmailNotificationInterval.js index 8a4c90b6946..3d46688a12e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.d.ts index 0e39c7528e0..4b80497339d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseThreadAddressUserProfileBackgroundImage } from './UpdateCommentResponseThreadAddressUserProfileBackgroundImage'; - export declare const UpdateCommentResponseThreadAddressUserProfile: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadAddressUserProfile.Raw, CommonApi.UpdateCommentResponseThreadAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.js index e14bcee15c4..883c91f6ef3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseThreadAddressUserProfileBackgroundImage } from './UpdateCommentResponseThreadAddressUserProfileBackgroundImage'; - export const UpdateCommentResponseThreadAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileBackgroundImage.d.ts index cf4f7d2a84d..35127dca5b2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadAddressUserProfileBackgroundImage.Raw, CommonApi.UpdateCommentResponseThreadAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileBackgroundImage.js index e6a1e41a7c6..a6027584cf1 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileTagsItem.d.ts index ebebf36ff88..e992993a721 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadAddressUserProfileTagsItem.Raw, CommonApi.UpdateCommentResponseThreadAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileTagsItem.js index 7af60fbbe0d..61945e5e716 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressWalletId.d.ts index eac8973561a..46d02b1d425 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadAddressWalletId: core.serialization.Schema< serializers.UpdateCommentResponseThreadAddressWalletId.Raw, CommonApi.UpdateCommentResponseThreadAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressWalletId.js index 01cc606bae1..b7207264788 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.d.ts index 960677bd820..fbb5575b480 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateCommentResponseThreadCollaboratorsItemRole } from './UpdateCommentResponseThreadCollaboratorsItemRole'; import { UpdateCommentResponseThreadCollaboratorsItemUser } from './UpdateCommentResponseThreadCollaboratorsItemUser'; import { UpdateCommentResponseThreadCollaboratorsItemWalletId } from './UpdateCommentResponseThreadCollaboratorsItemWalletId'; - export declare const UpdateCommentResponseThreadCollaboratorsItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadCollaboratorsItem.Raw, CommonApi.UpdateCommentResponseThreadCollaboratorsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.js index 3bf210b59c9..6add63eadd9 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateCommentResponseThreadCollaboratorsItemRole } from './UpdateCommentResponseThreadCollaboratorsItemRole'; import { UpdateCommentResponseThreadCollaboratorsItemUser } from './UpdateCommentResponseThreadCollaboratorsItemUser'; import { UpdateCommentResponseThreadCollaboratorsItemWalletId } from './UpdateCommentResponseThreadCollaboratorsItemWalletId'; - export const UpdateCommentResponseThreadCollaboratorsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemRole.d.ts index b2be8601eb4..10faf38d9d9 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadCollaboratorsItemRole: core.serialization.Schema< serializers.UpdateCommentResponseThreadCollaboratorsItemRole.Raw, CommonApi.UpdateCommentResponseThreadCollaboratorsItemRole diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemRole.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemRole.js index 8e3dcbeae00..06b6e8c5ca5 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadCollaboratorsItemRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.d.ts index 673c065f3f1..cf51bd07c43 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.d.ts @@ -8,7 +8,6 @@ import { UpdateCommentResponseThreadCollaboratorsItemUserApiKey } from './Update import { UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval } from './UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval'; import { UpdateCommentResponseThreadCollaboratorsItemUserProfile } from './UpdateCommentResponseThreadCollaboratorsItemUserProfile'; import { UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem } from './UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem'; - export declare const UpdateCommentResponseThreadCollaboratorsItemUser: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadCollaboratorsItemUser.Raw, CommonApi.UpdateCommentResponseThreadCollaboratorsItemUser diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.js index 065488b93f7..93437d07bcf 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUser.js @@ -6,7 +6,6 @@ import { UpdateCommentResponseThreadCollaboratorsItemUserApiKey } from './Update import { UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval } from './UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval'; import { UpdateCommentResponseThreadCollaboratorsItemUserProfile } from './UpdateCommentResponseThreadCollaboratorsItemUserProfile'; import { UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem } from './UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem'; - export const UpdateCommentResponseThreadCollaboratorsItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..72ddd6b7c03 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateCommentResponseThreadCollaboratorsItemUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateCommentResponseThreadCollaboratorsItemUserApiKey.Raw, + CommonApi.UpdateCommentResponseThreadCollaboratorsItemUserApiKey +>; +export declare namespace UpdateCommentResponseThreadCollaboratorsItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..d407ae1d6ae --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateCommentResponseThreadCollaboratorsItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.d.ts index 12644b7ab34..a7e99395102 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.Raw, CommonApi.UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.js index f34bc1eaeec..a79ee5efc31 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadCollaboratorsItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.d.ts index 615454d11f3..3dbb2cabfb8 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage } from './UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage'; - export declare const UpdateCommentResponseThreadCollaboratorsItemUserProfile: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadCollaboratorsItemUserProfile.Raw, CommonApi.UpdateCommentResponseThreadCollaboratorsItemUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.js index 424573d25f9..3753f382f4b 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage } from './UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage'; - export const UpdateCommentResponseThreadCollaboratorsItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.d.ts index 6e02bcf552c..3cc38ea2aca 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.Raw, CommonApi.UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.js index df4d2ea6cd6..499897faba5 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadCollaboratorsItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.d.ts index 341433ed59c..049591e8f77 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.Raw, CommonApi.UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.js index 98658350e8d..d12d84bbc9f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadCollaboratorsItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemWalletId.d.ts index 74507dabf82..15678342795 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadCollaboratorsItemWalletId: core.serialization.Schema< serializers.UpdateCommentResponseThreadCollaboratorsItemWalletId.Raw, CommonApi.UpdateCommentResponseThreadCollaboratorsItemWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemWalletId.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemWalletId.js index 31140951684..10326c131bb 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadCollaboratorsItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadCollaboratorsItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.d.ts index 83363468357..abbd4a0c10f 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseThreadDiscordMetaUser } from './UpdateCommentResponseThreadDiscordMetaUser'; - export declare const UpdateCommentResponseThreadDiscordMeta: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadDiscordMeta.Raw, CommonApi.UpdateCommentResponseThreadDiscordMeta diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.js index 3de0edb2884..26bcaaf6a59 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseThreadDiscordMetaUser } from './UpdateCommentResponseThreadDiscordMetaUser'; - export const UpdateCommentResponseThreadDiscordMeta = core.serialization.object( { user: UpdateCommentResponseThreadDiscordMetaUser, diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMetaUser.d.ts index 22605a2efab..355767c5338 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadDiscordMetaUser: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadDiscordMetaUser.Raw, CommonApi.UpdateCommentResponseThreadDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMetaUser.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMetaUser.js index 937fe26c3dd..d1599a6a6e9 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItem.d.ts index 8c91907172f..1a0d2a3529e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseThreadLinksItemSource } from './UpdateCommentResponseThreadLinksItemSource'; - export declare const UpdateCommentResponseThreadLinksItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadLinksItem.Raw, CommonApi.UpdateCommentResponseThreadLinksItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItem.js index 33a842a1fa1..efcecea6553 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseThreadLinksItemSource } from './UpdateCommentResponseThreadLinksItemSource'; - export const UpdateCommentResponseThreadLinksItem = core.serialization.object({ source: UpdateCommentResponseThreadLinksItemSource, identifier: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItemSource.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItemSource.d.ts index a39d672f471..2790ce26649 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItemSource.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItemSource.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadLinksItemSource: core.serialization.Schema< serializers.UpdateCommentResponseThreadLinksItemSource.Raw, CommonApi.UpdateCommentResponseThreadLinksItemSource diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItemSource.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItemSource.js index d3cd58ecb5b..e05ea7105ec 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItemSource.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadLinksItemSource.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadLinksItemSource = core.serialization.enum_([ 'snapshot', diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItem.d.ts index 98365c20c92..c273dddb49e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseThreadReactionsItemAddress } from './UpdateCommentResponseThreadReactionsItemAddress'; - export declare const UpdateCommentResponseThreadReactionsItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadReactionsItem.Raw, CommonApi.UpdateCommentResponseThreadReactionsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItem.js index 1a890219d67..c865e843f35 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseThreadReactionsItemAddress } from './UpdateCommentResponseThreadReactionsItemAddress'; - export const UpdateCommentResponseThreadReactionsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.d.ts index 9a4926e85a4..b2f3af25487 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateCommentResponseThreadReactionsItemAddressRole } from './UpdateCommentResponseThreadReactionsItemAddressRole'; import { UpdateCommentResponseThreadReactionsItemAddressUser } from './UpdateCommentResponseThreadReactionsItemAddressUser'; import { UpdateCommentResponseThreadReactionsItemAddressWalletId } from './UpdateCommentResponseThreadReactionsItemAddressWalletId'; - export declare const UpdateCommentResponseThreadReactionsItemAddress: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadReactionsItemAddress.Raw, CommonApi.UpdateCommentResponseThreadReactionsItemAddress diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.js index 02b750994f4..24a0e5fb386 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateCommentResponseThreadReactionsItemAddressRole } from './UpdateCommentResponseThreadReactionsItemAddressRole'; import { UpdateCommentResponseThreadReactionsItemAddressUser } from './UpdateCommentResponseThreadReactionsItemAddressUser'; import { UpdateCommentResponseThreadReactionsItemAddressWalletId } from './UpdateCommentResponseThreadReactionsItemAddressWalletId'; - export const UpdateCommentResponseThreadReactionsItemAddress = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressRole.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressRole.d.ts index 891b532902c..c2792473341 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadReactionsItemAddressRole: core.serialization.Schema< serializers.UpdateCommentResponseThreadReactionsItemAddressRole.Raw, CommonApi.UpdateCommentResponseThreadReactionsItemAddressRole diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressRole.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressRole.js index e463d2aef91..e056e5b4541 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressRole.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadReactionsItemAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.d.ts index 1dccf76aeaf..a8586f401a7 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.d.ts @@ -8,7 +8,6 @@ import { UpdateCommentResponseThreadReactionsItemAddressUserApiKey } from './Upd import { UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval } from './UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval'; import { UpdateCommentResponseThreadReactionsItemAddressUserProfile } from './UpdateCommentResponseThreadReactionsItemAddressUserProfile'; import { UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem } from './UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem'; - export declare const UpdateCommentResponseThreadReactionsItemAddressUser: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadReactionsItemAddressUser.Raw, CommonApi.UpdateCommentResponseThreadReactionsItemAddressUser diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.js index 5fc77897c85..05e8c6335b6 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUser.js @@ -6,7 +6,6 @@ import { UpdateCommentResponseThreadReactionsItemAddressUserApiKey } from './Upd import { UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval } from './UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval'; import { UpdateCommentResponseThreadReactionsItemAddressUserProfile } from './UpdateCommentResponseThreadReactionsItemAddressUserProfile'; import { UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem } from './UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem'; - export const UpdateCommentResponseThreadReactionsItemAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..b6aa6e7d03b --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateCommentResponseThreadReactionsItemAddressUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateCommentResponseThreadReactionsItemAddressUserApiKey.Raw, + CommonApi.UpdateCommentResponseThreadReactionsItemAddressUserApiKey +>; +export declare namespace UpdateCommentResponseThreadReactionsItemAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..5a3d52347a0 --- /dev/null +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateCommentResponseThreadReactionsItemAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.d.ts index e1169e114a1..f66e700d14d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.Raw, CommonApi.UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.js index 73fa9711c53..bad62637af3 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadReactionsItemAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.d.ts index d0df641816e..609f40cbb4c 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage } from './UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage'; - export declare const UpdateCommentResponseThreadReactionsItemAddressUserProfile: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadReactionsItemAddressUserProfile.Raw, CommonApi.UpdateCommentResponseThreadReactionsItemAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.js index 1f6eeaa334d..4247a66dfc4 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage } from './UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage'; - export const UpdateCommentResponseThreadReactionsItemAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.d.ts index 96929ec0151..9a8a39aba94 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.Raw, CommonApi.UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.js index d827e44305e..ccf579d4323 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadReactionsItemAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.d.ts index 3dfbb3465f7..ed2d67aec5e 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.Raw, CommonApi.UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.js index c712742a48b..79c3977a642 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadReactionsItemAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressWalletId.d.ts index 06ea157ba5e..b2f04d0d9b0 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadReactionsItemAddressWalletId: core.serialization.Schema< serializers.UpdateCommentResponseThreadReactionsItemAddressWalletId.Raw, CommonApi.UpdateCommentResponseThreadReactionsItemAddressWalletId diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressWalletId.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressWalletId.js index c039033b679..5494ae09070 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadReactionsItemAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadReactionsItemAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadSearch.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadSearch.d.ts index 51170a6444d..22168dbd7fe 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadSearch.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadSearch.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadSearch: core.serialization.Schema< serializers.UpdateCommentResponseThreadSearch.Raw, CommonApi.UpdateCommentResponseThreadSearch diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadSearch.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadSearch.js index dca006e883f..8035264aeba 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadSearch.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadSearch.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadSearch = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadThreadVersionHistoriesItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadThreadVersionHistoriesItem.d.ts index 419d1f358f5..3ed7af971b2 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadThreadVersionHistoriesItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadThreadVersionHistoriesItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadThreadVersionHistoriesItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadThreadVersionHistoriesItem.Raw, CommonApi.UpdateCommentResponseThreadThreadVersionHistoriesItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadThreadVersionHistoriesItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadThreadVersionHistoriesItem.js index 07c5860dff3..6677c255a23 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadThreadVersionHistoriesItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadThreadVersionHistoriesItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadThreadVersionHistoriesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopic.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopic.d.ts index 9e12c1e9218..a3df173d87a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopic.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopic.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommentResponseThreadTopicContestTopicsItem } from './UpdateCommentResponseThreadTopicContestTopicsItem'; import { UpdateCommentResponseThreadTopicWeightedVoting } from './UpdateCommentResponseThreadTopicWeightedVoting'; - export declare const UpdateCommentResponseThreadTopic: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadTopic.Raw, CommonApi.UpdateCommentResponseThreadTopic diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopic.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopic.js index 1e1f9f388fa..e0a224e66f8 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopic.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopic.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommentResponseThreadTopicContestTopicsItem } from './UpdateCommentResponseThreadTopicContestTopicsItem'; import { UpdateCommentResponseThreadTopicWeightedVoting } from './UpdateCommentResponseThreadTopicWeightedVoting'; - export const UpdateCommentResponseThreadTopic = core.serialization.object({ id: core.serialization.number().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicContestTopicsItem.d.ts index 86e054517c4..c55cf4b9d67 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadTopicContestTopicsItem: core.serialization.ObjectSchema< serializers.UpdateCommentResponseThreadTopicContestTopicsItem.Raw, CommonApi.UpdateCommentResponseThreadTopicContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicContestTopicsItem.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicContestTopicsItem.js index 1f486582fff..0ff13f417da 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadTopicContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicWeightedVoting.d.ts index 9f0dbcfb5b1..7c0e9b65b8d 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommentResponseThreadTopicWeightedVoting: core.serialization.Schema< serializers.UpdateCommentResponseThreadTopicWeightedVoting.Raw, CommonApi.UpdateCommentResponseThreadTopicWeightedVoting diff --git a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicWeightedVoting.js b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicWeightedVoting.js index 5f4c99e80e7..b9444d0728a 100644 --- a/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/comment/types/UpdateCommentResponseThreadTopicWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommentResponseThreadTopicWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/client/requests/CreateCommunityRequest.d.ts b/libs/api-client/src/serialization/resources/community/client/requests/CreateCommunityRequest.d.ts index d88ce41e705..e738a74bee6 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/CreateCommunityRequest.d.ts +++ b/libs/api-client/src/serialization/resources/community/client/requests/CreateCommunityRequest.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../../core'; import * as serializers from '../../../../index'; import { CreateCommunityRequestBase } from '../../types/CreateCommunityRequestBase'; import { CreateCommunityRequestType } from '../../types/CreateCommunityRequestType'; - export declare const CreateCommunityRequest: core.serialization.Schema< serializers.CreateCommunityRequest.Raw, CommonApi.CreateCommunityRequest diff --git a/libs/api-client/src/serialization/resources/community/client/requests/CreateCommunityRequest.js b/libs/api-client/src/serialization/resources/community/client/requests/CreateCommunityRequest.js index 63964971cb8..91f9bf92200 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/CreateCommunityRequest.js +++ b/libs/api-client/src/serialization/resources/community/client/requests/CreateCommunityRequest.js @@ -4,7 +4,6 @@ import * as core from '../../../../../core'; import { CreateCommunityRequestBase } from '../../types/CreateCommunityRequestBase'; import { CreateCommunityRequestType } from '../../types/CreateCommunityRequestType'; - export const CreateCommunityRequest = core.serialization.object({ id: core.serialization.string(), name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/client/requests/CreateGroupRequest.d.ts b/libs/api-client/src/serialization/resources/community/client/requests/CreateGroupRequest.d.ts index 4eae43e2452..e23449c46e2 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/CreateGroupRequest.d.ts +++ b/libs/api-client/src/serialization/resources/community/client/requests/CreateGroupRequest.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../../core'; import * as serializers from '../../../../index'; import { CreateGroupRequestMetadata } from '../../types/CreateGroupRequestMetadata'; import { CreateGroupRequestRequirementsItem } from '../../types/CreateGroupRequestRequirementsItem'; - export declare const CreateGroupRequest: core.serialization.Schema< serializers.CreateGroupRequest.Raw, CommonApi.CreateGroupRequest diff --git a/libs/api-client/src/serialization/resources/community/client/requests/CreateGroupRequest.js b/libs/api-client/src/serialization/resources/community/client/requests/CreateGroupRequest.js index 4dfa954b905..1b2b2def8ea 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/CreateGroupRequest.js +++ b/libs/api-client/src/serialization/resources/community/client/requests/CreateGroupRequest.js @@ -4,7 +4,6 @@ import * as core from '../../../../../core'; import { CreateGroupRequestMetadata } from '../../types/CreateGroupRequestMetadata'; import { CreateGroupRequestRequirementsItem } from '../../types/CreateGroupRequestRequirementsItem'; - export const CreateGroupRequest = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/community/client/requests/CreateTopicRequest.d.ts b/libs/api-client/src/serialization/resources/community/client/requests/CreateTopicRequest.d.ts index 356bf91762f..b14f48cbf57 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/CreateTopicRequest.d.ts +++ b/libs/api-client/src/serialization/resources/community/client/requests/CreateTopicRequest.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; import { CreateTopicRequestWeightedVoting } from '../../types/CreateTopicRequestWeightedVoting'; - export declare const CreateTopicRequest: core.serialization.Schema< serializers.CreateTopicRequest.Raw, CommonApi.CreateTopicRequest diff --git a/libs/api-client/src/serialization/resources/community/client/requests/CreateTopicRequest.js b/libs/api-client/src/serialization/resources/community/client/requests/CreateTopicRequest.js index 38780798a50..e6fdc16340e 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/CreateTopicRequest.js +++ b/libs/api-client/src/serialization/resources/community/client/requests/CreateTopicRequest.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../../core'; import { CreateTopicRequestWeightedVoting } from '../../types/CreateTopicRequestWeightedVoting'; - export const CreateTopicRequest = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/community/client/requests/DeleteGroupRequest.d.ts b/libs/api-client/src/serialization/resources/community/client/requests/DeleteGroupRequest.d.ts index cb5fa52b60e..616a12a5269 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/DeleteGroupRequest.d.ts +++ b/libs/api-client/src/serialization/resources/community/client/requests/DeleteGroupRequest.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; - export declare const DeleteGroupRequest: core.serialization.Schema< serializers.DeleteGroupRequest.Raw, CommonApi.DeleteGroupRequest diff --git a/libs/api-client/src/serialization/resources/community/client/requests/DeleteGroupRequest.js b/libs/api-client/src/serialization/resources/community/client/requests/DeleteGroupRequest.js index 7804b51f6b0..cbb70b861ca 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/DeleteGroupRequest.js +++ b/libs/api-client/src/serialization/resources/community/client/requests/DeleteGroupRequest.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../../core'; - export const DeleteGroupRequest = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/community/client/requests/DeleteTopicRequest.d.ts b/libs/api-client/src/serialization/resources/community/client/requests/DeleteTopicRequest.d.ts index f03b80279f5..4e49f0836c8 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/DeleteTopicRequest.d.ts +++ b/libs/api-client/src/serialization/resources/community/client/requests/DeleteTopicRequest.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; - export declare const DeleteTopicRequest: core.serialization.Schema< serializers.DeleteTopicRequest.Raw, CommonApi.DeleteTopicRequest diff --git a/libs/api-client/src/serialization/resources/community/client/requests/DeleteTopicRequest.js b/libs/api-client/src/serialization/resources/community/client/requests/DeleteTopicRequest.js index 39e9beafea8..57d6f609abc 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/DeleteTopicRequest.js +++ b/libs/api-client/src/serialization/resources/community/client/requests/DeleteTopicRequest.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../../core'; - export const DeleteTopicRequest = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/community/client/requests/JoinCommunityRequest.d.ts b/libs/api-client/src/serialization/resources/community/client/requests/JoinCommunityRequest.d.ts new file mode 100644 index 00000000000..e5e29f55053 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/client/requests/JoinCommunityRequest.d.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../../api/index'; +import * as core from '../../../../../core'; +import * as serializers from '../../../../index'; +export declare const JoinCommunityRequest: core.serialization.Schema< + serializers.JoinCommunityRequest.Raw, + CommonApi.JoinCommunityRequest +>; +export declare namespace JoinCommunityRequest { + interface Raw { + community_id: string; + } +} diff --git a/libs/api-client/src/serialization/resources/community/client/requests/JoinCommunityRequest.js b/libs/api-client/src/serialization/resources/community/client/requests/JoinCommunityRequest.js new file mode 100644 index 00000000000..00c69a0685b --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/client/requests/JoinCommunityRequest.js @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../../core'; +export const JoinCommunityRequest = core.serialization.object({ + communityId: core.serialization.property( + 'community_id', + core.serialization.string(), + ), +}); diff --git a/libs/api-client/src/serialization/resources/community/client/requests/UpdateCommunityRequest.d.ts b/libs/api-client/src/serialization/resources/community/client/requests/UpdateCommunityRequest.d.ts index f92d4accb23..a34f53495e0 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/UpdateCommunityRequest.d.ts +++ b/libs/api-client/src/serialization/resources/community/client/requests/UpdateCommunityRequest.d.ts @@ -18,7 +18,6 @@ import { UpdateCommunityRequestSocialLinksItem } from '../../types/UpdateCommuni import { UpdateCommunityRequestTerms } from '../../types/UpdateCommunityRequestTerms'; import { UpdateCommunityRequestTopicsItem } from '../../types/UpdateCommunityRequestTopicsItem'; import { UpdateCommunityRequestType } from '../../types/UpdateCommunityRequestType'; - export declare const UpdateCommunityRequest: core.serialization.Schema< serializers.UpdateCommunityRequest.Raw, CommonApi.UpdateCommunityRequest diff --git a/libs/api-client/src/serialization/resources/community/client/requests/UpdateCommunityRequest.js b/libs/api-client/src/serialization/resources/community/client/requests/UpdateCommunityRequest.js index f1e8e7c93ee..53b79fa6afa 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/UpdateCommunityRequest.js +++ b/libs/api-client/src/serialization/resources/community/client/requests/UpdateCommunityRequest.js @@ -16,7 +16,6 @@ import { UpdateCommunityRequestSocialLinksItem } from '../../types/UpdateCommuni import { UpdateCommunityRequestTerms } from '../../types/UpdateCommunityRequestTerms'; import { UpdateCommunityRequestTopicsItem } from '../../types/UpdateCommunityRequestTopicsItem'; import { UpdateCommunityRequestType } from '../../types/UpdateCommunityRequestType'; - export const UpdateCommunityRequest = core.serialization.object({ id: core.serialization.string(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/client/requests/UpdateGroupRequest.d.ts b/libs/api-client/src/serialization/resources/community/client/requests/UpdateGroupRequest.d.ts index ef6381b8491..7e68eb9b029 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/UpdateGroupRequest.d.ts +++ b/libs/api-client/src/serialization/resources/community/client/requests/UpdateGroupRequest.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../../core'; import * as serializers from '../../../../index'; import { UpdateGroupRequestMetadata } from '../../types/UpdateGroupRequestMetadata'; import { UpdateGroupRequestRequirementsItem } from '../../types/UpdateGroupRequestRequirementsItem'; - export declare const UpdateGroupRequest: core.serialization.Schema< serializers.UpdateGroupRequest.Raw, CommonApi.UpdateGroupRequest diff --git a/libs/api-client/src/serialization/resources/community/client/requests/UpdateGroupRequest.js b/libs/api-client/src/serialization/resources/community/client/requests/UpdateGroupRequest.js index c9ad473ec05..848c4613c75 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/UpdateGroupRequest.js +++ b/libs/api-client/src/serialization/resources/community/client/requests/UpdateGroupRequest.js @@ -4,7 +4,6 @@ import * as core from '../../../../../core'; import { UpdateGroupRequestMetadata } from '../../types/UpdateGroupRequestMetadata'; import { UpdateGroupRequestRequirementsItem } from '../../types/UpdateGroupRequestRequirementsItem'; - export const UpdateGroupRequest = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/community/client/requests/UpdateTopicRequest.d.ts b/libs/api-client/src/serialization/resources/community/client/requests/UpdateTopicRequest.d.ts index 9b5a9863ce5..519d52491ca 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/UpdateTopicRequest.d.ts +++ b/libs/api-client/src/serialization/resources/community/client/requests/UpdateTopicRequest.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; - export declare const UpdateTopicRequest: core.serialization.Schema< serializers.UpdateTopicRequest.Raw, CommonApi.UpdateTopicRequest diff --git a/libs/api-client/src/serialization/resources/community/client/requests/UpdateTopicRequest.js b/libs/api-client/src/serialization/resources/community/client/requests/UpdateTopicRequest.js index e0d1b89afaa..2beea064952 100644 --- a/libs/api-client/src/serialization/resources/community/client/requests/UpdateTopicRequest.js +++ b/libs/api-client/src/serialization/resources/community/client/requests/UpdateTopicRequest.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../../core'; - export const UpdateTopicRequest = core.serialization.object({ topicId: core.serialization.property('topic_id', core.serialization.number()), communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestBase.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestBase.d.ts index 2241ec95901..920c8960169 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestBase.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestBase.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityRequestBase: core.serialization.Schema< serializers.CreateCommunityRequestBase.Raw, CommonApi.CreateCommunityRequestBase diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestBase.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestBase.js index 3ed77e1d3b8..a32b7e0cc71 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestBase.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestBase.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityRequestBase = core.serialization.enum_([ 'cosmos', 'substrate', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestType.d.ts index 4ac1611327b..231e226ab84 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityRequestType: core.serialization.Schema< serializers.CreateCommunityRequestType.Raw, CommonApi.CreateCommunityRequestType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestType.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestType.js index 5e3a8d9f834..a77842f71cf 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityRequestType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityRequestType = core.serialization.enum_([ 'chain', 'dao', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponse.d.ts index 3b1b736e3ba..cd181430252 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponse.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunity } from './CreateCommunityResponseCommunity'; - export declare const CreateCommunityResponse: core.serialization.ObjectSchema< serializers.CreateCommunityResponse.Raw, CommonApi.CreateCommunityResponse diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponse.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponse.js index 47d7fc43dda..ab4ef5072bf 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponse.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunity } from './CreateCommunityResponseCommunity'; - export const CreateCommunityResponse = core.serialization.object({ community: CreateCommunityResponseCommunity, adminAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunity.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunity.d.ts index 92a7e5ef785..79d4de43026 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunity.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunity.d.ts @@ -17,7 +17,6 @@ import { CreateCommunityResponseCommunitySocialLinksItem } from './CreateCommuni import { CreateCommunityResponseCommunityTerms } from './CreateCommunityResponseCommunityTerms'; import { CreateCommunityResponseCommunityTopicsItem } from './CreateCommunityResponseCommunityTopicsItem'; import { CreateCommunityResponseCommunityType } from './CreateCommunityResponseCommunityType'; - export declare const CreateCommunityResponseCommunity: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunity.Raw, CommonApi.CreateCommunityResponseCommunity diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunity.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunity.js index baebd54a3e5..86cba84b25e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunity.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunity.js @@ -15,7 +15,6 @@ import { CreateCommunityResponseCommunitySocialLinksItem } from './CreateCommuni import { CreateCommunityResponseCommunityTerms } from './CreateCommunityResponseCommunityTerms'; import { CreateCommunityResponseCommunityTopicsItem } from './CreateCommunityResponseCommunityTopicsItem'; import { CreateCommunityResponseCommunityType } from './CreateCommunityResponseCommunityType'; - export const CreateCommunityResponseCommunity = core.serialization.object({ id: core.serialization.string(), name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItem.d.ts index cfe2a4398c4..52846af097d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityAddressesItemRole } from './CreateCommunityResponseCommunityAddressesItemRole'; import { CreateCommunityResponseCommunityAddressesItemUser } from './CreateCommunityResponseCommunityAddressesItemUser'; import { CreateCommunityResponseCommunityAddressesItemWalletId } from './CreateCommunityResponseCommunityAddressesItemWalletId'; - export declare const CreateCommunityResponseCommunityAddressesItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityAddressesItem.Raw, CommonApi.CreateCommunityResponseCommunityAddressesItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItem.js index 9d2f49b7da4..eab76a82e32 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityAddressesItemRole } from './CreateCommunityResponseCommunityAddressesItemRole'; import { CreateCommunityResponseCommunityAddressesItemUser } from './CreateCommunityResponseCommunityAddressesItemUser'; import { CreateCommunityResponseCommunityAddressesItemWalletId } from './CreateCommunityResponseCommunityAddressesItemWalletId'; - export const CreateCommunityResponseCommunityAddressesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemRole.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemRole.d.ts index c143f612338..08b1f7ca8ed 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityAddressesItemRole: core.serialization.Schema< serializers.CreateCommunityResponseCommunityAddressesItemRole.Raw, CommonApi.CreateCommunityResponseCommunityAddressesItemRole diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemRole.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemRole.js index 96866b195eb..3cdf37fe98f 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemRole.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityAddressesItemRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.d.ts index 6916f95c34e..0b269cfce47 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.d.ts @@ -8,7 +8,6 @@ import { CreateCommunityResponseCommunityAddressesItemUserApiKey } from './Creat import { CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval } from './CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval'; import { CreateCommunityResponseCommunityAddressesItemUserProfile } from './CreateCommunityResponseCommunityAddressesItemUserProfile'; import { CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem } from './CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem'; - export declare const CreateCommunityResponseCommunityAddressesItemUser: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityAddressesItemUser.Raw, CommonApi.CreateCommunityResponseCommunityAddressesItemUser diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.js index 2b6320ac828..552757078d2 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUser.js @@ -6,7 +6,6 @@ import { CreateCommunityResponseCommunityAddressesItemUserApiKey } from './Creat import { CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval } from './CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval'; import { CreateCommunityResponseCommunityAddressesItemUserProfile } from './CreateCommunityResponseCommunityAddressesItemUserProfile'; import { CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem } from './CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem'; - export const CreateCommunityResponseCommunityAddressesItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..87a99eb7819 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateCommunityResponseCommunityAddressesItemUserApiKey: core.serialization.ObjectSchema< + serializers.CreateCommunityResponseCommunityAddressesItemUserApiKey.Raw, + CommonApi.CreateCommunityResponseCommunityAddressesItemUserApiKey +>; +export declare namespace CreateCommunityResponseCommunityAddressesItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.js new file mode 100644 index 00000000000..10c198c2d5f --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateCommunityResponseCommunityAddressesItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval.d.ts index b52019f6a8d..b74556f912d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval.Raw, CommonApi.CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval.js index 1619363e62e..a9a004c588f 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityAddressesItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.d.ts index 01165d59eb0..68a21b1cfe2 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage } from './CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage'; - export declare const CreateCommunityResponseCommunityAddressesItemUserProfile: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityAddressesItemUserProfile.Raw, CommonApi.CreateCommunityResponseCommunityAddressesItemUserProfile diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.js index dcc93ff8061..03e59f94b26 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage } from './CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage'; - export const CreateCommunityResponseCommunityAddressesItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage.d.ts index 4ca8c1c5db3..1d0734d4f42 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage.Raw, CommonApi.CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage.js index d7afcd4b3a4..cc4ce2797dc 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityAddressesItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem.d.ts index f5087dd153c..dcdf8b3eee2 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem.Raw, CommonApi.CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem.js index 499acc0ae37..4c12db693ce 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityAddressesItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemWalletId.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemWalletId.d.ts index 4a998542203..c090d600475 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityAddressesItemWalletId: core.serialization.Schema< serializers.CreateCommunityResponseCommunityAddressesItemWalletId.Raw, CommonApi.CreateCommunityResponseCommunityAddressesItemWalletId diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemWalletId.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemWalletId.js index 2b5e33b8d9d..e3cc5ba5d59 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemWalletId.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityAddressesItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityAddressesItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityBase.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityBase.d.ts index dec563bfd7b..c2882abbf56 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityBase.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityBase.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityBase: core.serialization.Schema< serializers.CreateCommunityResponseCommunityBase.Raw, CommonApi.CreateCommunityResponseCommunityBase diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityBase.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityBase.js index ceff4dc1daf..b070eadd26f 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityBase.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityBase.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityBase = core.serialization.enum_([ 'cosmos', 'substrate', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNode.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNode.d.ts index 67097272c33..5372bb4b14a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNode.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNode.d.ts @@ -8,7 +8,6 @@ import { CreateCommunityResponseCommunityChainNodeBalanceType } from './CreateCo import { CreateCommunityResponseCommunityChainNodeContractsItem } from './CreateCommunityResponseCommunityChainNodeContractsItem'; import { CreateCommunityResponseCommunityChainNodeCosmosGovVersion } from './CreateCommunityResponseCommunityChainNodeCosmosGovVersion'; import { CreateCommunityResponseCommunityChainNodeHealth } from './CreateCommunityResponseCommunityChainNodeHealth'; - export declare const CreateCommunityResponseCommunityChainNode: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityChainNode.Raw, CommonApi.CreateCommunityResponseCommunityChainNode diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNode.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNode.js index 5568c3efbf6..8dddb2ec07b 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNode.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNode.js @@ -6,7 +6,6 @@ import { CreateCommunityResponseCommunityChainNodeBalanceType } from './CreateCo import { CreateCommunityResponseCommunityChainNodeContractsItem } from './CreateCommunityResponseCommunityChainNodeContractsItem'; import { CreateCommunityResponseCommunityChainNodeCosmosGovVersion } from './CreateCommunityResponseCommunityChainNodeCosmosGovVersion'; import { CreateCommunityResponseCommunityChainNodeHealth } from './CreateCommunityResponseCommunityChainNodeHealth'; - export const CreateCommunityResponseCommunityChainNode = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeBalanceType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeBalanceType.d.ts index 45d2901d2fd..4a2e133d304 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeBalanceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeBalanceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityChainNodeBalanceType: core.serialization.Schema< serializers.CreateCommunityResponseCommunityChainNodeBalanceType.Raw, CommonApi.CreateCommunityResponseCommunityChainNodeBalanceType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeBalanceType.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeBalanceType.js index 08017bc1183..5f27bf96035 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeBalanceType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeBalanceType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityChainNodeBalanceType = core.serialization.enum_([ 'terra', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeContractsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeContractsItem.d.ts index 33377b1e40b..3aa89c11a07 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeContractsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeContractsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityChainNodeContractsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityChainNodeContractsItem.Raw, CommonApi.CreateCommunityResponseCommunityChainNodeContractsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeContractsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeContractsItem.js index facf2f31c68..4ed0f683b45 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeContractsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeContractsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityChainNodeContractsItem = core.serialization.object({ id: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeCosmosGovVersion.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeCosmosGovVersion.d.ts index 5adb148b728..293f44dd19e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeCosmosGovVersion.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeCosmosGovVersion.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityChainNodeCosmosGovVersion: core.serialization.Schema< serializers.CreateCommunityResponseCommunityChainNodeCosmosGovVersion.Raw, CommonApi.CreateCommunityResponseCommunityChainNodeCosmosGovVersion diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeCosmosGovVersion.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeCosmosGovVersion.js index 8541e27f6a4..6773e6e03da 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeCosmosGovVersion.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeCosmosGovVersion.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityChainNodeCosmosGovVersion = core.serialization.enum_([ 'v1', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeHealth.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeHealth.d.ts index 998ef3aff37..f94faf531c4 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeHealth.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeHealth.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityChainNodeHealth: core.serialization.Schema< serializers.CreateCommunityResponseCommunityChainNodeHealth.Raw, CommonApi.CreateCommunityResponseCommunityChainNodeHealth diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeHealth.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeHealth.js index 746402822af..3a05bc71247 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeHealth.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityChainNodeHealth.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityChainNodeHealth = core.serialization.enum_(['failed', 'healthy']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.d.ts index 8295083c3ce..ee9c389729b 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem } from './CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem'; - export declare const CreateCommunityResponseCommunityCommunityStakesItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityCommunityStakesItem.Raw, CommonApi.CreateCommunityResponseCommunityCommunityStakesItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.js index 15c970d2a9e..a49b0826068 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem } from './CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem'; - export const CreateCommunityResponseCommunityCommunityStakesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.d.ts index 85c5dada7e9..f66261b9e57 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection } from './CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection'; - export declare const CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.Raw, CommonApi.CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.js index 0bae4721ec6..b750858bfd6 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection } from './CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection'; - export const CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItem = core.serialization.object({ transactionHash: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts index ae6bbb997c9..40b19133bbc 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection: core.serialization.Schema< serializers.CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection.Raw, CommonApi.CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection.js index 4e1346fb908..6f59e839877 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityCommunityStakesItemStakeTransactionsItemStakeDirection = core.serialization.enum_(['buy', 'sell']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.d.ts index 7092abd40da..9c2d2bd49d2 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityCommunityTagsItemTag } from './CreateCommunityResponseCommunityCommunityTagsItemTag'; - export declare const CreateCommunityResponseCommunityCommunityTagsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityCommunityTagsItem.Raw, CommonApi.CreateCommunityResponseCommunityCommunityTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.js index 4718bf39732..30fa64a6e24 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityCommunityTagsItemTag } from './CreateCommunityResponseCommunityCommunityTagsItemTag'; - export const CreateCommunityResponseCommunityCommunityTagsItem = core.serialization.object({ communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItemTag.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItemTag.d.ts index 841aa1f7e72..110f992b367 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItemTag.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItemTag.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityCommunityTagsItemTag: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityCommunityTagsItemTag.Raw, CommonApi.CreateCommunityResponseCommunityCommunityTagsItemTag diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItemTag.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItemTag.js index 949b3c9cbea..0e63f3fa663 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItemTag.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityCommunityTagsItemTag.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityCommunityTagsItemTag = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.d.ts index 5a63712e958..585b567ed16 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityContestManagersItemContestsItem } from './CreateCommunityResponseCommunityContestManagersItemContestsItem'; import { CreateCommunityResponseCommunityContestManagersItemTopicsItem } from './CreateCommunityResponseCommunityContestManagersItemTopicsItem'; - export declare const CreateCommunityResponseCommunityContestManagersItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityContestManagersItem.Raw, CommonApi.CreateCommunityResponseCommunityContestManagersItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.js index 233d4d4f1ed..84f9a2c53e9 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityContestManagersItemContestsItem } from './CreateCommunityResponseCommunityContestManagersItemContestsItem'; import { CreateCommunityResponseCommunityContestManagersItemTopicsItem } from './CreateCommunityResponseCommunityContestManagersItemTopicsItem'; - export const CreateCommunityResponseCommunityContestManagersItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.d.ts index c4564ee18c8..6fb9c8339e1 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem } from './CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem'; import { CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem } from './CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem'; - export declare const CreateCommunityResponseCommunityContestManagersItemContestsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityContestManagersItemContestsItem.Raw, CommonApi.CreateCommunityResponseCommunityContestManagersItemContestsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.js index cd0a77c68a4..e623b71ca63 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem } from './CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem'; import { CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem } from './CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem'; - export const CreateCommunityResponseCommunityContestManagersItemContestsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.d.ts index 181b94634a8..dbdc56ebe70 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction } from './CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction'; - export declare const CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.Raw, CommonApi.CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.js index 157e7bfa800..d422d924bcd 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction } from './CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction'; - export const CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction.d.ts index 648c95e8ed3..6a7ad459257 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction: core.serialization.Schema< serializers.CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction.Raw, CommonApi.CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction.js index eccc81e0294..502ccc21ccc 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityContestManagersItemContestsItemActionsItemAction = core.serialization.enum_(['added', 'upvoted']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem.d.ts index 7d9058966e1..4c239b0433f 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem.Raw, CommonApi.CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem.js index 2816a9ef5cf..56ecac581b1 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityContestManagersItemContestsItemScoreItem = core.serialization.object({ creatorAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.d.ts index 9fed3ec8f22..6a6396b4d32 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem } from './CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem'; import { CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting } from './CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting'; - export declare const CreateCommunityResponseCommunityContestManagersItemTopicsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityContestManagersItemTopicsItem.Raw, CommonApi.CreateCommunityResponseCommunityContestManagersItemTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.js index 3b6117ad314..b06e54cdfa3 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem } from './CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem'; import { CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting } from './CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting'; - export const CreateCommunityResponseCommunityContestManagersItemTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem.d.ts index 42e352118a6..6e53b807e06 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem.Raw, CommonApi.CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem.js index f8abca31234..820d4b62430 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityContestManagersItemTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting.d.ts index d9c51612570..98fdf24492a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting: core.serialization.Schema< serializers.CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting.Raw, CommonApi.CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting.js index e6de5123352..3a528a124a9 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityContestManagersItemTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityDefaultPage.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityDefaultPage.d.ts index 36a531f3fb7..a5fd7e3fc06 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityDefaultPage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityDefaultPage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityDefaultPage: core.serialization.Schema< serializers.CreateCommunityResponseCommunityDefaultPage.Raw, CommonApi.CreateCommunityResponseCommunityDefaultPage diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityDefaultPage.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityDefaultPage.js index df2217c5e74..cb1bbcffb8d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityDefaultPage.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityDefaultPage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityDefaultPage = core.serialization.enum_([ 'default_all_discussions_view', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItem.d.ts index 3204768bf50..429e72da77e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityGroupsItemMetadata } from './CreateCommunityResponseCommunityGroupsItemMetadata'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItem } from './CreateCommunityResponseCommunityGroupsItemRequirementsItem'; - export declare const CreateCommunityResponseCommunityGroupsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItem.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItem.js index 6b6d3018364..562adf7cc2a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityGroupsItemMetadata } from './CreateCommunityResponseCommunityGroupsItemMetadata'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItem } from './CreateCommunityResponseCommunityGroupsItemRequirementsItem'; - export const CreateCommunityResponseCommunityGroupsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemMetadata.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemMetadata.d.ts index e726d49feae..805bb45a30b 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemMetadata.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemMetadata.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityGroupsItemMetadata: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItemMetadata.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemMetadata diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemMetadata.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemMetadata.js index 9a2f0d67c4e..f87104138f5 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemMetadata.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemMetadata.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityGroupsItemMetadata = core.serialization.object({ name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.d.ts index 2e1f012cfbd..395c02cf6cb 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItem: core.serialization.Schema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItem.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItem @@ -15,12 +14,10 @@ export declare namespace CreateCommunityResponseCommunityGroupsItemRequirementsI type Raw = | CreateCommunityResponseCommunityGroupsItemRequirementsItem.Threshold | CreateCommunityResponseCommunityGroupsItemRequirementsItem.Allow; - interface Threshold extends CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.Raw { rule: 'threshold'; } - interface Allow extends CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.Raw { rule: 'allow'; diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.js index a61f6fe2cf9..98443fa7c21 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItem = core.serialization .union('rule', { diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.d.ts index ff78b747897..0bfff25031f 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.js index d89890a17b4..4a6fc297868 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemAllow = core.serialization.object({ data: CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData.d.ts index cdb36d6bd75..a214273ad88 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData.js index 35477b38690..5c13e96d824 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemAllowData = core.serialization.object({ allow: core.serialization.list(core.serialization.string()), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.d.ts index 235b76b3997..ede5b22f611 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.js index 0eb370a7ffd..80f1076371f 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemThreshold = core.serialization.object({ data: CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.d.ts index bbb4473738b..a8689cca992 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.js index ead7b8f7565..f49a70eab86 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData = core.serialization.object({ threshold: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.d.ts index 8074746946a..f04c23facef 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -8,7 +8,6 @@ import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource: core.serialization.Schema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.js index 7a335e19f91..1e83b56cf55 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource.js @@ -6,7 +6,6 @@ import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdData import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSource = core.serialization.undiscriminatedUnion([ CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne.d.ts index da6a8213b26..33fc3ff6659 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne.js index 68e06492de3..4cd12aa7ec7 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceOne = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index 0d20a6dc4fe..a643113347f 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.js index 57b67c7335a..5fff1bab38b 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThree = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts index 2adfcac3c92..acff87a484c 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType: core.serialization.Schema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js index d586f61d46d..b0319e32f62 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceThreeSourceType = core.serialization.enum_(['cw721', 'cw20']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index e69f02d8c5c..7d6ce79399a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.js index 06a8610870b..7ee607e81cc 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenId = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts index fe924f2c460..7ddf6da5b52 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType: core.serialization.Schema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js index f78746a1863..2ee05ad5e68 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType = core.serialization.enum_(['erc20', 'erc721', 'erc1155', 'spl']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts index ac11f407f1f..54e6d8d2e88 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.Raw, CommonApi.CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js index 8a40eb12045..0c346216666 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityGroupsItemRequirementsItemThresholdDataSourceTokenSymbol = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityHasHomepage.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityHasHomepage.d.ts index bfde785ab14..a01ec477541 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityHasHomepage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityHasHomepage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityHasHomepage: core.serialization.Schema< serializers.CreateCommunityResponseCommunityHasHomepage.Raw, CommonApi.CreateCommunityResponseCommunityHasHomepage diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityHasHomepage.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityHasHomepage.js index 6362925bb69..53658342e00 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityHasHomepage.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityHasHomepage.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityHasHomepage = core.serialization.enum_(['true', 'false']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunitySocialLinksItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunitySocialLinksItem.d.ts index a32a4868ef1..131c5f7d072 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunitySocialLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunitySocialLinksItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunitySocialLinksItem: core.serialization.Schema< serializers.CreateCommunityResponseCommunitySocialLinksItem.Raw, CommonApi.CreateCommunityResponseCommunitySocialLinksItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunitySocialLinksItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunitySocialLinksItem.js index a2256ed1a07..5387f29bd97 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunitySocialLinksItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunitySocialLinksItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunitySocialLinksItem = core.serialization.undiscriminatedUnion([ core.serialization.unknown(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTerms.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTerms.d.ts index afdc17f6461..b773ba57b12 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTerms.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTerms.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityTermsZero } from './CreateCommunityResponseCommunityTermsZero'; - export declare const CreateCommunityResponseCommunityTerms: core.serialization.Schema< serializers.CreateCommunityResponseCommunityTerms.Raw, CommonApi.CreateCommunityResponseCommunityTerms diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTerms.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTerms.js index eed7598f2ad..9a017412c64 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTerms.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTerms.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityTermsZero } from './CreateCommunityResponseCommunityTermsZero'; - export const CreateCommunityResponseCommunityTerms = core.serialization.undiscriminatedUnion([ CreateCommunityResponseCommunityTermsZero, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTermsZero.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTermsZero.d.ts index 68b7fed25ed..fc979f7913b 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTermsZero.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTermsZero.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityTermsZero: core.serialization.Schema< serializers.CreateCommunityResponseCommunityTermsZero.Raw, CommonApi.CreateCommunityResponseCommunityTermsZero diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTermsZero.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTermsZero.js index 4283d83ce98..b159633a439 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTermsZero.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTermsZero.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityTermsZero = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItem.d.ts index a43ba8acd07..79b9ebf1f9e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommunityResponseCommunityTopicsItemContestTopicsItem } from './CreateCommunityResponseCommunityTopicsItemContestTopicsItem'; import { CreateCommunityResponseCommunityTopicsItemWeightedVoting } from './CreateCommunityResponseCommunityTopicsItemWeightedVoting'; - export declare const CreateCommunityResponseCommunityTopicsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityTopicsItem.Raw, CommonApi.CreateCommunityResponseCommunityTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItem.js index 4edef3a7fdf..045bee0882d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateCommunityResponseCommunityTopicsItemContestTopicsItem } from './CreateCommunityResponseCommunityTopicsItemContestTopicsItem'; import { CreateCommunityResponseCommunityTopicsItemWeightedVoting } from './CreateCommunityResponseCommunityTopicsItemWeightedVoting'; - export const CreateCommunityResponseCommunityTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemContestTopicsItem.d.ts index b69cf910ea5..52f1a096a30 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.CreateCommunityResponseCommunityTopicsItemContestTopicsItem.Raw, CommonApi.CreateCommunityResponseCommunityTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemContestTopicsItem.js index 25d19e38149..c2ff9868a2a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemWeightedVoting.d.ts index 0ac8c453620..431039f240a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityTopicsItemWeightedVoting: core.serialization.Schema< serializers.CreateCommunityResponseCommunityTopicsItemWeightedVoting.Raw, CommonApi.CreateCommunityResponseCommunityTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemWeightedVoting.js index c214fdc8d7b..739d5a4c093 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityType.d.ts index 0a9e99bf9fb..85a795a1d7c 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommunityResponseCommunityType: core.serialization.Schema< serializers.CreateCommunityResponseCommunityType.Raw, CommonApi.CreateCommunityResponseCommunityType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityType.js b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityType.js index 9f612f7b458..5c41382a90e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateCommunityResponseCommunityType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommunityResponseCommunityType = core.serialization.enum_([ 'chain', 'dao', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestMetadata.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestMetadata.d.ts index f1989bfa825..dd5563b69af 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestMetadata.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestMetadata.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupRequestMetadata: core.serialization.ObjectSchema< serializers.CreateGroupRequestMetadata.Raw, CommonApi.CreateGroupRequestMetadata diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestMetadata.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestMetadata.js index 9c875be4484..5f079fefd2c 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestMetadata.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestMetadata.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupRequestMetadata = core.serialization.object({ name: core.serialization.string(), description: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItem.d.ts index 206694974fd..358bcf95029 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupRequestRequirementsItemAllow } from './CreateGroupRequestRequirementsItemAllow'; import { CreateGroupRequestRequirementsItemThreshold } from './CreateGroupRequestRequirementsItemThreshold'; - export declare const CreateGroupRequestRequirementsItem: core.serialization.Schema< serializers.CreateGroupRequestRequirementsItem.Raw, CommonApi.CreateGroupRequestRequirementsItem @@ -15,11 +14,9 @@ export declare namespace CreateGroupRequestRequirementsItem { type Raw = | CreateGroupRequestRequirementsItem.Threshold | CreateGroupRequestRequirementsItem.Allow; - interface Threshold extends CreateGroupRequestRequirementsItemThreshold.Raw { rule: 'threshold'; } - interface Allow extends CreateGroupRequestRequirementsItemAllow.Raw { rule: 'allow'; } diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItem.js index d760e51b0d8..9f5faf85c99 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateGroupRequestRequirementsItemAllow } from './CreateGroupRequestRequirementsItemAllow'; import { CreateGroupRequestRequirementsItemThreshold } from './CreateGroupRequestRequirementsItemThreshold'; - export const CreateGroupRequestRequirementsItem = core.serialization .union('rule', { threshold: CreateGroupRequestRequirementsItemThreshold, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllow.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllow.d.ts index c2ac6943db2..20e44522737 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllow.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllow.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupRequestRequirementsItemAllowData } from './CreateGroupRequestRequirementsItemAllowData'; - export declare const CreateGroupRequestRequirementsItemAllow: core.serialization.ObjectSchema< serializers.CreateGroupRequestRequirementsItemAllow.Raw, CommonApi.CreateGroupRequestRequirementsItemAllow diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllow.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllow.js index 0b926526e9c..1685d379870 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllow.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllow.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupRequestRequirementsItemAllowData } from './CreateGroupRequestRequirementsItemAllowData'; - export const CreateGroupRequestRequirementsItemAllow = core.serialization.object({ data: CreateGroupRequestRequirementsItemAllowData, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllowData.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllowData.d.ts index bdd9feaf049..1ff090919e2 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllowData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllowData.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupRequestRequirementsItemAllowData: core.serialization.ObjectSchema< serializers.CreateGroupRequestRequirementsItemAllowData.Raw, CommonApi.CreateGroupRequestRequirementsItemAllowData diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllowData.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllowData.js index 6855f052848..c9e3794c06e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllowData.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemAllowData.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupRequestRequirementsItemAllowData = core.serialization.object({ allow: core.serialization.list(core.serialization.string()), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThreshold.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThreshold.d.ts index 30f6bb20e82..f2baabcd7ce 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThreshold.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupRequestRequirementsItemThresholdData } from './CreateGroupRequestRequirementsItemThresholdData'; - export declare const CreateGroupRequestRequirementsItemThreshold: core.serialization.ObjectSchema< serializers.CreateGroupRequestRequirementsItemThreshold.Raw, CommonApi.CreateGroupRequestRequirementsItemThreshold diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThreshold.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThreshold.js index f33cd2945e0..710042e6b4a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThreshold.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThreshold.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupRequestRequirementsItemThresholdData } from './CreateGroupRequestRequirementsItemThresholdData'; - export const CreateGroupRequestRequirementsItemThreshold = core.serialization.object({ data: CreateGroupRequestRequirementsItemThresholdData, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.d.ts index d431d7166d4..4b3396c3a70 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupRequestRequirementsItemThresholdDataSource } from './CreateGroupRequestRequirementsItemThresholdDataSource'; - export declare const CreateGroupRequestRequirementsItemThresholdData: core.serialization.ObjectSchema< serializers.CreateGroupRequestRequirementsItemThresholdData.Raw, CommonApi.CreateGroupRequestRequirementsItemThresholdData diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.js index 80a0603f64d..65ed6ba7d67 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdData.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupRequestRequirementsItemThresholdDataSource } from './CreateGroupRequestRequirementsItemThresholdDataSource'; - export const CreateGroupRequestRequirementsItemThresholdData = core.serialization.object({ threshold: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.d.ts index 8fb97769cc2..4d1d3e94a75 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.d.ts @@ -8,7 +8,6 @@ import { CreateGroupRequestRequirementsItemThresholdDataSourceOne } from './Crea import { CreateGroupRequestRequirementsItemThresholdDataSourceThree } from './CreateGroupRequestRequirementsItemThresholdDataSourceThree'; import { CreateGroupRequestRequirementsItemThresholdDataSourceTokenId } from './CreateGroupRequestRequirementsItemThresholdDataSourceTokenId'; import { CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol } from './CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol'; - export declare const CreateGroupRequestRequirementsItemThresholdDataSource: core.serialization.Schema< serializers.CreateGroupRequestRequirementsItemThresholdDataSource.Raw, CommonApi.CreateGroupRequestRequirementsItemThresholdDataSource diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.js index 1d101a64c69..b614a3d49b1 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSource.js @@ -6,7 +6,6 @@ import { CreateGroupRequestRequirementsItemThresholdDataSourceOne } from './Crea import { CreateGroupRequestRequirementsItemThresholdDataSourceThree } from './CreateGroupRequestRequirementsItemThresholdDataSourceThree'; import { CreateGroupRequestRequirementsItemThresholdDataSourceTokenId } from './CreateGroupRequestRequirementsItemThresholdDataSourceTokenId'; import { CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol } from './CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol'; - export const CreateGroupRequestRequirementsItemThresholdDataSource = core.serialization.undiscriminatedUnion([ CreateGroupRequestRequirementsItemThresholdDataSourceTokenId, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceOne.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceOne.d.ts index 4ec5699f464..d84e318883d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceOne.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceOne.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupRequestRequirementsItemThresholdDataSourceOne: core.serialization.ObjectSchema< serializers.CreateGroupRequestRequirementsItemThresholdDataSourceOne.Raw, CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceOne.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceOne.js index 3d58d489a76..3737b8d63b4 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceOne.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceOne.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupRequestRequirementsItemThresholdDataSourceOne = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts index 580208562cb..284bb7a8375 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType } from './CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType'; - export declare const CreateGroupRequestRequirementsItemThresholdDataSourceThree: core.serialization.ObjectSchema< serializers.CreateGroupRequestRequirementsItemThresholdDataSourceThree.Raw, CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceThree diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.js index 990dcdc03c2..73bab0fb0be 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThree.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType } from './CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType'; - export const CreateGroupRequestRequirementsItemThresholdDataSourceThree = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.d.ts index 5e53896ca2d..ede90fedda0 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType: core.serialization.Schema< serializers.CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.Raw, CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.js index cbf08a1f974..0e78fd7c699 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType = core.serialization.enum_(['cw721', 'cw20']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts index 2a547320364..046e3add8c9 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType } from './CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType'; - export declare const CreateGroupRequestRequirementsItemThresholdDataSourceTokenId: core.serialization.ObjectSchema< serializers.CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.Raw, CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.js index 1739c1a1105..5a2c833a3a2 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenId.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType } from './CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType'; - export const CreateGroupRequestRequirementsItemThresholdDataSourceTokenId = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts index a08457a32f3..0b388146540 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType: core.serialization.Schema< serializers.CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.Raw, CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.js index 2f67929f9e8..c21e4919b33 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType = core.serialization.enum_(['erc20', 'erc721', 'erc1155', 'spl']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.d.ts index 23c09e832e7..8fa95cf642f 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol: core.serialization.ObjectSchema< serializers.CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.Raw, CommonApi.CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.js index 728be700b15..c0be9cd4205 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponse.d.ts index c1cf786d71e..27a30185745 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponse.d.ts @@ -17,7 +17,6 @@ import { CreateGroupResponseSocialLinksItem } from './CreateGroupResponseSocialL import { CreateGroupResponseTerms } from './CreateGroupResponseTerms'; import { CreateGroupResponseTopicsItem } from './CreateGroupResponseTopicsItem'; import { CreateGroupResponseType } from './CreateGroupResponseType'; - export declare const CreateGroupResponse: core.serialization.ObjectSchema< serializers.CreateGroupResponse.Raw, CommonApi.CreateGroupResponse diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponse.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponse.js index e0d119f1d02..177ce91f63a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponse.js @@ -15,7 +15,6 @@ import { CreateGroupResponseSocialLinksItem } from './CreateGroupResponseSocialL import { CreateGroupResponseTerms } from './CreateGroupResponseTerms'; import { CreateGroupResponseTopicsItem } from './CreateGroupResponseTopicsItem'; import { CreateGroupResponseType } from './CreateGroupResponseType'; - export const CreateGroupResponse = core.serialization.object({ id: core.serialization.string().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItem.d.ts index 01eac4f4ab4..41504e14d62 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateGroupResponseAddressesItemRole } from './CreateGroupResponseAddressesItemRole'; import { CreateGroupResponseAddressesItemUser } from './CreateGroupResponseAddressesItemUser'; import { CreateGroupResponseAddressesItemWalletId } from './CreateGroupResponseAddressesItemWalletId'; - export declare const CreateGroupResponseAddressesItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseAddressesItem.Raw, CommonApi.CreateGroupResponseAddressesItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItem.js index 8585ebf8c84..5a018b19daa 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateGroupResponseAddressesItemRole } from './CreateGroupResponseAddressesItemRole'; import { CreateGroupResponseAddressesItemUser } from './CreateGroupResponseAddressesItemUser'; import { CreateGroupResponseAddressesItemWalletId } from './CreateGroupResponseAddressesItemWalletId'; - export const CreateGroupResponseAddressesItem = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemRole.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemRole.d.ts index 7a220ec9726..cd332f70518 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseAddressesItemRole: core.serialization.Schema< serializers.CreateGroupResponseAddressesItemRole.Raw, CommonApi.CreateGroupResponseAddressesItemRole diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemRole.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemRole.js index 0df3a81aa70..fd5518a1cd4 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemRole.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemRole.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseAddressesItemRole = core.serialization.enum_([ 'admin', 'moderator', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUser.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUser.d.ts index ef673a1e04f..54536efc0ca 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUser.d.ts @@ -8,7 +8,6 @@ import { CreateGroupResponseAddressesItemUserApiKey } from './CreateGroupRespons import { CreateGroupResponseAddressesItemUserEmailNotificationInterval } from './CreateGroupResponseAddressesItemUserEmailNotificationInterval'; import { CreateGroupResponseAddressesItemUserProfile } from './CreateGroupResponseAddressesItemUserProfile'; import { CreateGroupResponseAddressesItemUserProfileTagsItem } from './CreateGroupResponseAddressesItemUserProfileTagsItem'; - export declare const CreateGroupResponseAddressesItemUser: core.serialization.ObjectSchema< serializers.CreateGroupResponseAddressesItemUser.Raw, CommonApi.CreateGroupResponseAddressesItemUser diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUser.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUser.js index e84877f5e55..eded3f8fd7a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUser.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUser.js @@ -6,7 +6,6 @@ import { CreateGroupResponseAddressesItemUserApiKey } from './CreateGroupRespons import { CreateGroupResponseAddressesItemUserEmailNotificationInterval } from './CreateGroupResponseAddressesItemUserEmailNotificationInterval'; import { CreateGroupResponseAddressesItemUserProfile } from './CreateGroupResponseAddressesItemUserProfile'; import { CreateGroupResponseAddressesItemUserProfileTagsItem } from './CreateGroupResponseAddressesItemUserProfileTagsItem'; - export const CreateGroupResponseAddressesItemUser = core.serialization.object({ id: core.serialization.number().optional(), email: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..42ac51a45be --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateGroupResponseAddressesItemUserApiKey: core.serialization.ObjectSchema< + serializers.CreateGroupResponseAddressesItemUserApiKey.Raw, + CommonApi.CreateGroupResponseAddressesItemUserApiKey +>; +export declare namespace CreateGroupResponseAddressesItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.js new file mode 100644 index 00000000000..5dd6bce0097 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateGroupResponseAddressesItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserEmailNotificationInterval.d.ts index f311b7a3056..2ac1a9301f9 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseAddressesItemUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateGroupResponseAddressesItemUserEmailNotificationInterval.Raw, CommonApi.CreateGroupResponseAddressesItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserEmailNotificationInterval.js index c4467ff082f..007b55d02a6 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseAddressesItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfile.d.ts index 6bf306dc8f2..4663349136c 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseAddressesItemUserProfileBackgroundImage } from './CreateGroupResponseAddressesItemUserProfileBackgroundImage'; - export declare const CreateGroupResponseAddressesItemUserProfile: core.serialization.ObjectSchema< serializers.CreateGroupResponseAddressesItemUserProfile.Raw, CommonApi.CreateGroupResponseAddressesItemUserProfile diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfile.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfile.js index d635165f2c1..6725a6298be 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseAddressesItemUserProfileBackgroundImage } from './CreateGroupResponseAddressesItemUserProfileBackgroundImage'; - export const CreateGroupResponseAddressesItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileBackgroundImage.d.ts index a59601e6fd3..59e8726f4a9 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseAddressesItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateGroupResponseAddressesItemUserProfileBackgroundImage.Raw, CommonApi.CreateGroupResponseAddressesItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileBackgroundImage.js index 7b6d7f176c1..150f0112f62 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseAddressesItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileTagsItem.d.ts index 970858271eb..85a890fcac6 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseAddressesItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseAddressesItemUserProfileTagsItem.Raw, CommonApi.CreateGroupResponseAddressesItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileTagsItem.js index d63cdb40938..bb6ad5c0ee1 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseAddressesItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemWalletId.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemWalletId.d.ts index 689c1672727..763123b8ae6 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseAddressesItemWalletId: core.serialization.Schema< serializers.CreateGroupResponseAddressesItemWalletId.Raw, CommonApi.CreateGroupResponseAddressesItemWalletId diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemWalletId.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemWalletId.js index cb3c8d7e090..63b3524c6c7 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemWalletId.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseAddressesItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseAddressesItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseBase.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseBase.d.ts index b598dbb91f6..d6d95d5442a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseBase.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseBase.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseBase: core.serialization.Schema< serializers.CreateGroupResponseBase.Raw, CommonApi.CreateGroupResponseBase diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseBase.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseBase.js index 4163bae6b00..46648372265 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseBase.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseBase.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseBase = core.serialization.enum_([ 'cosmos', 'substrate', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNode.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNode.d.ts index baad50de1b4..966044c1a16 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNode.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNode.d.ts @@ -8,7 +8,6 @@ import { CreateGroupResponseChainNodeBalanceType } from './CreateGroupResponseCh import { CreateGroupResponseChainNodeContractsItem } from './CreateGroupResponseChainNodeContractsItem'; import { CreateGroupResponseChainNodeCosmosGovVersion } from './CreateGroupResponseChainNodeCosmosGovVersion'; import { CreateGroupResponseChainNodeHealth } from './CreateGroupResponseChainNodeHealth'; - export declare const CreateGroupResponseChainNode: core.serialization.ObjectSchema< serializers.CreateGroupResponseChainNode.Raw, CommonApi.CreateGroupResponseChainNode diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNode.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNode.js index 233caa67205..b65916c9fd3 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNode.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNode.js @@ -6,7 +6,6 @@ import { CreateGroupResponseChainNodeBalanceType } from './CreateGroupResponseCh import { CreateGroupResponseChainNodeContractsItem } from './CreateGroupResponseChainNodeContractsItem'; import { CreateGroupResponseChainNodeCosmosGovVersion } from './CreateGroupResponseChainNodeCosmosGovVersion'; import { CreateGroupResponseChainNodeHealth } from './CreateGroupResponseChainNodeHealth'; - export const CreateGroupResponseChainNode = core.serialization.object({ id: core.serialization.number().optional(), url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeBalanceType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeBalanceType.d.ts index 83c9cfb05a9..3966f7f55ee 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeBalanceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeBalanceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseChainNodeBalanceType: core.serialization.Schema< serializers.CreateGroupResponseChainNodeBalanceType.Raw, CommonApi.CreateGroupResponseChainNodeBalanceType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeBalanceType.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeBalanceType.js index e4993aa123d..023460377d3 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeBalanceType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeBalanceType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseChainNodeBalanceType = core.serialization.enum_( ['terra', 'ethereum', 'solana', 'cosmos', 'near', 'substrate'], ); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeContractsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeContractsItem.d.ts index 8c49a576395..3373a20d1af 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeContractsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeContractsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseChainNodeContractsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseChainNodeContractsItem.Raw, CommonApi.CreateGroupResponseChainNodeContractsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeContractsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeContractsItem.js index 909e1d0dc72..1b89e8b4a9d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeContractsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeContractsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseChainNodeContractsItem = core.serialization.object({ id: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeCosmosGovVersion.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeCosmosGovVersion.d.ts index f2df0069647..79b66a3f3c5 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeCosmosGovVersion.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeCosmosGovVersion.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseChainNodeCosmosGovVersion: core.serialization.Schema< serializers.CreateGroupResponseChainNodeCosmosGovVersion.Raw, CommonApi.CreateGroupResponseChainNodeCosmosGovVersion diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeCosmosGovVersion.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeCosmosGovVersion.js index ffd05261637..54eb8f428a8 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeCosmosGovVersion.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeCosmosGovVersion.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseChainNodeCosmosGovVersion = core.serialization.enum_([ 'v1', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeHealth.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeHealth.d.ts index 9d95b8abbd7..47b4932c38e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeHealth.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeHealth.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseChainNodeHealth: core.serialization.Schema< serializers.CreateGroupResponseChainNodeHealth.Raw, CommonApi.CreateGroupResponseChainNodeHealth diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeHealth.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeHealth.js index ec144a78922..2130628b441 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeHealth.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseChainNodeHealth.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseChainNodeHealth = core.serialization.enum_([ 'failed', 'healthy', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItem.d.ts index 4db20f663ce..78f51da1ae4 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseCommunityStakesItemStakeTransactionsItem } from './CreateGroupResponseCommunityStakesItemStakeTransactionsItem'; - export declare const CreateGroupResponseCommunityStakesItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseCommunityStakesItem.Raw, CommonApi.CreateGroupResponseCommunityStakesItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItem.js index d224d5f0c3f..96480b1adbe 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseCommunityStakesItemStakeTransactionsItem } from './CreateGroupResponseCommunityStakesItemStakeTransactionsItem'; - export const CreateGroupResponseCommunityStakesItem = core.serialization.object( { id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.d.ts index f5969e6010b..ca2f146190d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection } from './CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection'; - export declare const CreateGroupResponseCommunityStakesItemStakeTransactionsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseCommunityStakesItemStakeTransactionsItem.Raw, CommonApi.CreateGroupResponseCommunityStakesItemStakeTransactionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.js index 5d7712cd7ae..e03f242b573 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection } from './CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection'; - export const CreateGroupResponseCommunityStakesItemStakeTransactionsItem = core.serialization.object({ transactionHash: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts index 1d09bb6b818..f2c607a2a6f 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection: core.serialization.Schema< serializers.CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection.Raw, CommonApi.CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection.js index b6e9983538e..db35f5c619e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseCommunityStakesItemStakeTransactionsItemStakeDirection = core.serialization.enum_(['buy', 'sell']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItem.d.ts index a276315871f..dc8e7344c4a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseCommunityTagsItemTag } from './CreateGroupResponseCommunityTagsItemTag'; - export declare const CreateGroupResponseCommunityTagsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseCommunityTagsItem.Raw, CommonApi.CreateGroupResponseCommunityTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItem.js index f89eda5d42f..abaf6794679 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseCommunityTagsItemTag } from './CreateGroupResponseCommunityTagsItemTag'; - export const CreateGroupResponseCommunityTagsItem = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItemTag.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItemTag.d.ts index b4779725106..c578f0e455d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItemTag.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItemTag.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseCommunityTagsItemTag: core.serialization.ObjectSchema< serializers.CreateGroupResponseCommunityTagsItemTag.Raw, CommonApi.CreateGroupResponseCommunityTagsItemTag diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItemTag.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItemTag.js index 0910f83cb08..de8c5490654 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItemTag.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseCommunityTagsItemTag.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseCommunityTagsItemTag = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItem.d.ts index 14a2d65bc9b..962886ca1c2 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseContestManagersItemContestsItem } from './CreateGroupResponseContestManagersItemContestsItem'; import { CreateGroupResponseContestManagersItemTopicsItem } from './CreateGroupResponseContestManagersItemTopicsItem'; - export declare const CreateGroupResponseContestManagersItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseContestManagersItem.Raw, CommonApi.CreateGroupResponseContestManagersItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItem.js index 3ce541e5407..4c70df81b2e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateGroupResponseContestManagersItemContestsItem } from './CreateGroupResponseContestManagersItemContestsItem'; import { CreateGroupResponseContestManagersItemTopicsItem } from './CreateGroupResponseContestManagersItemTopicsItem'; - export const CreateGroupResponseContestManagersItem = core.serialization.object( { contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.d.ts index 9acf58fe650..2e893684d50 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseContestManagersItemContestsItemActionsItem } from './CreateGroupResponseContestManagersItemContestsItemActionsItem'; import { CreateGroupResponseContestManagersItemContestsItemScoreItem } from './CreateGroupResponseContestManagersItemContestsItemScoreItem'; - export declare const CreateGroupResponseContestManagersItemContestsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseContestManagersItemContestsItem.Raw, CommonApi.CreateGroupResponseContestManagersItemContestsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.js index 6f93885af50..222b07af284 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateGroupResponseContestManagersItemContestsItemActionsItem } from './CreateGroupResponseContestManagersItemContestsItemActionsItem'; import { CreateGroupResponseContestManagersItemContestsItemScoreItem } from './CreateGroupResponseContestManagersItemContestsItemScoreItem'; - export const CreateGroupResponseContestManagersItemContestsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.d.ts index 59c1c7b56dc..4d2734b59e9 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseContestManagersItemContestsItemActionsItemAction } from './CreateGroupResponseContestManagersItemContestsItemActionsItemAction'; - export declare const CreateGroupResponseContestManagersItemContestsItemActionsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseContestManagersItemContestsItemActionsItem.Raw, CommonApi.CreateGroupResponseContestManagersItemContestsItemActionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.js index 8c976e51c73..32bfeefecbb 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseContestManagersItemContestsItemActionsItemAction } from './CreateGroupResponseContestManagersItemContestsItemActionsItemAction'; - export const CreateGroupResponseContestManagersItemContestsItemActionsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItemAction.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItemAction.d.ts index 0fe0f52042c..fa63a3ca68e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItemAction.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItemAction.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseContestManagersItemContestsItemActionsItemAction: core.serialization.Schema< serializers.CreateGroupResponseContestManagersItemContestsItemActionsItemAction.Raw, CommonApi.CreateGroupResponseContestManagersItemContestsItemActionsItemAction diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItemAction.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItemAction.js index f67dd913fab..70849d5b3f8 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItemAction.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemActionsItemAction.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseContestManagersItemContestsItemActionsItemAction = core.serialization.enum_(['added', 'upvoted']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemScoreItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemScoreItem.d.ts index 4ecb67841c4..cfa51982a34 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemScoreItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemScoreItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseContestManagersItemContestsItemScoreItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseContestManagersItemContestsItemScoreItem.Raw, CommonApi.CreateGroupResponseContestManagersItemContestsItemScoreItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemScoreItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemScoreItem.js index 086bda48800..8b8bb83f341 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemScoreItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemContestsItemScoreItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseContestManagersItemContestsItemScoreItem = core.serialization.object({ creatorAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.d.ts index 33d1fd2903b..148b3652d40 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem } from './CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem'; import { CreateGroupResponseContestManagersItemTopicsItemWeightedVoting } from './CreateGroupResponseContestManagersItemTopicsItemWeightedVoting'; - export declare const CreateGroupResponseContestManagersItemTopicsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseContestManagersItemTopicsItem.Raw, CommonApi.CreateGroupResponseContestManagersItemTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.js index a0b79a54360..c45528dd372 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem } from './CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem'; import { CreateGroupResponseContestManagersItemTopicsItemWeightedVoting } from './CreateGroupResponseContestManagersItemTopicsItemWeightedVoting'; - export const CreateGroupResponseContestManagersItemTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem.d.ts index 1a5267e3f56..589bbb82dc6 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem.Raw, CommonApi.CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem.js index 263c9facde0..154fc20e7d1 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseContestManagersItemTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemWeightedVoting.d.ts index 05fb337c693..5848d3c47e8 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseContestManagersItemTopicsItemWeightedVoting: core.serialization.Schema< serializers.CreateGroupResponseContestManagersItemTopicsItemWeightedVoting.Raw, CommonApi.CreateGroupResponseContestManagersItemTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemWeightedVoting.js index ef08bcfe963..f1c799f1caa 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseContestManagersItemTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseContestManagersItemTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseDefaultPage.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseDefaultPage.d.ts index dbfe06a177c..d38c65d6b83 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseDefaultPage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseDefaultPage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseDefaultPage: core.serialization.Schema< serializers.CreateGroupResponseDefaultPage.Raw, CommonApi.CreateGroupResponseDefaultPage diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseDefaultPage.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseDefaultPage.js index 5fa6f2a7014..6609faa4da4 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseDefaultPage.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseDefaultPage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseDefaultPage = core.serialization.enum_([ 'default_all_discussions_view', 'default_summary_view', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItem.d.ts index f4eab664797..a8e010d8167 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseGroupsItemMetadata } from './CreateGroupResponseGroupsItemMetadata'; import { CreateGroupResponseGroupsItemRequirementsItem } from './CreateGroupResponseGroupsItemRequirementsItem'; - export declare const CreateGroupResponseGroupsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItem.Raw, CommonApi.CreateGroupResponseGroupsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItem.js index 3f27a38455f..cc3729efc84 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateGroupResponseGroupsItemMetadata } from './CreateGroupResponseGroupsItemMetadata'; import { CreateGroupResponseGroupsItemRequirementsItem } from './CreateGroupResponseGroupsItemRequirementsItem'; - export const CreateGroupResponseGroupsItem = core.serialization.object({ id: core.serialization.number().optional(), communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemMetadata.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemMetadata.d.ts index 0b1ca371f0b..d8ac815f4e2 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemMetadata.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemMetadata.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseGroupsItemMetadata: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItemMetadata.Raw, CommonApi.CreateGroupResponseGroupsItemMetadata diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemMetadata.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemMetadata.js index bd00ec29ad6..d1b87c45251 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemMetadata.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemMetadata.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseGroupsItemMetadata = core.serialization.object({ name: core.serialization.string(), description: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.d.ts index 6b5aab2b948..6799354209c 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseGroupsItemRequirementsItemAllow } from './CreateGroupResponseGroupsItemRequirementsItemAllow'; import { CreateGroupResponseGroupsItemRequirementsItemThreshold } from './CreateGroupResponseGroupsItemRequirementsItemThreshold'; - export declare const CreateGroupResponseGroupsItemRequirementsItem: core.serialization.Schema< serializers.CreateGroupResponseGroupsItemRequirementsItem.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItem @@ -15,12 +14,10 @@ export declare namespace CreateGroupResponseGroupsItemRequirementsItem { type Raw = | CreateGroupResponseGroupsItemRequirementsItem.Threshold | CreateGroupResponseGroupsItemRequirementsItem.Allow; - interface Threshold extends CreateGroupResponseGroupsItemRequirementsItemThreshold.Raw { rule: 'threshold'; } - interface Allow extends CreateGroupResponseGroupsItemRequirementsItemAllow.Raw { rule: 'allow'; diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.js index 05aaba91494..4b3eb13c569 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateGroupResponseGroupsItemRequirementsItemAllow } from './CreateGroupResponseGroupsItemRequirementsItemAllow'; import { CreateGroupResponseGroupsItemRequirementsItemThreshold } from './CreateGroupResponseGroupsItemRequirementsItemThreshold'; - export const CreateGroupResponseGroupsItemRequirementsItem = core.serialization .union('rule', { threshold: CreateGroupResponseGroupsItemRequirementsItemThreshold, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.d.ts index 2c7a6c86ac3..bf5a2679314 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseGroupsItemRequirementsItemAllowData } from './CreateGroupResponseGroupsItemRequirementsItemAllowData'; - export declare const CreateGroupResponseGroupsItemRequirementsItemAllow: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItemRequirementsItemAllow.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemAllow diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.js index 81e93e63581..492ecfaf8bf 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllow.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseGroupsItemRequirementsItemAllowData } from './CreateGroupResponseGroupsItemRequirementsItemAllowData'; - export const CreateGroupResponseGroupsItemRequirementsItemAllow = core.serialization.object({ data: CreateGroupResponseGroupsItemRequirementsItemAllowData, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllowData.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllowData.d.ts index 777c4096803..92cd287c930 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllowData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllowData.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseGroupsItemRequirementsItemAllowData: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItemRequirementsItemAllowData.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemAllowData diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllowData.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllowData.js index 307ec5058af..49e7da5438b 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllowData.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemAllowData.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseGroupsItemRequirementsItemAllowData = core.serialization.object({ allow: core.serialization.list(core.serialization.string()), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.d.ts index 7908954dfab..004db764c69 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdData } from './CreateGroupResponseGroupsItemRequirementsItemThresholdData'; - export declare const CreateGroupResponseGroupsItemRequirementsItemThreshold: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItemRequirementsItemThreshold.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemThreshold diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.js index f49a8cb0a1f..957a3ebc335 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThreshold.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdData } from './CreateGroupResponseGroupsItemRequirementsItemThresholdData'; - export const CreateGroupResponseGroupsItemRequirementsItemThreshold = core.serialization.object({ data: CreateGroupResponseGroupsItemRequirementsItemThresholdData, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.d.ts index 214eecfd840..71a2746e1ec 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource'; - export declare const CreateGroupResponseGroupsItemRequirementsItemThresholdData: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItemRequirementsItemThresholdData.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdData diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.js index 9c090aebfaf..3f0af9860ba 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdData.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource'; - export const CreateGroupResponseGroupsItemRequirementsItemThresholdData = core.serialization.object({ threshold: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.d.ts index 8d7ff1ea06d..9c04d386a37 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -8,7 +8,6 @@ import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne } f import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export declare const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource: core.serialization.Schema< serializers.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.js index 8e84d99a368..662e10740e1 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource.js @@ -6,7 +6,6 @@ import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne } f import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSource = core.serialization.undiscriminatedUnion([ CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId, diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne.d.ts index ce3818eb9bc..99314e77d4e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne.js index e9dd9aac105..5fda13118d5 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceOne = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index ec38def8915..6f13a07d8d8 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export declare const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.js index 21a36b668ce..e928bdfe5e1 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThree = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts index 75725071912..0b488aa6a50 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType: core.serialization.Schema< serializers.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js index d50d84007b3..67ab1d1a105 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType = core.serialization.enum_(['cw721', 'cw20']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index 78c422822ba..5259799c22a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export declare const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.js index bf7f03edab2..1d6f9e50239 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenId = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts index 840c2c2e576..7c60bd99455 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType: core.serialization.Schema< serializers.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js index a8d68da19f4..d20d8409043 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType = core.serialization.enum_(['erc20', 'erc721', 'erc1155', 'spl']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts index dacb3995e7e..3dee4505bfa 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol: core.serialization.ObjectSchema< serializers.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.Raw, CommonApi.CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js index 49dc3f2b4cc..979da0acb7d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseHasHomepage.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseHasHomepage.d.ts index 226b1be0f96..3181c210708 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseHasHomepage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseHasHomepage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseHasHomepage: core.serialization.Schema< serializers.CreateGroupResponseHasHomepage.Raw, CommonApi.CreateGroupResponseHasHomepage diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseHasHomepage.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseHasHomepage.js index cce6c49c34e..96d99b00c41 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseHasHomepage.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseHasHomepage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseHasHomepage = core.serialization.enum_([ 'true', 'false', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseSocialLinksItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseSocialLinksItem.d.ts index fcbb41f92e9..9debe70d705 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseSocialLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseSocialLinksItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseSocialLinksItem: core.serialization.Schema< serializers.CreateGroupResponseSocialLinksItem.Raw, CommonApi.CreateGroupResponseSocialLinksItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseSocialLinksItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseSocialLinksItem.js index b8bac9599af..da7767b0cc6 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseSocialLinksItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseSocialLinksItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseSocialLinksItem = core.serialization.undiscriminatedUnion([ core.serialization.unknown(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTerms.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTerms.d.ts index 6fb1848226b..99a32f14463 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTerms.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTerms.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseTermsZero } from './CreateGroupResponseTermsZero'; - export declare const CreateGroupResponseTerms: core.serialization.Schema< serializers.CreateGroupResponseTerms.Raw, CommonApi.CreateGroupResponseTerms diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTerms.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTerms.js index e2869d39c66..647d205fa73 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTerms.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTerms.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateGroupResponseTermsZero } from './CreateGroupResponseTermsZero'; - export const CreateGroupResponseTerms = core.serialization.undiscriminatedUnion( [CreateGroupResponseTermsZero, core.serialization.string()], ); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTermsZero.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTermsZero.d.ts index c5373ea22cf..bfc31a7a68a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTermsZero.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTermsZero.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseTermsZero: core.serialization.Schema< serializers.CreateGroupResponseTermsZero.Raw, CommonApi.CreateGroupResponseTermsZero diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTermsZero.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTermsZero.js index 1b9cf065893..2aae171981a 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTermsZero.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTermsZero.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseTermsZero = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItem.d.ts index a779ab430df..eba650f9f67 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateGroupResponseTopicsItemContestTopicsItem } from './CreateGroupResponseTopicsItemContestTopicsItem'; import { CreateGroupResponseTopicsItemWeightedVoting } from './CreateGroupResponseTopicsItemWeightedVoting'; - export declare const CreateGroupResponseTopicsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseTopicsItem.Raw, CommonApi.CreateGroupResponseTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItem.js index fbc46adfab7..2ec6c2229e0 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateGroupResponseTopicsItemContestTopicsItem } from './CreateGroupResponseTopicsItemContestTopicsItem'; import { CreateGroupResponseTopicsItemWeightedVoting } from './CreateGroupResponseTopicsItemWeightedVoting'; - export const CreateGroupResponseTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemContestTopicsItem.d.ts index 2b999e3c18f..b1599ebe00e 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.CreateGroupResponseTopicsItemContestTopicsItem.Raw, CommonApi.CreateGroupResponseTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemContestTopicsItem.js index 8a8168ca12b..c0af531c903 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemWeightedVoting.d.ts index 0156c1908b2..7fa9a6ccf35 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseTopicsItemWeightedVoting: core.serialization.Schema< serializers.CreateGroupResponseTopicsItemWeightedVoting.Raw, CommonApi.CreateGroupResponseTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemWeightedVoting.js index acb2ddb8c40..ea45a70f24d 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseType.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseType.d.ts index d04530d673f..efb78ea32b9 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateGroupResponseType: core.serialization.Schema< serializers.CreateGroupResponseType.Raw, CommonApi.CreateGroupResponseType diff --git a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseType.js b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseType.js index 875bf973ef8..53930aacfd3 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseType.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateGroupResponseType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateGroupResponseType = core.serialization.enum_([ 'chain', 'dao', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicRequestWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateTopicRequestWeightedVoting.d.ts index 3d41bfe0ca0..e3457b373ce 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicRequestWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicRequestWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateTopicRequestWeightedVoting: core.serialization.Schema< serializers.CreateTopicRequestWeightedVoting.Raw, CommonApi.CreateTopicRequestWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicRequestWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/CreateTopicRequestWeightedVoting.js index 68b3996d283..a21439f77ce 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicRequestWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicRequestWeightedVoting.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateTopicRequestWeightedVoting = core.serialization.enum_([ 'stake', 'erc20', diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponse.d.ts index 4cfeb7bdcbc..446b164eba3 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponse.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateTopicResponseTopic } from './CreateTopicResponseTopic'; - export declare const CreateTopicResponse: core.serialization.ObjectSchema< serializers.CreateTopicResponse.Raw, CommonApi.CreateTopicResponse diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponse.js b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponse.js index 2b9f023d141..4ef34c104f1 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponse.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateTopicResponseTopic } from './CreateTopicResponseTopic'; - export const CreateTopicResponse = core.serialization.object({ topic: CreateTopicResponseTopic, userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopic.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopic.d.ts index 11d315e08fe..1f567b9dab4 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopic.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopic.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateTopicResponseTopicContestTopicsItem } from './CreateTopicResponseTopicContestTopicsItem'; import { CreateTopicResponseTopicWeightedVoting } from './CreateTopicResponseTopicWeightedVoting'; - export declare const CreateTopicResponseTopic: core.serialization.ObjectSchema< serializers.CreateTopicResponseTopic.Raw, CommonApi.CreateTopicResponseTopic diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopic.js b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopic.js index 83ee274af38..d113c146bbb 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopic.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopic.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateTopicResponseTopicContestTopicsItem } from './CreateTopicResponseTopicContestTopicsItem'; import { CreateTopicResponseTopicWeightedVoting } from './CreateTopicResponseTopicWeightedVoting'; - export const CreateTopicResponseTopic = core.serialization.object({ id: core.serialization.number().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicContestTopicsItem.d.ts index f7b9e91315f..57a0faf6211 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateTopicResponseTopicContestTopicsItem: core.serialization.ObjectSchema< serializers.CreateTopicResponseTopicContestTopicsItem.Raw, CommonApi.CreateTopicResponseTopicContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicContestTopicsItem.js index 953494789c1..20c9229c023 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateTopicResponseTopicContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicWeightedVoting.d.ts index 472092836d4..29dcf78cb93 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateTopicResponseTopicWeightedVoting: core.serialization.Schema< serializers.CreateTopicResponseTopicWeightedVoting.Raw, CommonApi.CreateTopicResponseTopicWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicWeightedVoting.js index 8e56dc167d7..793691d3557 100644 --- a/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/CreateTopicResponseTopicWeightedVoting.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateTopicResponseTopicWeightedVoting = core.serialization.enum_([ 'stake', 'erc20', diff --git a/libs/api-client/src/serialization/resources/community/types/DeleteGroupResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/DeleteGroupResponse.d.ts index 62cd4801671..ca0759e9def 100644 --- a/libs/api-client/src/serialization/resources/community/types/DeleteGroupResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/DeleteGroupResponse.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const DeleteGroupResponse: core.serialization.ObjectSchema< serializers.DeleteGroupResponse.Raw, CommonApi.DeleteGroupResponse diff --git a/libs/api-client/src/serialization/resources/community/types/DeleteGroupResponse.js b/libs/api-client/src/serialization/resources/community/types/DeleteGroupResponse.js index ed30d479476..24ad2d0c308 100644 --- a/libs/api-client/src/serialization/resources/community/types/DeleteGroupResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/DeleteGroupResponse.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const DeleteGroupResponse = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/community/types/DeleteTopicResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/DeleteTopicResponse.d.ts index ec91a54455d..c2b5a908071 100644 --- a/libs/api-client/src/serialization/resources/community/types/DeleteTopicResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/DeleteTopicResponse.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const DeleteTopicResponse: core.serialization.ObjectSchema< serializers.DeleteTopicResponse.Raw, CommonApi.DeleteTopicResponse diff --git a/libs/api-client/src/serialization/resources/community/types/DeleteTopicResponse.js b/libs/api-client/src/serialization/resources/community/types/DeleteTopicResponse.js index 79eb8c85585..1e3d8d21a9a 100644 --- a/libs/api-client/src/serialization/resources/community/types/DeleteTopicResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/DeleteTopicResponse.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const DeleteTopicResponse = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestBase.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestBase.d.ts index 9fa44474a4c..ed900c180dd 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestBase.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestBase.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesRequestBase: core.serialization.Schema< serializers.GetCommunitiesRequestBase.Raw, CommonApi.GetCommunitiesRequestBase diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestBase.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestBase.js index 4543b6d9c47..9001ee18dc4 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestBase.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestBase.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesRequestBase = core.serialization.enum_([ 'cosmos', 'substrate', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestNetwork.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestNetwork.d.ts index 3375f448f5c..40115153378 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestNetwork.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestNetwork.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesRequestNetwork: core.serialization.Schema< serializers.GetCommunitiesRequestNetwork.Raw, CommonApi.GetCommunitiesRequestNetwork diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestNetwork.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestNetwork.js index 87a0acb6dbb..783488c499c 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestNetwork.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestNetwork.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesRequestNetwork = core.serialization.enum_([ 'ethereum', 'erc20', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderBy.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderBy.d.ts index d2153a9485d..235720dede9 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderBy.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderBy.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesRequestOrderBy: core.serialization.Schema< serializers.GetCommunitiesRequestOrderBy.Raw, CommonApi.GetCommunitiesRequestOrderBy diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderBy.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderBy.js index 699e6678c0e..c5a1fdb91eb 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderBy.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderBy.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesRequestOrderBy = core.serialization.enum_([ 'profile_count', 'lifetime_thread_count', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderDirection.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderDirection.d.ts index 36bf1be28a1..47700a47af5 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderDirection.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderDirection.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesRequestOrderDirection: core.serialization.Schema< serializers.GetCommunitiesRequestOrderDirection.Raw, CommonApi.GetCommunitiesRequestOrderDirection diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderDirection.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderDirection.js index 537ec0b3afe..d8f6aaa1b4b 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderDirection.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestOrderDirection.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesRequestOrderDirection = core.serialization.enum_([ 'ASC', 'DESC', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestRelevanceBy.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestRelevanceBy.d.ts index 22402f3fb58..7f08056c953 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestRelevanceBy.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestRelevanceBy.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesRequestRelevanceBy: core.serialization.Schema< serializers.GetCommunitiesRequestRelevanceBy.Raw, CommonApi.GetCommunitiesRequestRelevanceBy diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestRelevanceBy.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestRelevanceBy.js index 82d8330f44e..7d6ae02b931 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestRelevanceBy.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesRequestRelevanceBy.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesRequestRelevanceBy = core.serialization.enum_([ 'tag_ids', 'membership', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponse.d.ts index 261fa8152a3..b30b3a86d1a 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponse.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItem } from './GetCommunitiesResponseResultsItem'; - export declare const GetCommunitiesResponse: core.serialization.ObjectSchema< serializers.GetCommunitiesResponse.Raw, CommonApi.GetCommunitiesResponse diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponse.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponse.js index 3a2dafb1379..7923e8ce3cf 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponse.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItem } from './GetCommunitiesResponseResultsItem'; - export const GetCommunitiesResponse = core.serialization.object({ limit: core.serialization.number(), page: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItem.d.ts index 8b0255a7436..833d8cbbaad 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItem.d.ts @@ -17,7 +17,6 @@ import { GetCommunitiesResponseResultsItemSocialLinksItem } from './GetCommuniti import { GetCommunitiesResponseResultsItemTerms } from './GetCommunitiesResponseResultsItemTerms'; import { GetCommunitiesResponseResultsItemTopicsItem } from './GetCommunitiesResponseResultsItemTopicsItem'; import { GetCommunitiesResponseResultsItemType } from './GetCommunitiesResponseResultsItemType'; - export declare const GetCommunitiesResponseResultsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItem.Raw, CommonApi.GetCommunitiesResponseResultsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItem.js index 30ef01608d3..bb8dd6d4141 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItem.js @@ -15,7 +15,6 @@ import { GetCommunitiesResponseResultsItemSocialLinksItem } from './GetCommuniti import { GetCommunitiesResponseResultsItemTerms } from './GetCommunitiesResponseResultsItemTerms'; import { GetCommunitiesResponseResultsItemTopicsItem } from './GetCommunitiesResponseResultsItemTopicsItem'; import { GetCommunitiesResponseResultsItemType } from './GetCommunitiesResponseResultsItemType'; - export const GetCommunitiesResponseResultsItem = core.serialization.object({ id: core.serialization.string(), name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.d.ts index 1ac316144d0..9a3ec309498 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemAddressesItemRole } from './GetCommunitiesResponseResultsItemAddressesItemRole'; import { GetCommunitiesResponseResultsItemAddressesItemUser } from './GetCommunitiesResponseResultsItemAddressesItemUser'; import { GetCommunitiesResponseResultsItemAddressesItemWalletId } from './GetCommunitiesResponseResultsItemAddressesItemWalletId'; - export declare const GetCommunitiesResponseResultsItemAddressesItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemAddressesItem.Raw, CommonApi.GetCommunitiesResponseResultsItemAddressesItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.js index 7e552436182..09bfa2e5c3f 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemAddressesItemRole } from './GetCommunitiesResponseResultsItemAddressesItemRole'; import { GetCommunitiesResponseResultsItemAddressesItemUser } from './GetCommunitiesResponseResultsItemAddressesItemUser'; import { GetCommunitiesResponseResultsItemAddressesItemWalletId } from './GetCommunitiesResponseResultsItemAddressesItemWalletId'; - export const GetCommunitiesResponseResultsItemAddressesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemRole.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemRole.d.ts index 18531512510..076d841595b 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemAddressesItemRole: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemAddressesItemRole.Raw, CommonApi.GetCommunitiesResponseResultsItemAddressesItemRole diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemRole.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemRole.js index 264a07af1ab..08be374a4d7 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemRole.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemAddressesItemRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.d.ts index 85e607ad1a0..05013597ab8 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.d.ts @@ -8,7 +8,6 @@ import { GetCommunitiesResponseResultsItemAddressesItemUserApiKey } from './GetC import { GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval } from './GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval'; import { GetCommunitiesResponseResultsItemAddressesItemUserProfile } from './GetCommunitiesResponseResultsItemAddressesItemUserProfile'; import { GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem } from './GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem'; - export declare const GetCommunitiesResponseResultsItemAddressesItemUser: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemAddressesItemUser.Raw, CommonApi.GetCommunitiesResponseResultsItemAddressesItemUser diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.js index 04f2a61f785..71b95b39071 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUser.js @@ -6,7 +6,6 @@ import { GetCommunitiesResponseResultsItemAddressesItemUserApiKey } from './GetC import { GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval } from './GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval'; import { GetCommunitiesResponseResultsItemAddressesItemUserProfile } from './GetCommunitiesResponseResultsItemAddressesItemUserProfile'; import { GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem } from './GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem'; - export const GetCommunitiesResponseResultsItemAddressesItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..6a99a68814f --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetCommunitiesResponseResultsItemAddressesItemUserApiKey: core.serialization.ObjectSchema< + serializers.GetCommunitiesResponseResultsItemAddressesItemUserApiKey.Raw, + CommonApi.GetCommunitiesResponseResultsItemAddressesItemUserApiKey +>; +export declare namespace GetCommunitiesResponseResultsItemAddressesItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.js new file mode 100644 index 00000000000..7d97e8b6a70 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetCommunitiesResponseResultsItemAddressesItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval.d.ts index 1bf49fc53c9..3086734294c 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval.Raw, CommonApi.GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval.js index 5630ea47aff..539f4176071 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemAddressesItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.d.ts index 56083490835..6e35ce389c1 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage } from './GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage'; - export declare const GetCommunitiesResponseResultsItemAddressesItemUserProfile: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemAddressesItemUserProfile.Raw, CommonApi.GetCommunitiesResponseResultsItemAddressesItemUserProfile diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.js index 4015a6c304d..ad05484ef88 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage } from './GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage'; - export const GetCommunitiesResponseResultsItemAddressesItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage.d.ts index 206aa775f5f..6249f1e393a 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage.Raw, CommonApi.GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage.js index 53e14df950d..d8665570817 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemAddressesItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem.d.ts index e0ae0cff2e0..e8a2f037d2b 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem.js index 65f801b6762..b285389900d 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemAddressesItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemWalletId.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemWalletId.d.ts index c81108d9251..215a6193e59 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemAddressesItemWalletId: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemAddressesItemWalletId.Raw, CommonApi.GetCommunitiesResponseResultsItemAddressesItemWalletId diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemWalletId.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemWalletId.js index 4806caed595..13a21c7f457 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemWalletId.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemAddressesItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemAddressesItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemBase.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemBase.d.ts index 00ac27c58b7..69a08135ed9 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemBase.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemBase.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemBase: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemBase.Raw, CommonApi.GetCommunitiesResponseResultsItemBase diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemBase.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemBase.js index 505ef30b561..c64689cf467 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemBase.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemBase.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemBase = core.serialization.enum_([ 'cosmos', 'substrate', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNode.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNode.d.ts index 0aac06b997f..fdbd39eb552 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNode.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNode.d.ts @@ -8,7 +8,6 @@ import { GetCommunitiesResponseResultsItemChainNodeBalanceType } from './GetComm import { GetCommunitiesResponseResultsItemChainNodeContractsItem } from './GetCommunitiesResponseResultsItemChainNodeContractsItem'; import { GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion } from './GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion'; import { GetCommunitiesResponseResultsItemChainNodeHealth } from './GetCommunitiesResponseResultsItemChainNodeHealth'; - export declare const GetCommunitiesResponseResultsItemChainNode: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemChainNode.Raw, CommonApi.GetCommunitiesResponseResultsItemChainNode diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNode.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNode.js index f5cd29f02d4..02c915a259b 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNode.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNode.js @@ -6,7 +6,6 @@ import { GetCommunitiesResponseResultsItemChainNodeBalanceType } from './GetComm import { GetCommunitiesResponseResultsItemChainNodeContractsItem } from './GetCommunitiesResponseResultsItemChainNodeContractsItem'; import { GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion } from './GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion'; import { GetCommunitiesResponseResultsItemChainNodeHealth } from './GetCommunitiesResponseResultsItemChainNodeHealth'; - export const GetCommunitiesResponseResultsItemChainNode = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeBalanceType.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeBalanceType.d.ts index 71043ce7043..a832f4908ae 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeBalanceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeBalanceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemChainNodeBalanceType: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemChainNodeBalanceType.Raw, CommonApi.GetCommunitiesResponseResultsItemChainNodeBalanceType diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeBalanceType.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeBalanceType.js index 4247cf80189..9b328fd9ca3 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeBalanceType.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeBalanceType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemChainNodeBalanceType = core.serialization.enum_([ 'terra', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeContractsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeContractsItem.d.ts index f117546c80a..708f8548f4e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeContractsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeContractsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemChainNodeContractsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemChainNodeContractsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemChainNodeContractsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeContractsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeContractsItem.js index 4e43fc865cd..ec7412e4d00 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeContractsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeContractsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemChainNodeContractsItem = core.serialization.object({ id: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion.d.ts index 8d6d27e85f8..6a6724cab9d 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion.Raw, CommonApi.GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion.js index 4300e913a28..2c86362b459 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemChainNodeCosmosGovVersion = core.serialization.enum_([ 'v1', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeHealth.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeHealth.d.ts index f63e13c92ea..f90c2fdd84c 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeHealth.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeHealth.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemChainNodeHealth: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemChainNodeHealth.Raw, CommonApi.GetCommunitiesResponseResultsItemChainNodeHealth diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeHealth.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeHealth.js index bf299f25868..375cc8d419a 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeHealth.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemChainNodeHealth.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemChainNodeHealth = core.serialization.enum_(['failed', 'healthy']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.d.ts index 118b931bbac..854cd284b02 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem } from './GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem'; - export declare const GetCommunitiesResponseResultsItemCommunityStakesItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemCommunityStakesItem.Raw, CommonApi.GetCommunitiesResponseResultsItemCommunityStakesItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.js index 4c761f08d00..0c55dd25adb 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem } from './GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem'; - export const GetCommunitiesResponseResultsItemCommunityStakesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.d.ts index 52f18d307df..79259693308 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection } from './GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection'; - export declare const GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.js index 07f95489e6c..654dd371ce2 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection } from './GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection'; - export const GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItem = core.serialization.object({ transactionHash: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts index 74185cfe1d2..819d6b5ab01 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection.Raw, CommonApi.GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection.js index e5d3e5849c9..9fb2f282ca8 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemCommunityStakesItemStakeTransactionsItemStakeDirection = core.serialization.enum_(['buy', 'sell']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.d.ts index c4844b09059..1b477b9445f 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemCommunityTagsItemTag } from './GetCommunitiesResponseResultsItemCommunityTagsItemTag'; - export declare const GetCommunitiesResponseResultsItemCommunityTagsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemCommunityTagsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemCommunityTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.js index 4c734235867..d67c7de4ffc 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemCommunityTagsItemTag } from './GetCommunitiesResponseResultsItemCommunityTagsItemTag'; - export const GetCommunitiesResponseResultsItemCommunityTagsItem = core.serialization.object({ communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItemTag.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItemTag.d.ts index 237047ad067..c14842dd03e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItemTag.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItemTag.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemCommunityTagsItemTag: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemCommunityTagsItemTag.Raw, CommonApi.GetCommunitiesResponseResultsItemCommunityTagsItemTag diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItemTag.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItemTag.js index 96c74c826fb..1fd22b4f0f4 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItemTag.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemCommunityTagsItemTag.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemCommunityTagsItemTag = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.d.ts index 415d60c1da9..a1203998d70 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemContestManagersItemContestsItem } from './GetCommunitiesResponseResultsItemContestManagersItemContestsItem'; import { GetCommunitiesResponseResultsItemContestManagersItemTopicsItem } from './GetCommunitiesResponseResultsItemContestManagersItemTopicsItem'; - export declare const GetCommunitiesResponseResultsItemContestManagersItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemContestManagersItem.Raw, CommonApi.GetCommunitiesResponseResultsItemContestManagersItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.js index 9b987f3f42e..7fd418aca2d 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemContestManagersItemContestsItem } from './GetCommunitiesResponseResultsItemContestManagersItemContestsItem'; import { GetCommunitiesResponseResultsItemContestManagersItemTopicsItem } from './GetCommunitiesResponseResultsItemContestManagersItemTopicsItem'; - export const GetCommunitiesResponseResultsItemContestManagersItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.d.ts index 9c4908e0693..aa2ae9df9b0 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem } from './GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem'; import { GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem } from './GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem'; - export declare const GetCommunitiesResponseResultsItemContestManagersItemContestsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemContestManagersItemContestsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemContestManagersItemContestsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.js index 6e3857372e7..123fd1a55bb 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem } from './GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem'; import { GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem } from './GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem'; - export const GetCommunitiesResponseResultsItemContestManagersItemContestsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.d.ts index ea767bf1bcb..62c896be868 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction } from './GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction'; - export declare const GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.js index 90a2a4d6a8b..f6d79287da4 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction } from './GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction'; - export const GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction.d.ts index 28f19613e5e..2e364dff533 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction.Raw, CommonApi.GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction.js index 2a36a99a514..9186a64b5c0 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemContestManagersItemContestsItemActionsItemAction = core.serialization.enum_(['added', 'upvoted']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem.d.ts index 75261b0090d..13db6caaff2 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem.Raw, CommonApi.GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem.js index 897050ba497..fd647126ea2 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemContestManagersItemContestsItemScoreItem = core.serialization.object({ creatorAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.d.ts index af6e68113f5..a3fd097f1f4 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem } from './GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem'; import { GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting } from './GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting'; - export declare const GetCommunitiesResponseResultsItemContestManagersItemTopicsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemContestManagersItemTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.js index 841d29963d0..3ba42340b73 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem } from './GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem'; import { GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting } from './GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting'; - export const GetCommunitiesResponseResultsItemContestManagersItemTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem.d.ts index b48f4e7c2ab..d49d86c5d0e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem.js index 204f6e968be..e84494487a0 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemContestManagersItemTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting.d.ts index e8f670ae497..80eec592ac1 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting.Raw, CommonApi.GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting.js index 62c374499f9..3730aa27509 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemContestManagersItemTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemDefaultPage.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemDefaultPage.d.ts index dd580ce94ec..4ace839bb6e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemDefaultPage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemDefaultPage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemDefaultPage: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemDefaultPage.Raw, CommonApi.GetCommunitiesResponseResultsItemDefaultPage diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemDefaultPage.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemDefaultPage.js index fc42668c16e..5a8ffe31cf0 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemDefaultPage.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemDefaultPage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemDefaultPage = core.serialization.enum_([ 'default_all_discussions_view', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.d.ts index 4bc51fe0ffc..4203d6f6f47 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemGroupsItemMetadata } from './GetCommunitiesResponseResultsItemGroupsItemMetadata'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItem } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItem'; - export declare const GetCommunitiesResponseResultsItemGroupsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.js index c1bf6dac212..91ba799e4ba 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemGroupsItemMetadata } from './GetCommunitiesResponseResultsItemGroupsItemMetadata'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItem } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItem'; - export const GetCommunitiesResponseResultsItemGroupsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemMetadata.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemMetadata.d.ts index ac20c31f253..c35d74a354c 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemMetadata.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemMetadata.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemGroupsItemMetadata: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItemMetadata.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemMetadata diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemMetadata.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemMetadata.js index 484d90ec8f5..f3432f7f14f 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemMetadata.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemMetadata.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemGroupsItemMetadata = core.serialization.object({ name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.d.ts index fb353749c24..718cceae6b5 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItem: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItem @@ -15,12 +14,10 @@ export declare namespace GetCommunitiesResponseResultsItemGroupsItemRequirements type Raw = | GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.Threshold | GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.Allow; - interface Threshold extends GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.Raw { rule: 'threshold'; } - interface Allow extends GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.Raw { rule: 'allow'; diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.js index 826fe827f29..188bed24065 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItem = core.serialization .union('rule', { diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.d.ts index be8660dfbba..3ca4862ba1a 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.js index 0c5bf1238c4..42680444cb8 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllow = core.serialization.object({ data: GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData, diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData.d.ts index d4e28b3795d..96ff324b550 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData.js index 11f160a5058..6e920582d0e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemAllowData = core.serialization.object({ allow: core.serialization.list(core.serialization.string()), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.d.ts index c281e7003bb..b1f1e2e31c8 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.js index cb1a4531fcf..4d1cfde4888 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThreshold = core.serialization.object({ data: GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData, diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.d.ts index 61ecca8ad2e..7e59b2cdbd3 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.js index 33335153da6..9ba80199fc3 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdData = core.serialization.object({ threshold: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.d.ts index 7a69feca6a4..23953c45432 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -8,7 +8,6 @@ import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDat import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.js index 1292d0c033f..b9d05d6b764 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource.js @@ -6,7 +6,6 @@ import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDat import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSource = core.serialization.undiscriminatedUnion([ GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId, diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne.d.ts index 8c1d30a280e..57c3b15641f 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne.js index 0dc44b6a6c3..1f1aac15bbb 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceOne = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index a5979a8a64f..7888fcf2075 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.js index edc24754c06..141d8428af1 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThree = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts index 33ebddc35c1..c4adf9b8a55 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js index 8ca70092737..03341b35041 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceThreeSourceType = core.serialization.enum_(['cw721', 'cw20']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index 9ff27d83f65..74fa6194bbd 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.js index 8c880e10efb..1441d888735 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenId = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts index 6d399bc3cc0..3a27ae5570a 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js index d73ff92668f..16026e0a1c6 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType = core.serialization.enum_(['erc20', 'erc721', 'erc1155', 'spl']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts index 459d807db35..13a3349a15c 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.Raw, CommonApi.GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js index 4552f3d3c1e..e8b3320d34f 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemGroupsItemRequirementsItemThresholdDataSourceTokenSymbol = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemHasHomepage.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemHasHomepage.d.ts index d7cf04b3a50..f26f0ea58a3 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemHasHomepage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemHasHomepage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemHasHomepage: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemHasHomepage.Raw, CommonApi.GetCommunitiesResponseResultsItemHasHomepage diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemHasHomepage.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemHasHomepage.js index b568475566b..cd6de5f6172 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemHasHomepage.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemHasHomepage.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemHasHomepage = core.serialization.enum_(['true', 'false']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemSocialLinksItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemSocialLinksItem.d.ts index bdb528705d6..e0575a2e811 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemSocialLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemSocialLinksItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemSocialLinksItem: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemSocialLinksItem.Raw, CommonApi.GetCommunitiesResponseResultsItemSocialLinksItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemSocialLinksItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemSocialLinksItem.js index 90349c2655f..bad29bdbddb 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemSocialLinksItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemSocialLinksItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemSocialLinksItem = core.serialization.undiscriminatedUnion([ core.serialization.unknown(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTerms.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTerms.d.ts index 638a227c3ff..b15616ece51 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTerms.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTerms.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemTermsZero } from './GetCommunitiesResponseResultsItemTermsZero'; - export declare const GetCommunitiesResponseResultsItemTerms: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemTerms.Raw, CommonApi.GetCommunitiesResponseResultsItemTerms diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTerms.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTerms.js index 23745f99023..86c658985e7 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTerms.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTerms.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemTermsZero } from './GetCommunitiesResponseResultsItemTermsZero'; - export const GetCommunitiesResponseResultsItemTerms = core.serialization.undiscriminatedUnion([ GetCommunitiesResponseResultsItemTermsZero, diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTermsZero.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTermsZero.d.ts index b3890d5f1eb..c07c5ba46af 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTermsZero.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTermsZero.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemTermsZero: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemTermsZero.Raw, CommonApi.GetCommunitiesResponseResultsItemTermsZero diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTermsZero.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTermsZero.js index 2fc05336e33..61870a9203d 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTermsZero.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTermsZero.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemTermsZero = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.d.ts index f5022927eda..6ca1ee6ebfe 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem } from './GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem'; import { GetCommunitiesResponseResultsItemTopicsItemWeightedVoting } from './GetCommunitiesResponseResultsItemTopicsItemWeightedVoting'; - export declare const GetCommunitiesResponseResultsItemTopicsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemTopicsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.js index ec809906b85..6a8eecc00ba 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem } from './GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem'; import { GetCommunitiesResponseResultsItemTopicsItemWeightedVoting } from './GetCommunitiesResponseResultsItemTopicsItemWeightedVoting'; - export const GetCommunitiesResponseResultsItemTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem.d.ts index 5c76c9dac08..b64a7506759 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem.Raw, CommonApi.GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem.js index 11428643782..cb5495cc1d0 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemWeightedVoting.d.ts index 50f32ea5d2b..96e43b9a245 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemTopicsItemWeightedVoting: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemTopicsItemWeightedVoting.Raw, CommonApi.GetCommunitiesResponseResultsItemTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemWeightedVoting.js index c069ddf4efc..5e1fa75ecd6 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemType.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemType.d.ts index 7dfd83b2ce1..d9c56f9be0e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunitiesResponseResultsItemType: core.serialization.Schema< serializers.GetCommunitiesResponseResultsItemType.Raw, CommonApi.GetCommunitiesResponseResultsItemType diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemType.js b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemType.js index 3601a9f70e9..e7f30b29146 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemType.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunitiesResponseResultsItemType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunitiesResponseResultsItemType = core.serialization.enum_([ 'chain', 'dao', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponse.d.ts index ba64add0d0f..98327463396 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponse.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddresses } from './GetCommunityResponseAddresses'; - export declare const GetCommunityResponse: core.serialization.Schema< serializers.GetCommunityResponse.Raw, CommonApi.GetCommunityResponse diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponse.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponse.js index 0fc44bdfb19..5670e57e976 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponse.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddresses } from './GetCommunityResponseAddresses'; - export const GetCommunityResponse = core.serialization.undiscriminatedUnion([ GetCommunityResponseAddresses, core.serialization.unknown(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddresses.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddresses.d.ts index 5d2745b2291..6e0259de8f7 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddresses.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddresses.d.ts @@ -18,7 +18,6 @@ import { GetCommunityResponseAddressesSocialLinksItem } from './GetCommunityResp import { GetCommunityResponseAddressesTerms } from './GetCommunityResponseAddressesTerms'; import { GetCommunityResponseAddressesTopicsItem } from './GetCommunityResponseAddressesTopicsItem'; import { GetCommunityResponseAddressesType } from './GetCommunityResponseAddressesType'; - export declare const GetCommunityResponseAddresses: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddresses.Raw, CommonApi.GetCommunityResponseAddresses diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddresses.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddresses.js index d49a1929dea..116418bac61 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddresses.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddresses.js @@ -16,7 +16,6 @@ import { GetCommunityResponseAddressesSocialLinksItem } from './GetCommunityResp import { GetCommunityResponseAddressesTerms } from './GetCommunityResponseAddressesTerms'; import { GetCommunityResponseAddressesTopicsItem } from './GetCommunityResponseAddressesTopicsItem'; import { GetCommunityResponseAddressesType } from './GetCommunityResponseAddressesType'; - export const GetCommunityResponseAddresses = core.serialization.object({ id: core.serialization.string(), name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItem.d.ts index 103c9e6c048..4acb84c56ee 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { GetCommunityResponseAddressesAddressesItemRole } from './GetCommunityResponseAddressesAddressesItemRole'; import { GetCommunityResponseAddressesAddressesItemUser } from './GetCommunityResponseAddressesAddressesItemUser'; import { GetCommunityResponseAddressesAddressesItemWalletId } from './GetCommunityResponseAddressesAddressesItemWalletId'; - export declare const GetCommunityResponseAddressesAddressesItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesAddressesItem.Raw, CommonApi.GetCommunityResponseAddressesAddressesItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItem.js index b63b936a8df..5e13044971d 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { GetCommunityResponseAddressesAddressesItemRole } from './GetCommunityResponseAddressesAddressesItemRole'; import { GetCommunityResponseAddressesAddressesItemUser } from './GetCommunityResponseAddressesAddressesItemUser'; import { GetCommunityResponseAddressesAddressesItemWalletId } from './GetCommunityResponseAddressesAddressesItemWalletId'; - export const GetCommunityResponseAddressesAddressesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemRole.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemRole.d.ts index c63a9f2546e..cfa73c64cdd 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesAddressesItemRole: core.serialization.Schema< serializers.GetCommunityResponseAddressesAddressesItemRole.Raw, CommonApi.GetCommunityResponseAddressesAddressesItemRole diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemRole.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemRole.js index c5756d5fe5a..0f3e0ce24d6 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemRole.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesAddressesItemRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.d.ts index 90b08c0192c..773d518d4d4 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.d.ts @@ -8,7 +8,6 @@ import { GetCommunityResponseAddressesAddressesItemUserApiKey } from './GetCommu import { GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval } from './GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval'; import { GetCommunityResponseAddressesAddressesItemUserProfile } from './GetCommunityResponseAddressesAddressesItemUserProfile'; import { GetCommunityResponseAddressesAddressesItemUserProfileTagsItem } from './GetCommunityResponseAddressesAddressesItemUserProfileTagsItem'; - export declare const GetCommunityResponseAddressesAddressesItemUser: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesAddressesItemUser.Raw, CommonApi.GetCommunityResponseAddressesAddressesItemUser diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.js index c3109f8c2b5..6aa255a4aac 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUser.js @@ -6,7 +6,6 @@ import { GetCommunityResponseAddressesAddressesItemUserApiKey } from './GetCommu import { GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval } from './GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval'; import { GetCommunityResponseAddressesAddressesItemUserProfile } from './GetCommunityResponseAddressesAddressesItemUserProfile'; import { GetCommunityResponseAddressesAddressesItemUserProfileTagsItem } from './GetCommunityResponseAddressesAddressesItemUserProfileTagsItem'; - export const GetCommunityResponseAddressesAddressesItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..1934039a258 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetCommunityResponseAddressesAddressesItemUserApiKey: core.serialization.ObjectSchema< + serializers.GetCommunityResponseAddressesAddressesItemUserApiKey.Raw, + CommonApi.GetCommunityResponseAddressesAddressesItemUserApiKey +>; +export declare namespace GetCommunityResponseAddressesAddressesItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.js new file mode 100644 index 00000000000..e4dd6e86cab --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetCommunityResponseAddressesAddressesItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval.d.ts index 94f25ed9d3d..1aa50cc51bb 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval: core.serialization.Schema< serializers.GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval.Raw, CommonApi.GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval.js index 62701822c9f..65360315306 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesAddressesItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.d.ts index 26bab1c4576..43b10bd1c24 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage } from './GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage'; - export declare const GetCommunityResponseAddressesAddressesItemUserProfile: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesAddressesItemUserProfile.Raw, CommonApi.GetCommunityResponseAddressesAddressesItemUserProfile diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.js index e4d6cdc92dd..b3360286f21 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage } from './GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage'; - export const GetCommunityResponseAddressesAddressesItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage.d.ts index 37c433f7906..2b4193946e8 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage.Raw, CommonApi.GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage.js index fd793a6de47..84c50e027b6 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesAddressesItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileTagsItem.d.ts index 3a5de246670..eab6f429a65 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesAddressesItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesAddressesItemUserProfileTagsItem.Raw, CommonApi.GetCommunityResponseAddressesAddressesItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileTagsItem.js index fbad88c2cf7..bf23b4b5d54 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesAddressesItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemWalletId.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemWalletId.d.ts index 42154825b2c..299d204f969 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesAddressesItemWalletId: core.serialization.Schema< serializers.GetCommunityResponseAddressesAddressesItemWalletId.Raw, CommonApi.GetCommunityResponseAddressesAddressesItemWalletId diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemWalletId.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemWalletId.js index 0dd6b2c972a..e07bdcfaf15 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemWalletId.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAddressesItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesAddressesItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.d.ts index ddeeb62775c..b1e013417fe 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesAdminsAndModsItemRole } from './GetCommunityResponseAddressesAdminsAndModsItemRole'; - export declare const GetCommunityResponseAddressesAdminsAndModsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesAdminsAndModsItem.Raw, CommonApi.GetCommunityResponseAddressesAdminsAndModsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.js index af184731dd1..4b8f5b3b372 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesAdminsAndModsItemRole } from './GetCommunityResponseAddressesAdminsAndModsItemRole'; - export const GetCommunityResponseAddressesAdminsAndModsItem = core.serialization.object({ address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItemRole.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItemRole.d.ts index 109fc9d0623..ee5dce91a84 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesAdminsAndModsItemRole: core.serialization.Schema< serializers.GetCommunityResponseAddressesAdminsAndModsItemRole.Raw, CommonApi.GetCommunityResponseAddressesAdminsAndModsItemRole diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItemRole.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItemRole.js index bc7e1d669ab..6826e1131cb 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItemRole.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesAdminsAndModsItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesAdminsAndModsItemRole = core.serialization.enum_(['admin', 'moderator']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesBase.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesBase.d.ts index 78857fa3a8d..62886906ab5 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesBase.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesBase.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesBase: core.serialization.Schema< serializers.GetCommunityResponseAddressesBase.Raw, CommonApi.GetCommunityResponseAddressesBase diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesBase.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesBase.js index 14ca23d63b2..62464caffcf 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesBase.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesBase.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesBase = core.serialization.enum_([ 'cosmos', 'substrate', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNode.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNode.d.ts index 8298a4e574b..4347d52586d 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNode.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNode.d.ts @@ -8,7 +8,6 @@ import { GetCommunityResponseAddressesChainNodeBalanceType } from './GetCommunit import { GetCommunityResponseAddressesChainNodeContractsItem } from './GetCommunityResponseAddressesChainNodeContractsItem'; import { GetCommunityResponseAddressesChainNodeCosmosGovVersion } from './GetCommunityResponseAddressesChainNodeCosmosGovVersion'; import { GetCommunityResponseAddressesChainNodeHealth } from './GetCommunityResponseAddressesChainNodeHealth'; - export declare const GetCommunityResponseAddressesChainNode: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesChainNode.Raw, CommonApi.GetCommunityResponseAddressesChainNode diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNode.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNode.js index e0dd42f50c9..9a78a3ee619 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNode.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNode.js @@ -6,7 +6,6 @@ import { GetCommunityResponseAddressesChainNodeBalanceType } from './GetCommunit import { GetCommunityResponseAddressesChainNodeContractsItem } from './GetCommunityResponseAddressesChainNodeContractsItem'; import { GetCommunityResponseAddressesChainNodeCosmosGovVersion } from './GetCommunityResponseAddressesChainNodeCosmosGovVersion'; import { GetCommunityResponseAddressesChainNodeHealth } from './GetCommunityResponseAddressesChainNodeHealth'; - export const GetCommunityResponseAddressesChainNode = core.serialization.object( { id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeBalanceType.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeBalanceType.d.ts index 7e065e03832..414aca009bc 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeBalanceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeBalanceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesChainNodeBalanceType: core.serialization.Schema< serializers.GetCommunityResponseAddressesChainNodeBalanceType.Raw, CommonApi.GetCommunityResponseAddressesChainNodeBalanceType diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeBalanceType.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeBalanceType.js index 2177de133cb..93379e97add 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeBalanceType.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeBalanceType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesChainNodeBalanceType = core.serialization.enum_([ 'terra', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeContractsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeContractsItem.d.ts index 488b1f24230..5560713fdd8 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeContractsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeContractsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesChainNodeContractsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesChainNodeContractsItem.Raw, CommonApi.GetCommunityResponseAddressesChainNodeContractsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeContractsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeContractsItem.js index 9c2144d3bbe..62043d6d436 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeContractsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeContractsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesChainNodeContractsItem = core.serialization.object({ id: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeCosmosGovVersion.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeCosmosGovVersion.d.ts index d77c0068498..2124f2e0397 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeCosmosGovVersion.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeCosmosGovVersion.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesChainNodeCosmosGovVersion: core.serialization.Schema< serializers.GetCommunityResponseAddressesChainNodeCosmosGovVersion.Raw, CommonApi.GetCommunityResponseAddressesChainNodeCosmosGovVersion diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeCosmosGovVersion.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeCosmosGovVersion.js index a21fbd7df5f..34e3f813394 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeCosmosGovVersion.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeCosmosGovVersion.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesChainNodeCosmosGovVersion = core.serialization.enum_([ 'v1', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeHealth.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeHealth.d.ts index d18a3f3ec4d..df475f6b152 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeHealth.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeHealth.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesChainNodeHealth: core.serialization.Schema< serializers.GetCommunityResponseAddressesChainNodeHealth.Raw, CommonApi.GetCommunityResponseAddressesChainNodeHealth diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeHealth.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeHealth.js index 576f2f795eb..c1c9a2a92b9 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeHealth.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesChainNodeHealth.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesChainNodeHealth = core.serialization.enum_(['failed', 'healthy']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.d.ts index 79eefa19340..dc7a090e096 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem } from './GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem'; - export declare const GetCommunityResponseAddressesCommunityStakesItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesCommunityStakesItem.Raw, CommonApi.GetCommunityResponseAddressesCommunityStakesItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.js index cc239ad62a3..864b10fc3a6 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem } from './GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem'; - export const GetCommunityResponseAddressesCommunityStakesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.d.ts index ee74b7ad8f3..e0cb67e6642 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection } from './GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection'; - export declare const GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.Raw, CommonApi.GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.js index b0ebc10df76..dff92621c2a 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection } from './GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection'; - export const GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItem = core.serialization.object({ transactionHash: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts index 3c1c0403150..a18fac07cd2 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection: core.serialization.Schema< serializers.GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection.Raw, CommonApi.GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection.js index ca4f2fc198d..35a692c5097 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesCommunityStakesItemStakeTransactionsItemStakeDirection = core.serialization.enum_(['buy', 'sell']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.d.ts index ec770375192..08f2624173e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesCommunityTagsItemTag } from './GetCommunityResponseAddressesCommunityTagsItemTag'; - export declare const GetCommunityResponseAddressesCommunityTagsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesCommunityTagsItem.Raw, CommonApi.GetCommunityResponseAddressesCommunityTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.js index 7d1ee8c9fc3..4891beb7cf0 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesCommunityTagsItemTag } from './GetCommunityResponseAddressesCommunityTagsItemTag'; - export const GetCommunityResponseAddressesCommunityTagsItem = core.serialization.object({ communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItemTag.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItemTag.d.ts index 62fe21cdc65..339bd224afb 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItemTag.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItemTag.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesCommunityTagsItemTag: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesCommunityTagsItemTag.Raw, CommonApi.GetCommunityResponseAddressesCommunityTagsItemTag diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItemTag.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItemTag.js index 9a82d8fa763..a71f5fe16b5 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItemTag.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesCommunityTagsItemTag.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesCommunityTagsItemTag = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItem.d.ts index e795ea3ce0d..9988c69fb0a 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesContestManagersItemContestsItem } from './GetCommunityResponseAddressesContestManagersItemContestsItem'; import { GetCommunityResponseAddressesContestManagersItemTopicsItem } from './GetCommunityResponseAddressesContestManagersItemTopicsItem'; - export declare const GetCommunityResponseAddressesContestManagersItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesContestManagersItem.Raw, CommonApi.GetCommunityResponseAddressesContestManagersItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItem.js index 2c319f1e1f3..0f7d61654d6 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunityResponseAddressesContestManagersItemContestsItem } from './GetCommunityResponseAddressesContestManagersItemContestsItem'; import { GetCommunityResponseAddressesContestManagersItemTopicsItem } from './GetCommunityResponseAddressesContestManagersItemTopicsItem'; - export const GetCommunityResponseAddressesContestManagersItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.d.ts index 3d3c08375dc..10092fdb59e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem } from './GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem'; import { GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem } from './GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem'; - export declare const GetCommunityResponseAddressesContestManagersItemContestsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesContestManagersItemContestsItem.Raw, CommonApi.GetCommunityResponseAddressesContestManagersItemContestsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.js index 2c7ae98bc88..40859e5ec9e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem } from './GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem'; import { GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem } from './GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem'; - export const GetCommunityResponseAddressesContestManagersItemContestsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.d.ts index 05961371758..b504dcce42a 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction } from './GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction'; - export declare const GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.Raw, CommonApi.GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.js index 8e664f7e88a..18399009595 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction } from './GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction'; - export const GetCommunityResponseAddressesContestManagersItemContestsItemActionsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction.d.ts index 040d27f4f9e..e12ce5a3e16 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction: core.serialization.Schema< serializers.GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction.Raw, CommonApi.GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction.js index f07333eac6a..c51e979f30e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesContestManagersItemContestsItemActionsItemAction = core.serialization.enum_(['added', 'upvoted']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem.d.ts index f4d1eab5cf3..0d77005b547 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem.Raw, CommonApi.GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem.js index 12091033a58..9bd773d48f1 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesContestManagersItemContestsItemScoreItem = core.serialization.object({ creatorAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.d.ts index 04da4d1ea30..1144612278d 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem } from './GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem'; import { GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting } from './GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting'; - export declare const GetCommunityResponseAddressesContestManagersItemTopicsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesContestManagersItemTopicsItem.Raw, CommonApi.GetCommunityResponseAddressesContestManagersItemTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.js index a105fd02085..fb60ea80712 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem } from './GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem'; import { GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting } from './GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting'; - export const GetCommunityResponseAddressesContestManagersItemTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem.d.ts index db8e38248d2..d360f1d7ba2 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem.Raw, CommonApi.GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem.js index ddd3c3a3ea7..8bcf29a6da0 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesContestManagersItemTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting.d.ts index 4abaacd2d41..f45fc3e643e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting: core.serialization.Schema< serializers.GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting.Raw, CommonApi.GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting.js index 315ed76b437..aa8fde4d7cc 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesContestManagersItemTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesDefaultPage.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesDefaultPage.d.ts index ca95db9af16..40238afca57 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesDefaultPage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesDefaultPage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesDefaultPage: core.serialization.Schema< serializers.GetCommunityResponseAddressesDefaultPage.Raw, CommonApi.GetCommunityResponseAddressesDefaultPage diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesDefaultPage.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesDefaultPage.js index 2791329345b..10ab2d1efc8 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesDefaultPage.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesDefaultPage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesDefaultPage = core.serialization.enum_([ 'default_all_discussions_view', diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItem.d.ts index 59b6966ede6..a9d29615c4e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesGroupsItemMetadata } from './GetCommunityResponseAddressesGroupsItemMetadata'; import { GetCommunityResponseAddressesGroupsItemRequirementsItem } from './GetCommunityResponseAddressesGroupsItemRequirementsItem'; - export declare const GetCommunityResponseAddressesGroupsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItem.Raw, CommonApi.GetCommunityResponseAddressesGroupsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItem.js index 4953197c509..56969c80d53 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunityResponseAddressesGroupsItemMetadata } from './GetCommunityResponseAddressesGroupsItemMetadata'; import { GetCommunityResponseAddressesGroupsItemRequirementsItem } from './GetCommunityResponseAddressesGroupsItemRequirementsItem'; - export const GetCommunityResponseAddressesGroupsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemMetadata.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemMetadata.d.ts index d2f660193f9..b1ff4eb8941 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemMetadata.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemMetadata.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesGroupsItemMetadata: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItemMetadata.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemMetadata diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemMetadata.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemMetadata.js index e4fc7f2ab6c..6b347f827cf 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemMetadata.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemMetadata.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesGroupsItemMetadata = core.serialization.object({ name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.d.ts index 549f2c34d0d..74c91ad95cf 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemAllow } from './GetCommunityResponseAddressesGroupsItemRequirementsItemAllow'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItem: core.serialization.Schema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItem.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItem @@ -15,12 +14,10 @@ export declare namespace GetCommunityResponseAddressesGroupsItemRequirementsItem type Raw = | GetCommunityResponseAddressesGroupsItemRequirementsItem.Threshold | GetCommunityResponseAddressesGroupsItemRequirementsItem.Allow; - interface Threshold extends GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.Raw { rule: 'threshold'; } - interface Allow extends GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.Raw { rule: 'allow'; diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.js index 2541b48a282..274de6fcbea 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemAllow } from './GetCommunityResponseAddressesGroupsItemRequirementsItemAllow'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItem = core.serialization .union('rule', { diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.d.ts index 1247b18cb01..802c9e34184 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData } from './GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemAllow: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemAllow diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.js index 449bec13aea..846407e7b74 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllow.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData } from './GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemAllow = core.serialization.object({ data: GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData, diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData.d.ts index 41f04dd7dcf..8a1c408066f 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData.js index 5eed40e9bf2..5853d0e9954 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemAllowData = core.serialization.object({ allow: core.serialization.list(core.serialization.string()), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.d.ts index 752cfe8edb8..3b4f3d12734 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.js index 8964a179a82..f6c913b27e8 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemThreshold = core.serialization.object({ data: GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData, diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.d.ts index 9b8bdc2feec..4cf75e0ca19 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.js index d4dd4989ab0..c73f5d08984 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdData = core.serialization.object({ threshold: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.d.ts index 53514723855..f187ca169b3 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -8,7 +8,6 @@ import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSou import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource: core.serialization.Schema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.js index c12d49298f3..b3d1e3dd8bd 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource.js @@ -6,7 +6,6 @@ import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSou import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSource = core.serialization.undiscriminatedUnion([ GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId, diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne.d.ts index 15b1e8064ba..15627606fdb 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne.js index 4dfafb05f38..5e203061e5d 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceOne = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index 96d55eb25d5..792c8118237 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.js index fc93b075b8d..969883c912f 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThree = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts index b5089026b2f..526b35a104a 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType: core.serialization.Schema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js index ba257e53b91..a55b438b444 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceThreeSourceType = core.serialization.enum_(['cw721', 'cw20']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index 148aa56807d..b65d7662075 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.js index 035ea6e7020..3e61758d53e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenId = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts index 6bef97292c0..799ba9dd529 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType: core.serialization.Schema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js index 58cd32a6926..23518904f7f 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType = core.serialization.enum_(['erc20', 'erc721', 'erc1155', 'spl']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts index 615ac4dd850..514055b6bdd 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.Raw, CommonApi.GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js index 8b545cba8e6..a3fa43eb472 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesGroupsItemRequirementsItemThresholdDataSourceTokenSymbol = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesHasHomepage.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesHasHomepage.d.ts index c909473ac1f..f5ebcce80a3 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesHasHomepage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesHasHomepage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesHasHomepage: core.serialization.Schema< serializers.GetCommunityResponseAddressesHasHomepage.Raw, CommonApi.GetCommunityResponseAddressesHasHomepage diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesHasHomepage.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesHasHomepage.js index 13fdce06b2f..2a40ede9f95 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesHasHomepage.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesHasHomepage.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesHasHomepage = core.serialization.enum_(['true', 'false']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesSocialLinksItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesSocialLinksItem.d.ts index 6a03b3d2b40..a02bacb5e02 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesSocialLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesSocialLinksItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesSocialLinksItem: core.serialization.Schema< serializers.GetCommunityResponseAddressesSocialLinksItem.Raw, CommonApi.GetCommunityResponseAddressesSocialLinksItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesSocialLinksItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesSocialLinksItem.js index a5e19e13533..8b1af93b221 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesSocialLinksItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesSocialLinksItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesSocialLinksItem = core.serialization.undiscriminatedUnion([ core.serialization.unknown(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTerms.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTerms.d.ts index 2250e6b36d5..fdbb097549e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTerms.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTerms.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesTermsZero } from './GetCommunityResponseAddressesTermsZero'; - export declare const GetCommunityResponseAddressesTerms: core.serialization.Schema< serializers.GetCommunityResponseAddressesTerms.Raw, CommonApi.GetCommunityResponseAddressesTerms diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTerms.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTerms.js index 36d2ab287b2..dcd8bd1fe1c 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTerms.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTerms.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetCommunityResponseAddressesTermsZero } from './GetCommunityResponseAddressesTermsZero'; - export const GetCommunityResponseAddressesTerms = core.serialization.undiscriminatedUnion([ GetCommunityResponseAddressesTermsZero, diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTermsZero.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTermsZero.d.ts index e9497b94834..34191346455 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTermsZero.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTermsZero.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesTermsZero: core.serialization.Schema< serializers.GetCommunityResponseAddressesTermsZero.Raw, CommonApi.GetCommunityResponseAddressesTermsZero diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTermsZero.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTermsZero.js index f0d912cf4e7..86303ed7cd8 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTermsZero.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTermsZero.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesTermsZero = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItem.d.ts index 47ffc7aeaec..acd80697f80 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetCommunityResponseAddressesTopicsItemContestTopicsItem } from './GetCommunityResponseAddressesTopicsItemContestTopicsItem'; import { GetCommunityResponseAddressesTopicsItemWeightedVoting } from './GetCommunityResponseAddressesTopicsItemWeightedVoting'; - export declare const GetCommunityResponseAddressesTopicsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesTopicsItem.Raw, CommonApi.GetCommunityResponseAddressesTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItem.js index 60481457c88..d61587255ec 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { GetCommunityResponseAddressesTopicsItemContestTopicsItem } from './GetCommunityResponseAddressesTopicsItemContestTopicsItem'; import { GetCommunityResponseAddressesTopicsItemWeightedVoting } from './GetCommunityResponseAddressesTopicsItemWeightedVoting'; - export const GetCommunityResponseAddressesTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemContestTopicsItem.d.ts index ae201efe631..8acfcc7f959 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.GetCommunityResponseAddressesTopicsItemContestTopicsItem.Raw, CommonApi.GetCommunityResponseAddressesTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemContestTopicsItem.js index 713cd711bf0..28d1501ed75 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemWeightedVoting.d.ts index 2e987a2855d..181117977d0 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesTopicsItemWeightedVoting: core.serialization.Schema< serializers.GetCommunityResponseAddressesTopicsItemWeightedVoting.Raw, CommonApi.GetCommunityResponseAddressesTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemWeightedVoting.js index d9389732d06..5cf4df33ab5 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesType.d.ts b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesType.d.ts index 4816aeba873..3ee2c9a5778 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetCommunityResponseAddressesType: core.serialization.Schema< serializers.GetCommunityResponseAddressesType.Raw, CommonApi.GetCommunityResponseAddressesType diff --git a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesType.js b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesType.js index 1061deddd53..a29a7c2cf63 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesType.js +++ b/libs/api-client/src/serialization/resources/community/types/GetCommunityResponseAddressesType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetCommunityResponseAddressesType = core.serialization.enum_([ 'chain', 'dao', diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestMemberships.d.ts b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestMemberships.d.ts index 7c899f231b5..24fc81e5339 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestMemberships.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestMemberships.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetMembersRequestMemberships: core.serialization.Schema< serializers.GetMembersRequestMemberships.Raw, CommonApi.GetMembersRequestMemberships diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestMemberships.js b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestMemberships.js index 01d24180fd3..8add8b2dd94 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestMemberships.js +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestMemberships.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetMembersRequestMemberships = core.serialization.enum_([ 'in-group', 'not-in-group', diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderBy.d.ts b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderBy.d.ts index 67311328d1d..c1c9935e85e 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderBy.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderBy.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetMembersRequestOrderBy: core.serialization.Schema< serializers.GetMembersRequestOrderBy.Raw, CommonApi.GetMembersRequestOrderBy diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderBy.js b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderBy.js index 9ed2eba1a33..a3eb15e0806 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderBy.js +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderBy.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetMembersRequestOrderBy = core.serialization.enum_([ 'last_active', 'name', diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderDirection.d.ts b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderDirection.d.ts index 1655e394c05..f01497f5465 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderDirection.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderDirection.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetMembersRequestOrderDirection: core.serialization.Schema< serializers.GetMembersRequestOrderDirection.Raw, CommonApi.GetMembersRequestOrderDirection diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderDirection.js b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderDirection.js index cddf8c66d72..0ad8579ab57 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderDirection.js +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersRequestOrderDirection.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetMembersRequestOrderDirection = core.serialization.enum_([ 'ASC', 'DESC', diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/GetMembersResponse.d.ts index 2b5a1bef8b1..3b307c1944d 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersResponse.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetMembersResponseResultsItem } from './GetMembersResponseResultsItem'; - export declare const GetMembersResponse: core.serialization.ObjectSchema< serializers.GetMembersResponse.Raw, CommonApi.GetMembersResponse diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersResponse.js b/libs/api-client/src/serialization/resources/community/types/GetMembersResponse.js index af5983fba74..92d0f0e97c0 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersResponse.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetMembersResponseResultsItem } from './GetMembersResponseResultsItem'; - export const GetMembersResponse = core.serialization.object({ limit: core.serialization.number(), page: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItem.d.ts index 5ffde286782..d4577906f17 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { GetMembersResponseResultsItemAddressesItem } from './GetMembersResponseResultsItemAddressesItem'; - export declare const GetMembersResponseResultsItem: core.serialization.ObjectSchema< serializers.GetMembersResponseResultsItem.Raw, CommonApi.GetMembersResponseResultsItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItem.js b/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItem.js index 90275084504..eae83fbf798 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { GetMembersResponseResultsItemAddressesItem } from './GetMembersResponseResultsItemAddressesItem'; - export const GetMembersResponseResultsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), profileName: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItemAddressesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItemAddressesItem.d.ts index 175bbf42f83..27e98a80721 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItemAddressesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItemAddressesItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const GetMembersResponseResultsItemAddressesItem: core.serialization.ObjectSchema< serializers.GetMembersResponseResultsItemAddressesItem.Raw, CommonApi.GetMembersResponseResultsItemAddressesItem diff --git a/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItemAddressesItem.js b/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItemAddressesItem.js index 5c232762e79..3bcc9949417 100644 --- a/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItemAddressesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/GetMembersResponseResultsItemAddressesItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const GetMembersResponseResultsItemAddressesItem = core.serialization.object({ id: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponse.d.ts new file mode 100644 index 00000000000..be5a9db0476 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponse.d.ts @@ -0,0 +1,22 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { JoinCommunityResponseBase } from './JoinCommunityResponseBase'; +import { JoinCommunityResponseWalletId } from './JoinCommunityResponseWalletId'; +export declare const JoinCommunityResponse: core.serialization.ObjectSchema< + serializers.JoinCommunityResponse.Raw, + CommonApi.JoinCommunityResponse +>; +export declare namespace JoinCommunityResponse { + interface Raw { + community_id: string; + base: JoinCommunityResponseBase.Raw; + address_id: number; + address: string; + wallet_id?: JoinCommunityResponseWalletId.Raw | null; + ss58Prefix?: number | null; + } +} diff --git a/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponse.js b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponse.js new file mode 100644 index 00000000000..82e67bb03cc --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponse.js @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { JoinCommunityResponseBase } from './JoinCommunityResponseBase'; +import { JoinCommunityResponseWalletId } from './JoinCommunityResponseWalletId'; +export const JoinCommunityResponse = core.serialization.object({ + communityId: core.serialization.property( + 'community_id', + core.serialization.string(), + ), + base: JoinCommunityResponseBase, + addressId: core.serialization.property( + 'address_id', + core.serialization.number(), + ), + address: core.serialization.string(), + walletId: core.serialization.property( + 'wallet_id', + JoinCommunityResponseWalletId.optional(), + ), + ss58Prefix: core.serialization.number().optional(), +}); diff --git a/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseBase.d.ts b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseBase.d.ts new file mode 100644 index 00000000000..8859681704f --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseBase.d.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const JoinCommunityResponseBase: core.serialization.Schema< + serializers.JoinCommunityResponseBase.Raw, + CommonApi.JoinCommunityResponseBase +>; +export declare namespace JoinCommunityResponseBase { + type Raw = 'cosmos' | 'substrate' | 'ethereum' | 'near' | 'solana'; +} diff --git a/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseBase.js b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseBase.js new file mode 100644 index 00000000000..630fe86f46a --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseBase.js @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const JoinCommunityResponseBase = core.serialization.enum_([ + 'cosmos', + 'substrate', + 'ethereum', + 'near', + 'solana', +]); diff --git a/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseWalletId.d.ts b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseWalletId.d.ts new file mode 100644 index 00000000000..c7df5c84762 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseWalletId.d.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const JoinCommunityResponseWalletId: core.serialization.Schema< + serializers.JoinCommunityResponseWalletId.Raw, + CommonApi.JoinCommunityResponseWalletId +>; +export declare namespace JoinCommunityResponseWalletId { + type Raw = + | 'magic' + | 'polkadot' + | 'metamask' + | 'walletconnect' + | 'keplr-ethereum' + | 'keplr' + | 'leap' + | 'near' + | 'terrastation' + | 'terra-walletconnect' + | 'cosm-metamask' + | 'phantom' + | 'coinbase'; +} diff --git a/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseWalletId.js b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseWalletId.js new file mode 100644 index 00000000000..84c03af2414 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/JoinCommunityResponseWalletId.js @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const JoinCommunityResponseWalletId = core.serialization.enum_([ + 'magic', + 'polkadot', + 'metamask', + 'walletconnect', + 'keplr-ethereum', + 'keplr', + 'leap', + 'near', + 'terrastation', + 'terra-walletconnect', + 'cosm-metamask', + 'phantom', + 'coinbase', +]); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItem.d.ts index a6bedb7a6aa..3eed9707a4f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateCommunityRequestAddressesItemRole } from './UpdateCommunityRequestAddressesItemRole'; import { UpdateCommunityRequestAddressesItemUser } from './UpdateCommunityRequestAddressesItemUser'; import { UpdateCommunityRequestAddressesItemWalletId } from './UpdateCommunityRequestAddressesItemWalletId'; - export declare const UpdateCommunityRequestAddressesItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestAddressesItem.Raw, CommonApi.UpdateCommunityRequestAddressesItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItem.js index 5975c236bf1..4492f447739 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateCommunityRequestAddressesItemRole } from './UpdateCommunityRequestAddressesItemRole'; import { UpdateCommunityRequestAddressesItemUser } from './UpdateCommunityRequestAddressesItemUser'; import { UpdateCommunityRequestAddressesItemWalletId } from './UpdateCommunityRequestAddressesItemWalletId'; - export const UpdateCommunityRequestAddressesItem = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemRole.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemRole.d.ts index 51a49cc76ab..724dac12b60 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestAddressesItemRole: core.serialization.Schema< serializers.UpdateCommunityRequestAddressesItemRole.Raw, CommonApi.UpdateCommunityRequestAddressesItemRole diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemRole.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemRole.js index 6d601bbd42b..e421c54708f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemRole.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemRole.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestAddressesItemRole = core.serialization.enum_( ['admin', 'moderator', 'member'], ); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUser.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUser.d.ts index f18f41d4e03..e1297ab1f9f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUser.d.ts @@ -8,7 +8,6 @@ import { UpdateCommunityRequestAddressesItemUserApiKey } from './UpdateCommunity import { UpdateCommunityRequestAddressesItemUserEmailNotificationInterval } from './UpdateCommunityRequestAddressesItemUserEmailNotificationInterval'; import { UpdateCommunityRequestAddressesItemUserProfile } from './UpdateCommunityRequestAddressesItemUserProfile'; import { UpdateCommunityRequestAddressesItemUserProfileTagsItem } from './UpdateCommunityRequestAddressesItemUserProfileTagsItem'; - export declare const UpdateCommunityRequestAddressesItemUser: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestAddressesItemUser.Raw, CommonApi.UpdateCommunityRequestAddressesItemUser diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUser.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUser.js index c1a9a2d37c3..74f58a8dc26 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUser.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUser.js @@ -6,7 +6,6 @@ import { UpdateCommunityRequestAddressesItemUserApiKey } from './UpdateCommunity import { UpdateCommunityRequestAddressesItemUserEmailNotificationInterval } from './UpdateCommunityRequestAddressesItemUserEmailNotificationInterval'; import { UpdateCommunityRequestAddressesItemUserProfile } from './UpdateCommunityRequestAddressesItemUserProfile'; import { UpdateCommunityRequestAddressesItemUserProfileTagsItem } from './UpdateCommunityRequestAddressesItemUserProfileTagsItem'; - export const UpdateCommunityRequestAddressesItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..40d868505d7 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateCommunityRequestAddressesItemUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateCommunityRequestAddressesItemUserApiKey.Raw, + CommonApi.UpdateCommunityRequestAddressesItemUserApiKey +>; +export declare namespace UpdateCommunityRequestAddressesItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.js new file mode 100644 index 00000000000..3fc9fef72b2 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateCommunityRequestAddressesItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserEmailNotificationInterval.d.ts index 4b54bcff155..821d4310df0 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestAddressesItemUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateCommunityRequestAddressesItemUserEmailNotificationInterval.Raw, CommonApi.UpdateCommunityRequestAddressesItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserEmailNotificationInterval.js index 75109e74119..29e30574fec 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestAddressesItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.d.ts index e5aafa54e01..a33812b08ef 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestAddressesItemUserProfileBackgroundImage } from './UpdateCommunityRequestAddressesItemUserProfileBackgroundImage'; - export declare const UpdateCommunityRequestAddressesItemUserProfile: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestAddressesItemUserProfile.Raw, CommonApi.UpdateCommunityRequestAddressesItemUserProfile diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.js index 63c3a2820ab..278b7a82483 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestAddressesItemUserProfileBackgroundImage } from './UpdateCommunityRequestAddressesItemUserProfileBackgroundImage'; - export const UpdateCommunityRequestAddressesItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileBackgroundImage.d.ts index f66c25df53b..cc84e86b324 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestAddressesItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestAddressesItemUserProfileBackgroundImage.Raw, CommonApi.UpdateCommunityRequestAddressesItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileBackgroundImage.js index 4a97d639ad4..a0e4f5045cc 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestAddressesItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileTagsItem.d.ts index cd8d0703cb0..cd88d0641d5 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestAddressesItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestAddressesItemUserProfileTagsItem.Raw, CommonApi.UpdateCommunityRequestAddressesItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileTagsItem.js index 759a616ec0d..f1b4d387456 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestAddressesItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemWalletId.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemWalletId.d.ts index be31a8010bd..08aac9882d3 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestAddressesItemWalletId: core.serialization.Schema< serializers.UpdateCommunityRequestAddressesItemWalletId.Raw, CommonApi.UpdateCommunityRequestAddressesItemWalletId diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemWalletId.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemWalletId.js index 6f9493a4968..e2ee11c0b6f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemWalletId.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestAddressesItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestAddressesItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestBase.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestBase.d.ts index d9b14d903a7..1dcf6292d9c 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestBase.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestBase.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestBase: core.serialization.Schema< serializers.UpdateCommunityRequestBase.Raw, CommonApi.UpdateCommunityRequestBase diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestBase.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestBase.js index 0633151c1d3..c9450e725bb 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestBase.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestBase.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestBase = core.serialization.enum_([ 'cosmos', 'substrate', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNode.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNode.d.ts index 3f21ad689fd..957f13ee80a 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNode.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNode.d.ts @@ -8,7 +8,6 @@ import { UpdateCommunityRequestChainNodeBalanceType } from './UpdateCommunityReq import { UpdateCommunityRequestChainNodeContractsItem } from './UpdateCommunityRequestChainNodeContractsItem'; import { UpdateCommunityRequestChainNodeCosmosGovVersion } from './UpdateCommunityRequestChainNodeCosmosGovVersion'; import { UpdateCommunityRequestChainNodeHealth } from './UpdateCommunityRequestChainNodeHealth'; - export declare const UpdateCommunityRequestChainNode: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestChainNode.Raw, CommonApi.UpdateCommunityRequestChainNode diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNode.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNode.js index 30fd0ab0fd5..9a2ae3542ed 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNode.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNode.js @@ -6,7 +6,6 @@ import { UpdateCommunityRequestChainNodeBalanceType } from './UpdateCommunityReq import { UpdateCommunityRequestChainNodeContractsItem } from './UpdateCommunityRequestChainNodeContractsItem'; import { UpdateCommunityRequestChainNodeCosmosGovVersion } from './UpdateCommunityRequestChainNodeCosmosGovVersion'; import { UpdateCommunityRequestChainNodeHealth } from './UpdateCommunityRequestChainNodeHealth'; - export const UpdateCommunityRequestChainNode = core.serialization.object({ id: core.serialization.number().optional(), url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeBalanceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeBalanceType.d.ts index 46333684d5e..1fbdb2df332 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeBalanceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeBalanceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestChainNodeBalanceType: core.serialization.Schema< serializers.UpdateCommunityRequestChainNodeBalanceType.Raw, CommonApi.UpdateCommunityRequestChainNodeBalanceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeBalanceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeBalanceType.js index 9d583c4d1b0..9ac95cf0adb 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeBalanceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeBalanceType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestChainNodeBalanceType = core.serialization.enum_([ 'terra', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeContractsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeContractsItem.d.ts index e89bfbe8436..aa376dbfafd 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeContractsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeContractsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestChainNodeContractsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestChainNodeContractsItem.Raw, CommonApi.UpdateCommunityRequestChainNodeContractsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeContractsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeContractsItem.js index a3be24ea88d..15380ab9f88 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeContractsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeContractsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestChainNodeContractsItem = core.serialization.object({ id: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeCosmosGovVersion.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeCosmosGovVersion.d.ts index 4027e1c4b5e..8dae7d08f72 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeCosmosGovVersion.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeCosmosGovVersion.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestChainNodeCosmosGovVersion: core.serialization.Schema< serializers.UpdateCommunityRequestChainNodeCosmosGovVersion.Raw, CommonApi.UpdateCommunityRequestChainNodeCosmosGovVersion diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeCosmosGovVersion.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeCosmosGovVersion.js index b93b99a618f..6319c5a9c40 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeCosmosGovVersion.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeCosmosGovVersion.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestChainNodeCosmosGovVersion = core.serialization.enum_([ 'v1', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeHealth.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeHealth.d.ts index 495b8b44ed6..df392297e37 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeHealth.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeHealth.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestChainNodeHealth: core.serialization.Schema< serializers.UpdateCommunityRequestChainNodeHealth.Raw, CommonApi.UpdateCommunityRequestChainNodeHealth diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeHealth.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeHealth.js index 0ba3c323d69..ed9fd9c2150 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeHealth.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestChainNodeHealth.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestChainNodeHealth = core.serialization.enum_([ 'failed', 'healthy', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItem.d.ts index 047f84a82a0..a73904770d1 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem } from './UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem'; - export declare const UpdateCommunityRequestCommunityStakesItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestCommunityStakesItem.Raw, CommonApi.UpdateCommunityRequestCommunityStakesItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItem.js index 559ca8b0177..9f1e01f9966 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem } from './UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem'; - export const UpdateCommunityRequestCommunityStakesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.d.ts index b07d4b0cdf4..920d76783e0 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection } from './UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection'; - export declare const UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.Raw, CommonApi.UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.js index 3ef874cbd52..9138f9be65e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection } from './UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection'; - export const UpdateCommunityRequestCommunityStakesItemStakeTransactionsItem = core.serialization.object({ transactionHash: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts index 19b1c432895..fa61ce63938 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection: core.serialization.Schema< serializers.UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection.Raw, CommonApi.UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection.js index c4a30aa33c7..3741bf3b559 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestCommunityStakesItemStakeTransactionsItemStakeDirection = core.serialization.enum_(['buy', 'sell']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItem.d.ts index dbcbb895832..6679a02fce4 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestCommunityTagsItemTag } from './UpdateCommunityRequestCommunityTagsItemTag'; - export declare const UpdateCommunityRequestCommunityTagsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestCommunityTagsItem.Raw, CommonApi.UpdateCommunityRequestCommunityTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItem.js index bd5c82f3dee..ba1e235957b 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestCommunityTagsItemTag } from './UpdateCommunityRequestCommunityTagsItemTag'; - export const UpdateCommunityRequestCommunityTagsItem = core.serialization.object({ communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItemTag.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItemTag.d.ts index 4e5fc14900b..6e94fd42771 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItemTag.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItemTag.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestCommunityTagsItemTag: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestCommunityTagsItemTag.Raw, CommonApi.UpdateCommunityRequestCommunityTagsItemTag diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItemTag.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItemTag.js index 6c4cb031dc3..189e1fd70a8 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItemTag.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestCommunityTagsItemTag.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestCommunityTagsItemTag = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItem.d.ts index 67dcef0cf95..cbd5fe234c3 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestContestManagersItemContestsItem } from './UpdateCommunityRequestContestManagersItemContestsItem'; import { UpdateCommunityRequestContestManagersItemTopicsItem } from './UpdateCommunityRequestContestManagersItemTopicsItem'; - export declare const UpdateCommunityRequestContestManagersItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestContestManagersItem.Raw, CommonApi.UpdateCommunityRequestContestManagersItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItem.js index d1868d89118..5e471a7cc93 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityRequestContestManagersItemContestsItem } from './UpdateCommunityRequestContestManagersItemContestsItem'; import { UpdateCommunityRequestContestManagersItemTopicsItem } from './UpdateCommunityRequestContestManagersItemTopicsItem'; - export const UpdateCommunityRequestContestManagersItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.d.ts index 978cc6536d8..8346756feb3 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestContestManagersItemContestsItemActionsItem } from './UpdateCommunityRequestContestManagersItemContestsItemActionsItem'; import { UpdateCommunityRequestContestManagersItemContestsItemScoreItem } from './UpdateCommunityRequestContestManagersItemContestsItemScoreItem'; - export declare const UpdateCommunityRequestContestManagersItemContestsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestContestManagersItemContestsItem.Raw, CommonApi.UpdateCommunityRequestContestManagersItemContestsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.js index c7a5989012a..212d0e10c99 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityRequestContestManagersItemContestsItemActionsItem } from './UpdateCommunityRequestContestManagersItemContestsItemActionsItem'; import { UpdateCommunityRequestContestManagersItemContestsItemScoreItem } from './UpdateCommunityRequestContestManagersItemContestsItemScoreItem'; - export const UpdateCommunityRequestContestManagersItemContestsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.d.ts index 289a7d8234a..53e90106865 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction } from './UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction'; - export declare const UpdateCommunityRequestContestManagersItemContestsItemActionsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestContestManagersItemContestsItemActionsItem.Raw, CommonApi.UpdateCommunityRequestContestManagersItemContestsItemActionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.js index 2d52b2b75dd..a80ceaa7b2e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction } from './UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction'; - export const UpdateCommunityRequestContestManagersItemContestsItemActionsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction.d.ts index cc912ff8a98..9c82306ca49 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction: core.serialization.Schema< serializers.UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction.Raw, CommonApi.UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction.js index af1e14256b6..b69db47c3ef 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestContestManagersItemContestsItemActionsItemAction = core.serialization.enum_(['added', 'upvoted']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemScoreItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemScoreItem.d.ts index c595cd05d36..b31764607b2 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemScoreItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemScoreItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestContestManagersItemContestsItemScoreItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestContestManagersItemContestsItemScoreItem.Raw, CommonApi.UpdateCommunityRequestContestManagersItemContestsItemScoreItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemScoreItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemScoreItem.js index 8f4d6addff9..c963dd26d4d 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemScoreItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemContestsItemScoreItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestContestManagersItemContestsItemScoreItem = core.serialization.object({ creatorAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.d.ts index 650da038faa..bf27fa7bccb 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem } from './UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem'; import { UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting } from './UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting'; - export declare const UpdateCommunityRequestContestManagersItemTopicsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestContestManagersItemTopicsItem.Raw, CommonApi.UpdateCommunityRequestContestManagersItemTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.js index 67ea5134dc3..01e748a58ac 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem } from './UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem'; import { UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting } from './UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting'; - export const UpdateCommunityRequestContestManagersItemTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem.d.ts index 75ef4f12a00..5aa365c8107 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem.Raw, CommonApi.UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem.js index dcd08de92a5..82f95ad118a 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestContestManagersItemTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting.d.ts index aa3eef61a87..fdba468f6de 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting: core.serialization.Schema< serializers.UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting.Raw, CommonApi.UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting.js index 9c079e36a96..1707de2a41c 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestContestManagersItemTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestDefaultPage.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestDefaultPage.d.ts index ba7a6796199..1e88de5078a 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestDefaultPage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestDefaultPage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestDefaultPage: core.serialization.Schema< serializers.UpdateCommunityRequestDefaultPage.Raw, CommonApi.UpdateCommunityRequestDefaultPage diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestDefaultPage.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestDefaultPage.js index f00ebea2e18..27114a54e49 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestDefaultPage.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestDefaultPage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestDefaultPage = core.serialization.enum_([ 'default_all_discussions_view', 'default_summary_view', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItem.d.ts index e8a291ff030..a098ef99808 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestGroupsItemMetadata } from './UpdateCommunityRequestGroupsItemMetadata'; import { UpdateCommunityRequestGroupsItemRequirementsItem } from './UpdateCommunityRequestGroupsItemRequirementsItem'; - export declare const UpdateCommunityRequestGroupsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItem.Raw, CommonApi.UpdateCommunityRequestGroupsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItem.js index 7cfc610b53f..37d0dc15419 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityRequestGroupsItemMetadata } from './UpdateCommunityRequestGroupsItemMetadata'; import { UpdateCommunityRequestGroupsItemRequirementsItem } from './UpdateCommunityRequestGroupsItemRequirementsItem'; - export const UpdateCommunityRequestGroupsItem = core.serialization.object({ id: core.serialization.number().optional(), communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemMetadata.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemMetadata.d.ts index 65131afed86..9fcdd8363b6 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemMetadata.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemMetadata.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestGroupsItemMetadata: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItemMetadata.Raw, CommonApi.UpdateCommunityRequestGroupsItemMetadata diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemMetadata.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemMetadata.js index 8372508d0cc..6250ff7c696 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemMetadata.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemMetadata.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestGroupsItemMetadata = core.serialization.object({ name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.d.ts index 9946d68bdbc..c59960e9a77 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestGroupsItemRequirementsItemAllow } from './UpdateCommunityRequestGroupsItemRequirementsItemAllow'; import { UpdateCommunityRequestGroupsItemRequirementsItemThreshold } from './UpdateCommunityRequestGroupsItemRequirementsItemThreshold'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItem: core.serialization.Schema< serializers.UpdateCommunityRequestGroupsItemRequirementsItem.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItem @@ -15,12 +14,10 @@ export declare namespace UpdateCommunityRequestGroupsItemRequirementsItem { type Raw = | UpdateCommunityRequestGroupsItemRequirementsItem.Threshold | UpdateCommunityRequestGroupsItemRequirementsItem.Allow; - interface Threshold extends UpdateCommunityRequestGroupsItemRequirementsItemThreshold.Raw { rule: 'threshold'; } - interface Allow extends UpdateCommunityRequestGroupsItemRequirementsItemAllow.Raw { rule: 'allow'; diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.js index b8f28f73d10..a5f2f555509 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityRequestGroupsItemRequirementsItemAllow } from './UpdateCommunityRequestGroupsItemRequirementsItemAllow'; import { UpdateCommunityRequestGroupsItemRequirementsItemThreshold } from './UpdateCommunityRequestGroupsItemRequirementsItemThreshold'; - export const UpdateCommunityRequestGroupsItemRequirementsItem = core.serialization .union('rule', { diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.d.ts index ce7a4dde165..a34ff5094d2 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestGroupsItemRequirementsItemAllowData } from './UpdateCommunityRequestGroupsItemRequirementsItemAllowData'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemAllow: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemAllow.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemAllow diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.js index 57488c7ba91..9d900dfd842 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllow.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestGroupsItemRequirementsItemAllowData } from './UpdateCommunityRequestGroupsItemRequirementsItemAllowData'; - export const UpdateCommunityRequestGroupsItemRequirementsItemAllow = core.serialization.object({ data: UpdateCommunityRequestGroupsItemRequirementsItemAllowData, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllowData.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllowData.d.ts index b7a3fba3a61..d1139c398f4 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllowData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllowData.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemAllowData: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemAllowData.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemAllowData diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllowData.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllowData.js index 2d9c6b28f4c..4a0dbc68f6c 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllowData.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemAllowData.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestGroupsItemRequirementsItemAllowData = core.serialization.object({ allow: core.serialization.list(core.serialization.string()), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.d.ts index bea61db6b88..672521dbc70 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdData } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdData'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemThreshold: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemThreshold.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThreshold diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.js index 6e5042803cb..a9cfbfbef1c 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThreshold.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdData } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdData'; - export const UpdateCommunityRequestGroupsItemRequirementsItemThreshold = core.serialization.object({ data: UpdateCommunityRequestGroupsItemRequirementsItemThresholdData, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.d.ts index 04c63992f3e..b2b6fe68beb 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemThresholdData: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdData diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.js index 542ea06e8ed..4d0b18936a2 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdData.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource'; - export const UpdateCommunityRequestGroupsItemRequirementsItemThresholdData = core.serialization.object({ threshold: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.d.ts index 382e54a81cf..48f706ea764 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -8,7 +8,6 @@ import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource: core.serialization.Schema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.js index a9b49fc7343..536bc31049d 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource.js @@ -6,7 +6,6 @@ import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSource = core.serialization.undiscriminatedUnion([ UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne.d.ts index 8d6bc8df2bf..341ae43f005 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne.js index 8b4aa3f866e..68e40d49133 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceOne = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index fc6f71df6ac..05e5b17a07f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.js index 483753d8e4f..c17ec232232 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThree = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts index 68468d1deb1..552af760461 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType: core.serialization.Schema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js index da6af8c361a..d50fbfac93a 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceThreeSourceType = core.serialization.enum_(['cw721', 'cw20']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index 00ecf1655b2..52929ba1343 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.js index 92f46853ce9..7c5df21c2fd 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenId = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts index 325f22e8a89..e62f85423e6 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType: core.serialization.Schema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js index 8fbb83a2705..488c54d647b 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType = core.serialization.enum_(['erc20', 'erc721', 'erc1155', 'spl']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts index a056c23c3e7..5cb26bbad69 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.Raw, CommonApi.UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js index f14a7e9ccc7..37325768f7d 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestGroupsItemRequirementsItemThresholdDataSourceTokenSymbol = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestHasHomepage.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestHasHomepage.d.ts index 0799d7e510a..74c8dcfbbc4 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestHasHomepage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestHasHomepage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestHasHomepage: core.serialization.Schema< serializers.UpdateCommunityRequestHasHomepage.Raw, CommonApi.UpdateCommunityRequestHasHomepage diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestHasHomepage.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestHasHomepage.js index 69deef27070..b65844743aa 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestHasHomepage.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestHasHomepage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestHasHomepage = core.serialization.enum_([ 'true', 'false', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSnapshot.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSnapshot.d.ts index 818dd1531b7..21d891eaba7 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSnapshot.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSnapshot.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestSnapshot: core.serialization.Schema< serializers.UpdateCommunityRequestSnapshot.Raw, CommonApi.UpdateCommunityRequestSnapshot diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSnapshot.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSnapshot.js index cd7f8900158..3aa3f0c8c98 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSnapshot.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSnapshot.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestSnapshot = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSocialLinksItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSocialLinksItem.d.ts index 45f2bf415c6..7e389b28dba 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSocialLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSocialLinksItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestSocialLinksItem: core.serialization.Schema< serializers.UpdateCommunityRequestSocialLinksItem.Raw, CommonApi.UpdateCommunityRequestSocialLinksItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSocialLinksItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSocialLinksItem.js index ab0947ecc5b..1a5e8bd747a 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSocialLinksItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestSocialLinksItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestSocialLinksItem = core.serialization.undiscriminatedUnion([ core.serialization.unknown(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTerms.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTerms.d.ts index 2fce0ebce25..42d2cb8e8c6 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTerms.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTerms.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestTermsZero } from './UpdateCommunityRequestTermsZero'; - export declare const UpdateCommunityRequestTerms: core.serialization.Schema< serializers.UpdateCommunityRequestTerms.Raw, CommonApi.UpdateCommunityRequestTerms diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTerms.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTerms.js index 7e1cb32880f..8ee4478e9f4 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTerms.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTerms.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityRequestTermsZero } from './UpdateCommunityRequestTermsZero'; - export const UpdateCommunityRequestTerms = core.serialization.undiscriminatedUnion([ UpdateCommunityRequestTermsZero, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTermsZero.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTermsZero.d.ts index 98f9f4ce6cd..597669ad4a1 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTermsZero.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTermsZero.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestTermsZero: core.serialization.Schema< serializers.UpdateCommunityRequestTermsZero.Raw, CommonApi.UpdateCommunityRequestTermsZero diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTermsZero.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTermsZero.js index 34deb31bca9..9e0f5c91374 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTermsZero.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTermsZero.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestTermsZero = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItem.d.ts index 722817bc294..e6a73b2b8c5 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityRequestTopicsItemContestTopicsItem } from './UpdateCommunityRequestTopicsItemContestTopicsItem'; import { UpdateCommunityRequestTopicsItemWeightedVoting } from './UpdateCommunityRequestTopicsItemWeightedVoting'; - export declare const UpdateCommunityRequestTopicsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestTopicsItem.Raw, CommonApi.UpdateCommunityRequestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItem.js index 6a928e520c8..e9e89b4c306 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityRequestTopicsItemContestTopicsItem } from './UpdateCommunityRequestTopicsItemContestTopicsItem'; import { UpdateCommunityRequestTopicsItemWeightedVoting } from './UpdateCommunityRequestTopicsItemWeightedVoting'; - export const UpdateCommunityRequestTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemContestTopicsItem.d.ts index 0a76feefe8c..34ede2ecf2f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityRequestTopicsItemContestTopicsItem.Raw, CommonApi.UpdateCommunityRequestTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemContestTopicsItem.js index bb6150e5200..b7665a4d352 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemWeightedVoting.d.ts index e8c30205aa4..d6fdbf3620f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestTopicsItemWeightedVoting: core.serialization.Schema< serializers.UpdateCommunityRequestTopicsItemWeightedVoting.Raw, CommonApi.UpdateCommunityRequestTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemWeightedVoting.js index f9ef8a90403..82059480993 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestType.d.ts index 20711f6d88f..3be1f80afa2 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityRequestType: core.serialization.Schema< serializers.UpdateCommunityRequestType.Raw, CommonApi.UpdateCommunityRequestType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestType.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestType.js index 202cdbe60eb..2aadd73249f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityRequestType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityRequestType = core.serialization.enum_([ 'chain', 'dao', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponse.d.ts index bb2cc1f1a51..f2d8e133d6d 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponse.d.ts @@ -17,7 +17,6 @@ import { UpdateCommunityResponseSocialLinksItem } from './UpdateCommunityRespons import { UpdateCommunityResponseTerms } from './UpdateCommunityResponseTerms'; import { UpdateCommunityResponseTopicsItem } from './UpdateCommunityResponseTopicsItem'; import { UpdateCommunityResponseType } from './UpdateCommunityResponseType'; - export declare const UpdateCommunityResponse: core.serialization.ObjectSchema< serializers.UpdateCommunityResponse.Raw, CommonApi.UpdateCommunityResponse diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponse.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponse.js index b3925521745..05d30cb7822 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponse.js @@ -15,7 +15,6 @@ import { UpdateCommunityResponseSocialLinksItem } from './UpdateCommunityRespons import { UpdateCommunityResponseTerms } from './UpdateCommunityResponseTerms'; import { UpdateCommunityResponseTopicsItem } from './UpdateCommunityResponseTopicsItem'; import { UpdateCommunityResponseType } from './UpdateCommunityResponseType'; - export const UpdateCommunityResponse = core.serialization.object({ id: core.serialization.string(), name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItem.d.ts index 780f9c41be6..4acf761d053 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateCommunityResponseAddressesItemRole } from './UpdateCommunityResponseAddressesItemRole'; import { UpdateCommunityResponseAddressesItemUser } from './UpdateCommunityResponseAddressesItemUser'; import { UpdateCommunityResponseAddressesItemWalletId } from './UpdateCommunityResponseAddressesItemWalletId'; - export declare const UpdateCommunityResponseAddressesItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseAddressesItem.Raw, CommonApi.UpdateCommunityResponseAddressesItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItem.js index 5897674f809..bf0d9e351d6 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateCommunityResponseAddressesItemRole } from './UpdateCommunityResponseAddressesItemRole'; import { UpdateCommunityResponseAddressesItemUser } from './UpdateCommunityResponseAddressesItemUser'; import { UpdateCommunityResponseAddressesItemWalletId } from './UpdateCommunityResponseAddressesItemWalletId'; - export const UpdateCommunityResponseAddressesItem = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemRole.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemRole.d.ts index cde463a95f0..33b47baef7f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseAddressesItemRole: core.serialization.Schema< serializers.UpdateCommunityResponseAddressesItemRole.Raw, CommonApi.UpdateCommunityResponseAddressesItemRole diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemRole.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemRole.js index 1d17165a2b4..e6ce76fa07a 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemRole.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseAddressesItemRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUser.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUser.d.ts index 09292463b09..1504343aaf9 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUser.d.ts @@ -8,7 +8,6 @@ import { UpdateCommunityResponseAddressesItemUserApiKey } from './UpdateCommunit import { UpdateCommunityResponseAddressesItemUserEmailNotificationInterval } from './UpdateCommunityResponseAddressesItemUserEmailNotificationInterval'; import { UpdateCommunityResponseAddressesItemUserProfile } from './UpdateCommunityResponseAddressesItemUserProfile'; import { UpdateCommunityResponseAddressesItemUserProfileTagsItem } from './UpdateCommunityResponseAddressesItemUserProfileTagsItem'; - export declare const UpdateCommunityResponseAddressesItemUser: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseAddressesItemUser.Raw, CommonApi.UpdateCommunityResponseAddressesItemUser diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUser.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUser.js index 9bd74ec3e9b..bff66e9a122 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUser.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUser.js @@ -6,7 +6,6 @@ import { UpdateCommunityResponseAddressesItemUserApiKey } from './UpdateCommunit import { UpdateCommunityResponseAddressesItemUserEmailNotificationInterval } from './UpdateCommunityResponseAddressesItemUserEmailNotificationInterval'; import { UpdateCommunityResponseAddressesItemUserProfile } from './UpdateCommunityResponseAddressesItemUserProfile'; import { UpdateCommunityResponseAddressesItemUserProfileTagsItem } from './UpdateCommunityResponseAddressesItemUserProfileTagsItem'; - export const UpdateCommunityResponseAddressesItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.d.ts new file mode 100644 index 00000000000..25006dd664d --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateCommunityResponseAddressesItemUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateCommunityResponseAddressesItemUserApiKey.Raw, + CommonApi.UpdateCommunityResponseAddressesItemUserApiKey +>; +export declare namespace UpdateCommunityResponseAddressesItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.js new file mode 100644 index 00000000000..decea2bdf37 --- /dev/null +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateCommunityResponseAddressesItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserEmailNotificationInterval.d.ts index 0bc6500b8a4..97bcd9d760e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseAddressesItemUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateCommunityResponseAddressesItemUserEmailNotificationInterval.Raw, CommonApi.UpdateCommunityResponseAddressesItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserEmailNotificationInterval.js index 145ba4cd750..1e97b0a7592 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseAddressesItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.d.ts index 19a1b99d5a9..b1768d48c89 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseAddressesItemUserProfileBackgroundImage } from './UpdateCommunityResponseAddressesItemUserProfileBackgroundImage'; - export declare const UpdateCommunityResponseAddressesItemUserProfile: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseAddressesItemUserProfile.Raw, CommonApi.UpdateCommunityResponseAddressesItemUserProfile diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.js index 521dc56a82c..659f152d7cc 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseAddressesItemUserProfileBackgroundImage } from './UpdateCommunityResponseAddressesItemUserProfileBackgroundImage'; - export const UpdateCommunityResponseAddressesItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileBackgroundImage.d.ts index f466fe079fb..4e1255f4858 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseAddressesItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseAddressesItemUserProfileBackgroundImage.Raw, CommonApi.UpdateCommunityResponseAddressesItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileBackgroundImage.js index 2009293706a..5540b6af545 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseAddressesItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileTagsItem.d.ts index b4eed2eb1dd..234d15df860 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseAddressesItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseAddressesItemUserProfileTagsItem.Raw, CommonApi.UpdateCommunityResponseAddressesItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileTagsItem.js index e3c8e4cf242..fd77d158b28 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseAddressesItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemWalletId.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemWalletId.d.ts index 552ed5046a1..146e5f7b1e6 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseAddressesItemWalletId: core.serialization.Schema< serializers.UpdateCommunityResponseAddressesItemWalletId.Raw, CommonApi.UpdateCommunityResponseAddressesItemWalletId diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemWalletId.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemWalletId.js index 3e6561b3d0d..39089836704 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemWalletId.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseAddressesItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseAddressesItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseBase.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseBase.d.ts index 21b2a78b285..c9fbcf33c8e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseBase.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseBase.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseBase: core.serialization.Schema< serializers.UpdateCommunityResponseBase.Raw, CommonApi.UpdateCommunityResponseBase diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseBase.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseBase.js index f773669e51d..cff945627db 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseBase.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseBase.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseBase = core.serialization.enum_([ 'cosmos', 'substrate', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNode.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNode.d.ts index 57ef250f43d..1d12ad4b6bd 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNode.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNode.d.ts @@ -8,7 +8,6 @@ import { UpdateCommunityResponseChainNodeBalanceType } from './UpdateCommunityRe import { UpdateCommunityResponseChainNodeContractsItem } from './UpdateCommunityResponseChainNodeContractsItem'; import { UpdateCommunityResponseChainNodeCosmosGovVersion } from './UpdateCommunityResponseChainNodeCosmosGovVersion'; import { UpdateCommunityResponseChainNodeHealth } from './UpdateCommunityResponseChainNodeHealth'; - export declare const UpdateCommunityResponseChainNode: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseChainNode.Raw, CommonApi.UpdateCommunityResponseChainNode diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNode.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNode.js index 75193586f1e..51f874c98fc 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNode.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNode.js @@ -6,7 +6,6 @@ import { UpdateCommunityResponseChainNodeBalanceType } from './UpdateCommunityRe import { UpdateCommunityResponseChainNodeContractsItem } from './UpdateCommunityResponseChainNodeContractsItem'; import { UpdateCommunityResponseChainNodeCosmosGovVersion } from './UpdateCommunityResponseChainNodeCosmosGovVersion'; import { UpdateCommunityResponseChainNodeHealth } from './UpdateCommunityResponseChainNodeHealth'; - export const UpdateCommunityResponseChainNode = core.serialization.object({ id: core.serialization.number().optional(), url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeBalanceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeBalanceType.d.ts index b8d27048aee..d392cab1b2f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeBalanceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeBalanceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseChainNodeBalanceType: core.serialization.Schema< serializers.UpdateCommunityResponseChainNodeBalanceType.Raw, CommonApi.UpdateCommunityResponseChainNodeBalanceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeBalanceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeBalanceType.js index 255182251d0..cd5747c9aba 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeBalanceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeBalanceType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseChainNodeBalanceType = core.serialization.enum_([ 'terra', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeContractsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeContractsItem.d.ts index f5301980663..4196f14c714 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeContractsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeContractsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseChainNodeContractsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseChainNodeContractsItem.Raw, CommonApi.UpdateCommunityResponseChainNodeContractsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeContractsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeContractsItem.js index 8f77ab208c1..2e175b3c75c 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeContractsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeContractsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseChainNodeContractsItem = core.serialization.object({ id: core.serialization.number(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeCosmosGovVersion.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeCosmosGovVersion.d.ts index 28480b18978..da367642669 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeCosmosGovVersion.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeCosmosGovVersion.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseChainNodeCosmosGovVersion: core.serialization.Schema< serializers.UpdateCommunityResponseChainNodeCosmosGovVersion.Raw, CommonApi.UpdateCommunityResponseChainNodeCosmosGovVersion diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeCosmosGovVersion.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeCosmosGovVersion.js index 6a686bdd631..dfd7a58a9c3 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeCosmosGovVersion.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeCosmosGovVersion.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseChainNodeCosmosGovVersion = core.serialization.enum_([ 'v1', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeHealth.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeHealth.d.ts index eb130065e5d..da98f92f450 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeHealth.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeHealth.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseChainNodeHealth: core.serialization.Schema< serializers.UpdateCommunityResponseChainNodeHealth.Raw, CommonApi.UpdateCommunityResponseChainNodeHealth diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeHealth.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeHealth.js index 35492be3f82..8d2492c6fef 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeHealth.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseChainNodeHealth.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseChainNodeHealth = core.serialization.enum_([ 'failed', 'healthy', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItem.d.ts index ad72b0099d5..3f171c98784 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem } from './UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem'; - export declare const UpdateCommunityResponseCommunityStakesItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseCommunityStakesItem.Raw, CommonApi.UpdateCommunityResponseCommunityStakesItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItem.js index c5885f862d9..0867c74203e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem } from './UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem'; - export const UpdateCommunityResponseCommunityStakesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.d.ts index a996e9d5e0c..9e9ae9c5757 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection } from './UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection'; - export declare const UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.Raw, CommonApi.UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.js index 67b7be8bd7c..4d9928541cd 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection } from './UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection'; - export const UpdateCommunityResponseCommunityStakesItemStakeTransactionsItem = core.serialization.object({ transactionHash: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts index ba8d2dfdaf5..5d100cb5da6 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection: core.serialization.Schema< serializers.UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection.Raw, CommonApi.UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection.js index c6bd5c4b4e5..e5a5d4c6ab9 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseCommunityStakesItemStakeTransactionsItemStakeDirection = core.serialization.enum_(['buy', 'sell']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItem.d.ts index 9c8c931c576..07878d56484 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseCommunityTagsItemTag } from './UpdateCommunityResponseCommunityTagsItemTag'; - export declare const UpdateCommunityResponseCommunityTagsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseCommunityTagsItem.Raw, CommonApi.UpdateCommunityResponseCommunityTagsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItem.js index 0540a142760..c495fad8345 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseCommunityTagsItemTag } from './UpdateCommunityResponseCommunityTagsItemTag'; - export const UpdateCommunityResponseCommunityTagsItem = core.serialization.object({ communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItemTag.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItemTag.d.ts index 8e7c2525981..ed12d91aa74 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItemTag.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItemTag.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseCommunityTagsItemTag: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseCommunityTagsItemTag.Raw, CommonApi.UpdateCommunityResponseCommunityTagsItemTag diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItemTag.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItemTag.js index ea91e0eeb8e..a7a3b60838d 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItemTag.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseCommunityTagsItemTag.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseCommunityTagsItemTag = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItem.d.ts index 726d491cd4e..6908b7092c6 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseContestManagersItemContestsItem } from './UpdateCommunityResponseContestManagersItemContestsItem'; import { UpdateCommunityResponseContestManagersItemTopicsItem } from './UpdateCommunityResponseContestManagersItemTopicsItem'; - export declare const UpdateCommunityResponseContestManagersItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseContestManagersItem.Raw, CommonApi.UpdateCommunityResponseContestManagersItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItem.js index 0fd28a31f70..deb63828755 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityResponseContestManagersItemContestsItem } from './UpdateCommunityResponseContestManagersItemContestsItem'; import { UpdateCommunityResponseContestManagersItemTopicsItem } from './UpdateCommunityResponseContestManagersItemTopicsItem'; - export const UpdateCommunityResponseContestManagersItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.d.ts index 82c7a5ff625..e0e803f946f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseContestManagersItemContestsItemActionsItem } from './UpdateCommunityResponseContestManagersItemContestsItemActionsItem'; import { UpdateCommunityResponseContestManagersItemContestsItemScoreItem } from './UpdateCommunityResponseContestManagersItemContestsItemScoreItem'; - export declare const UpdateCommunityResponseContestManagersItemContestsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseContestManagersItemContestsItem.Raw, CommonApi.UpdateCommunityResponseContestManagersItemContestsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.js index d14ebaf300f..2268468f3d7 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityResponseContestManagersItemContestsItemActionsItem } from './UpdateCommunityResponseContestManagersItemContestsItemActionsItem'; import { UpdateCommunityResponseContestManagersItemContestsItemScoreItem } from './UpdateCommunityResponseContestManagersItemContestsItemScoreItem'; - export const UpdateCommunityResponseContestManagersItemContestsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.d.ts index 558f9c96401..4c0658a00e8 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction } from './UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction'; - export declare const UpdateCommunityResponseContestManagersItemContestsItemActionsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseContestManagersItemContestsItemActionsItem.Raw, CommonApi.UpdateCommunityResponseContestManagersItemContestsItemActionsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.js index c2b87f84b1b..b853d305912 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction } from './UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction'; - export const UpdateCommunityResponseContestManagersItemContestsItemActionsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction.d.ts index 132e49a9a04..644e770a384 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction: core.serialization.Schema< serializers.UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction.Raw, CommonApi.UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction.js index 87aefc3a13d..334bc359530 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseContestManagersItemContestsItemActionsItemAction = core.serialization.enum_(['added', 'upvoted']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemScoreItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemScoreItem.d.ts index 5f32fa4d0e9..0228502175a 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemScoreItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemScoreItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseContestManagersItemContestsItemScoreItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseContestManagersItemContestsItemScoreItem.Raw, CommonApi.UpdateCommunityResponseContestManagersItemContestsItemScoreItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemScoreItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemScoreItem.js index ff4184fea11..c22cbcac989 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemScoreItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemContestsItemScoreItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseContestManagersItemContestsItemScoreItem = core.serialization.object({ creatorAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.d.ts index ef88431d683..d6824f7a6cc 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem } from './UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem'; import { UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting } from './UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting'; - export declare const UpdateCommunityResponseContestManagersItemTopicsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseContestManagersItemTopicsItem.Raw, CommonApi.UpdateCommunityResponseContestManagersItemTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.js index f6f32d340ba..ac550f4b7c5 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem } from './UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem'; import { UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting } from './UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting'; - export const UpdateCommunityResponseContestManagersItemTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem.d.ts index bf4ee4d8342..9a7c01b76dd 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem.Raw, CommonApi.UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem.js index cbf60ceb3ec..e3132a4e0ed 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseContestManagersItemTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting.d.ts index e0c9a92ef92..d5e9ddcd033 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting: core.serialization.Schema< serializers.UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting.Raw, CommonApi.UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting.js index 747e3a8d6eb..b704d878542 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseContestManagersItemTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseDefaultPage.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseDefaultPage.d.ts index 35195615ea3..dea4b7e1231 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseDefaultPage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseDefaultPage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseDefaultPage: core.serialization.Schema< serializers.UpdateCommunityResponseDefaultPage.Raw, CommonApi.UpdateCommunityResponseDefaultPage diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseDefaultPage.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseDefaultPage.js index 4e97a112da3..a131980216e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseDefaultPage.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseDefaultPage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseDefaultPage = core.serialization.enum_([ 'default_all_discussions_view', 'default_summary_view', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItem.d.ts index 536e458d558..41abe311f50 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseGroupsItemMetadata } from './UpdateCommunityResponseGroupsItemMetadata'; import { UpdateCommunityResponseGroupsItemRequirementsItem } from './UpdateCommunityResponseGroupsItemRequirementsItem'; - export declare const UpdateCommunityResponseGroupsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItem.Raw, CommonApi.UpdateCommunityResponseGroupsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItem.js index a188007e522..c669134f581 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityResponseGroupsItemMetadata } from './UpdateCommunityResponseGroupsItemMetadata'; import { UpdateCommunityResponseGroupsItemRequirementsItem } from './UpdateCommunityResponseGroupsItemRequirementsItem'; - export const UpdateCommunityResponseGroupsItem = core.serialization.object({ id: core.serialization.number().optional(), communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemMetadata.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemMetadata.d.ts index 8eb22824800..7cd42b28e38 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemMetadata.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemMetadata.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseGroupsItemMetadata: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItemMetadata.Raw, CommonApi.UpdateCommunityResponseGroupsItemMetadata diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemMetadata.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemMetadata.js index 22ed075e88e..10928d2a9b2 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemMetadata.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemMetadata.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseGroupsItemMetadata = core.serialization.object({ name: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.d.ts index a76dd350dd8..55d4c322ff4 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseGroupsItemRequirementsItemAllow } from './UpdateCommunityResponseGroupsItemRequirementsItemAllow'; import { UpdateCommunityResponseGroupsItemRequirementsItemThreshold } from './UpdateCommunityResponseGroupsItemRequirementsItemThreshold'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItem: core.serialization.Schema< serializers.UpdateCommunityResponseGroupsItemRequirementsItem.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItem @@ -15,12 +14,10 @@ export declare namespace UpdateCommunityResponseGroupsItemRequirementsItem { type Raw = | UpdateCommunityResponseGroupsItemRequirementsItem.Threshold | UpdateCommunityResponseGroupsItemRequirementsItem.Allow; - interface Threshold extends UpdateCommunityResponseGroupsItemRequirementsItemThreshold.Raw { rule: 'threshold'; } - interface Allow extends UpdateCommunityResponseGroupsItemRequirementsItemAllow.Raw { rule: 'allow'; diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.js index 08da3eb1815..517d22706df 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityResponseGroupsItemRequirementsItemAllow } from './UpdateCommunityResponseGroupsItemRequirementsItemAllow'; import { UpdateCommunityResponseGroupsItemRequirementsItemThreshold } from './UpdateCommunityResponseGroupsItemRequirementsItemThreshold'; - export const UpdateCommunityResponseGroupsItemRequirementsItem = core.serialization .union('rule', { diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.d.ts index 6b14d9f3fae..24972b4f949 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseGroupsItemRequirementsItemAllowData } from './UpdateCommunityResponseGroupsItemRequirementsItemAllowData'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemAllow: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemAllow.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemAllow diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.js index 000cd75cede..bff4f8bee63 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllow.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseGroupsItemRequirementsItemAllowData } from './UpdateCommunityResponseGroupsItemRequirementsItemAllowData'; - export const UpdateCommunityResponseGroupsItemRequirementsItemAllow = core.serialization.object({ data: UpdateCommunityResponseGroupsItemRequirementsItemAllowData, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllowData.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllowData.d.ts index 8915ba8eaf4..0d91fbca3f4 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllowData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllowData.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemAllowData: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemAllowData.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemAllowData diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllowData.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllowData.js index 56a94bb826c..719db0efcaf 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllowData.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemAllowData.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseGroupsItemRequirementsItemAllowData = core.serialization.object({ allow: core.serialization.list(core.serialization.string()), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.d.ts index ea1eee4f411..1e533aaaf98 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdData } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdData'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemThreshold: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemThreshold.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThreshold diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.js index a856d1ec63a..dffd335a350 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThreshold.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdData } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdData'; - export const UpdateCommunityResponseGroupsItemRequirementsItemThreshold = core.serialization.object({ data: UpdateCommunityResponseGroupsItemRequirementsItemThresholdData, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.d.ts index a46a6813f5f..4d9036b3f9f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemThresholdData: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdData diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.js index dc3885e0b72..3aee89634cb 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdData.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource'; - export const UpdateCommunityResponseGroupsItemRequirementsItemThresholdData = core.serialization.object({ threshold: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.d.ts index fd55fd8d4ea..7f62ea72d31 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.d.ts @@ -8,7 +8,6 @@ import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource: core.serialization.Schema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.js index 50ecfaf1c48..79587e12805 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource.js @@ -6,7 +6,6 @@ import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol'; - export const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSource = core.serialization.undiscriminatedUnion([ UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne.d.ts index 973245f5082..f9c8ce85f41 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne.js index 1328d90ea26..418f0d38c29 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceOne = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts index d97d4a80a7b..bf92dc05d5f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.js index a7c12554756..c6d2fcf4825 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType'; - export const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThree = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts index 7fa4fcbe0a3..1327b539e61 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType: core.serialization.Schema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js index 8a58535ff25..215e50788bd 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceThreeSourceType = core.serialization.enum_(['cw721', 'cw20']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts index e2751e17bed..7de63e94f9f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.js index 24a2c462a2d..696c1c77b32 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType } from './UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType'; - export const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenId = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts index 764b8233df4..4b03b781963 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType: core.serialization.Schema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js index 80e7548009f..c260ef07e6e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenIdSourceType = core.serialization.enum_(['erc20', 'erc721', 'erc1155', 'spl']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts index ba1ee0dfc2f..07b85c5f566 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.Raw, CommonApi.UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js index 3fcdd969675..890cdd8676f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseGroupsItemRequirementsItemThresholdDataSourceTokenSymbol = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseHasHomepage.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseHasHomepage.d.ts index 5427ae6ee82..8b470bf1eb0 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseHasHomepage.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseHasHomepage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseHasHomepage: core.serialization.Schema< serializers.UpdateCommunityResponseHasHomepage.Raw, CommonApi.UpdateCommunityResponseHasHomepage diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseHasHomepage.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseHasHomepage.js index 26b7bf1e947..4752d413172 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseHasHomepage.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseHasHomepage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseHasHomepage = core.serialization.enum_([ 'true', 'false', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseSocialLinksItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseSocialLinksItem.d.ts index 7f857516e77..a113d06e169 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseSocialLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseSocialLinksItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseSocialLinksItem: core.serialization.Schema< serializers.UpdateCommunityResponseSocialLinksItem.Raw, CommonApi.UpdateCommunityResponseSocialLinksItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseSocialLinksItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseSocialLinksItem.js index 860ac284831..0513900759d 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseSocialLinksItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseSocialLinksItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseSocialLinksItem = core.serialization.undiscriminatedUnion([ core.serialization.unknown(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTerms.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTerms.d.ts index bc99ddc4f41..243a915b84d 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTerms.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTerms.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseTermsZero } from './UpdateCommunityResponseTermsZero'; - export declare const UpdateCommunityResponseTerms: core.serialization.Schema< serializers.UpdateCommunityResponseTerms.Raw, CommonApi.UpdateCommunityResponseTerms diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTerms.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTerms.js index d855eeac049..a29b9d04364 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTerms.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTerms.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateCommunityResponseTermsZero } from './UpdateCommunityResponseTermsZero'; - export const UpdateCommunityResponseTerms = core.serialization.undiscriminatedUnion([ UpdateCommunityResponseTermsZero, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTermsZero.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTermsZero.d.ts index 2fff588677c..b91e9c046e9 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTermsZero.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTermsZero.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseTermsZero: core.serialization.Schema< serializers.UpdateCommunityResponseTermsZero.Raw, CommonApi.UpdateCommunityResponseTermsZero diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTermsZero.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTermsZero.js index 545e112c962..3faf64dd48e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTermsZero.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTermsZero.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseTermsZero = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItem.d.ts index 7eb77f884b5..be452b91d85 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateCommunityResponseTopicsItemContestTopicsItem } from './UpdateCommunityResponseTopicsItemContestTopicsItem'; import { UpdateCommunityResponseTopicsItemWeightedVoting } from './UpdateCommunityResponseTopicsItemWeightedVoting'; - export declare const UpdateCommunityResponseTopicsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseTopicsItem.Raw, CommonApi.UpdateCommunityResponseTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItem.js index 2ebe61a3a9a..a662a65205d 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateCommunityResponseTopicsItemContestTopicsItem } from './UpdateCommunityResponseTopicsItemContestTopicsItem'; import { UpdateCommunityResponseTopicsItemWeightedVoting } from './UpdateCommunityResponseTopicsItemWeightedVoting'; - export const UpdateCommunityResponseTopicsItem = core.serialization.object({ id: core.serialization.number().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemContestTopicsItem.d.ts index 4cdfabc1260..11cfde5536f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseTopicsItemContestTopicsItem: core.serialization.ObjectSchema< serializers.UpdateCommunityResponseTopicsItemContestTopicsItem.Raw, CommonApi.UpdateCommunityResponseTopicsItemContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemContestTopicsItem.js index 4c850f72aab..f2bbec53778 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseTopicsItemContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemWeightedVoting.d.ts index 58cd382684f..7fd757bc1bf 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseTopicsItemWeightedVoting: core.serialization.Schema< serializers.UpdateCommunityResponseTopicsItemWeightedVoting.Raw, CommonApi.UpdateCommunityResponseTopicsItemWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemWeightedVoting.js index 4e06e134361..ffc1b393315 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseTopicsItemWeightedVoting.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseTopicsItemWeightedVoting = core.serialization.enum_(['stake', 'erc20']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseType.d.ts index 7c207e06be6..0ddf180c57a 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateCommunityResponseType: core.serialization.Schema< serializers.UpdateCommunityResponseType.Raw, CommonApi.UpdateCommunityResponseType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseType.js b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseType.js index e4742cfbee5..9d74f7b5a0b 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateCommunityResponseType.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateCommunityResponseType = core.serialization.enum_([ 'chain', 'dao', diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestMetadata.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestMetadata.d.ts index dd6c660084c..73514249545 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestMetadata.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestMetadata.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupRequestMetadata: core.serialization.ObjectSchema< serializers.UpdateGroupRequestMetadata.Raw, CommonApi.UpdateGroupRequestMetadata diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestMetadata.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestMetadata.js index 3be1e052cfb..b36b5a53a3b 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestMetadata.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestMetadata.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupRequestMetadata = core.serialization.object({ name: core.serialization.string(), description: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItem.d.ts index 9d449e7a600..9e97d08a716 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupRequestRequirementsItemAllow } from './UpdateGroupRequestRequirementsItemAllow'; import { UpdateGroupRequestRequirementsItemThreshold } from './UpdateGroupRequestRequirementsItemThreshold'; - export declare const UpdateGroupRequestRequirementsItem: core.serialization.Schema< serializers.UpdateGroupRequestRequirementsItem.Raw, CommonApi.UpdateGroupRequestRequirementsItem @@ -15,11 +14,9 @@ export declare namespace UpdateGroupRequestRequirementsItem { type Raw = | UpdateGroupRequestRequirementsItem.Threshold | UpdateGroupRequestRequirementsItem.Allow; - interface Threshold extends UpdateGroupRequestRequirementsItemThreshold.Raw { rule: 'threshold'; } - interface Allow extends UpdateGroupRequestRequirementsItemAllow.Raw { rule: 'allow'; } diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItem.js index 02320d74891..fe8437220e7 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateGroupRequestRequirementsItemAllow } from './UpdateGroupRequestRequirementsItemAllow'; import { UpdateGroupRequestRequirementsItemThreshold } from './UpdateGroupRequestRequirementsItemThreshold'; - export const UpdateGroupRequestRequirementsItem = core.serialization .union('rule', { threshold: UpdateGroupRequestRequirementsItemThreshold, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllow.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllow.d.ts index e8e9186370a..b5a657fe84c 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllow.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllow.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupRequestRequirementsItemAllowData } from './UpdateGroupRequestRequirementsItemAllowData'; - export declare const UpdateGroupRequestRequirementsItemAllow: core.serialization.ObjectSchema< serializers.UpdateGroupRequestRequirementsItemAllow.Raw, CommonApi.UpdateGroupRequestRequirementsItemAllow diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllow.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllow.js index 3a27134032a..c1223b3fd19 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllow.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllow.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupRequestRequirementsItemAllowData } from './UpdateGroupRequestRequirementsItemAllowData'; - export const UpdateGroupRequestRequirementsItemAllow = core.serialization.object({ data: UpdateGroupRequestRequirementsItemAllowData, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllowData.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllowData.d.ts index b03e467cb3f..274a9882b13 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllowData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllowData.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupRequestRequirementsItemAllowData: core.serialization.ObjectSchema< serializers.UpdateGroupRequestRequirementsItemAllowData.Raw, CommonApi.UpdateGroupRequestRequirementsItemAllowData diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllowData.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllowData.js index f0eb25a70fe..60f3e7a62a6 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllowData.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemAllowData.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupRequestRequirementsItemAllowData = core.serialization.object({ allow: core.serialization.list(core.serialization.string()), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.d.ts index dcb7a98e1d2..c6dfec14aa2 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupRequestRequirementsItemThresholdData } from './UpdateGroupRequestRequirementsItemThresholdData'; - export declare const UpdateGroupRequestRequirementsItemThreshold: core.serialization.ObjectSchema< serializers.UpdateGroupRequestRequirementsItemThreshold.Raw, CommonApi.UpdateGroupRequestRequirementsItemThreshold diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.js index 04dd8f220f7..e4d00e18767 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThreshold.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupRequestRequirementsItemThresholdData } from './UpdateGroupRequestRequirementsItemThresholdData'; - export const UpdateGroupRequestRequirementsItemThreshold = core.serialization.object({ data: UpdateGroupRequestRequirementsItemThresholdData, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.d.ts index e6fd8e38b6c..6a218983b72 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupRequestRequirementsItemThresholdDataSource } from './UpdateGroupRequestRequirementsItemThresholdDataSource'; - export declare const UpdateGroupRequestRequirementsItemThresholdData: core.serialization.ObjectSchema< serializers.UpdateGroupRequestRequirementsItemThresholdData.Raw, CommonApi.UpdateGroupRequestRequirementsItemThresholdData diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.js index dd8e3d9c9e8..fbc55848f1f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdData.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupRequestRequirementsItemThresholdDataSource } from './UpdateGroupRequestRequirementsItemThresholdDataSource'; - export const UpdateGroupRequestRequirementsItemThresholdData = core.serialization.object({ threshold: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.d.ts index 49f56d8adef..d3690dadf05 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.d.ts @@ -8,7 +8,6 @@ import { UpdateGroupRequestRequirementsItemThresholdDataSourceOne } from './Upda import { UpdateGroupRequestRequirementsItemThresholdDataSourceThree } from './UpdateGroupRequestRequirementsItemThresholdDataSourceThree'; import { UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId } from './UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId'; import { UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol } from './UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol'; - export declare const UpdateGroupRequestRequirementsItemThresholdDataSource: core.serialization.Schema< serializers.UpdateGroupRequestRequirementsItemThresholdDataSource.Raw, CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSource diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.js index 95d67857001..f678c8799e2 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSource.js @@ -6,7 +6,6 @@ import { UpdateGroupRequestRequirementsItemThresholdDataSourceOne } from './Upda import { UpdateGroupRequestRequirementsItemThresholdDataSourceThree } from './UpdateGroupRequestRequirementsItemThresholdDataSourceThree'; import { UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId } from './UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId'; import { UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol } from './UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol'; - export const UpdateGroupRequestRequirementsItemThresholdDataSource = core.serialization.undiscriminatedUnion([ UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceOne.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceOne.d.ts index 250a477ce44..832d3c4c5dd 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceOne.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceOne.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupRequestRequirementsItemThresholdDataSourceOne: core.serialization.ObjectSchema< serializers.UpdateGroupRequestRequirementsItemThresholdDataSourceOne.Raw, CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceOne.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceOne.js index 01fd508eae9..ac78d9731bc 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceOne.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceOne.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupRequestRequirementsItemThresholdDataSourceOne = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts index 79560b73900..c92e9815297 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType } from './UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType'; - export declare const UpdateGroupRequestRequirementsItemThresholdDataSourceThree: core.serialization.ObjectSchema< serializers.UpdateGroupRequestRequirementsItemThresholdDataSourceThree.Raw, CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceThree diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.js index 6e341f1046a..be7201d1507 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThree.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType } from './UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType'; - export const UpdateGroupRequestRequirementsItemThresholdDataSourceThree = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.d.ts index 662a8676840..5f2a16c3526 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType: core.serialization.Schema< serializers.UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.Raw, CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.js index 789e3860dd5..7bd4f2ab3d4 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupRequestRequirementsItemThresholdDataSourceThreeSourceType = core.serialization.enum_(['cw721', 'cw20']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts index fb32e45f0dc..7b18ac5c576 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType } from './UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType'; - export declare const UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId: core.serialization.ObjectSchema< serializers.UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.Raw, CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.js index 56fa5b5a48f..3b318f4c0c1 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType } from './UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType'; - export const UpdateGroupRequestRequirementsItemThresholdDataSourceTokenId = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts index 11c79b2d879..700c6eff36b 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType: core.serialization.Schema< serializers.UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.Raw, CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.js index 4f2c59c1781..1699c9c5288 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupRequestRequirementsItemThresholdDataSourceTokenIdSourceType = core.serialization.enum_(['erc20', 'erc721', 'erc1155', 'spl']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.d.ts index f7cf8deab13..e546a6f9bf6 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol: core.serialization.ObjectSchema< serializers.UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.Raw, CommonApi.UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.js index d91316291cf..21b15a180e8 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupRequestRequirementsItemThresholdDataSourceTokenSymbol = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponse.d.ts index 165770855db..496f9168b46 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponse.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupResponseMetadata } from './UpdateGroupResponseMetadata'; import { UpdateGroupResponseRequirementsItem } from './UpdateGroupResponseRequirementsItem'; - export declare const UpdateGroupResponse: core.serialization.ObjectSchema< serializers.UpdateGroupResponse.Raw, CommonApi.UpdateGroupResponse diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponse.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponse.js index a09f0b5d354..e4cfc589ee8 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponse.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateGroupResponseMetadata } from './UpdateGroupResponseMetadata'; import { UpdateGroupResponseRequirementsItem } from './UpdateGroupResponseRequirementsItem'; - export const UpdateGroupResponse = core.serialization.object({ id: core.serialization.number().optional(), communityId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseMetadata.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseMetadata.d.ts index 766772ef4f0..b7222194f9b 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseMetadata.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseMetadata.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupResponseMetadata: core.serialization.ObjectSchema< serializers.UpdateGroupResponseMetadata.Raw, CommonApi.UpdateGroupResponseMetadata diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseMetadata.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseMetadata.js index 85f0d28a476..7bec1d11820 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseMetadata.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseMetadata.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupResponseMetadata = core.serialization.object({ name: core.serialization.string(), description: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItem.d.ts index b40a0382bb0..8994a95aa8e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItem.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupResponseRequirementsItemAllow } from './UpdateGroupResponseRequirementsItemAllow'; import { UpdateGroupResponseRequirementsItemThreshold } from './UpdateGroupResponseRequirementsItemThreshold'; - export declare const UpdateGroupResponseRequirementsItem: core.serialization.Schema< serializers.UpdateGroupResponseRequirementsItem.Raw, CommonApi.UpdateGroupResponseRequirementsItem @@ -15,11 +14,9 @@ export declare namespace UpdateGroupResponseRequirementsItem { type Raw = | UpdateGroupResponseRequirementsItem.Threshold | UpdateGroupResponseRequirementsItem.Allow; - interface Threshold extends UpdateGroupResponseRequirementsItemThreshold.Raw { rule: 'threshold'; } - interface Allow extends UpdateGroupResponseRequirementsItemAllow.Raw { rule: 'allow'; } diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItem.js index 76c82c5cee2..07fc4a6393f 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItem.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateGroupResponseRequirementsItemAllow } from './UpdateGroupResponseRequirementsItemAllow'; import { UpdateGroupResponseRequirementsItemThreshold } from './UpdateGroupResponseRequirementsItemThreshold'; - export const UpdateGroupResponseRequirementsItem = core.serialization .union('rule', { threshold: UpdateGroupResponseRequirementsItemThreshold, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllow.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllow.d.ts index 0de20d6d1df..1fdc34b288a 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllow.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllow.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupResponseRequirementsItemAllowData } from './UpdateGroupResponseRequirementsItemAllowData'; - export declare const UpdateGroupResponseRequirementsItemAllow: core.serialization.ObjectSchema< serializers.UpdateGroupResponseRequirementsItemAllow.Raw, CommonApi.UpdateGroupResponseRequirementsItemAllow diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllow.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllow.js index 65885dfcc53..cfa2ae4e927 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllow.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllow.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupResponseRequirementsItemAllowData } from './UpdateGroupResponseRequirementsItemAllowData'; - export const UpdateGroupResponseRequirementsItemAllow = core.serialization.object({ data: UpdateGroupResponseRequirementsItemAllowData, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllowData.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllowData.d.ts index 876ee5021d6..4acc3a27c01 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllowData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllowData.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupResponseRequirementsItemAllowData: core.serialization.ObjectSchema< serializers.UpdateGroupResponseRequirementsItemAllowData.Raw, CommonApi.UpdateGroupResponseRequirementsItemAllowData diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllowData.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllowData.js index 59952672b3f..470a8177a6b 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllowData.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemAllowData.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupResponseRequirementsItemAllowData = core.serialization.object({ allow: core.serialization.list(core.serialization.string()), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.d.ts index 40b59745d22..9af2c1bc5bf 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupResponseRequirementsItemThresholdData } from './UpdateGroupResponseRequirementsItemThresholdData'; - export declare const UpdateGroupResponseRequirementsItemThreshold: core.serialization.ObjectSchema< serializers.UpdateGroupResponseRequirementsItemThreshold.Raw, CommonApi.UpdateGroupResponseRequirementsItemThreshold diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.js index d77b9a88fea..0b8e521bf9c 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThreshold.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupResponseRequirementsItemThresholdData } from './UpdateGroupResponseRequirementsItemThresholdData'; - export const UpdateGroupResponseRequirementsItemThreshold = core.serialization.object({ data: UpdateGroupResponseRequirementsItemThresholdData, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.d.ts index 10001c1fc1d..c40c27992fe 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupResponseRequirementsItemThresholdDataSource } from './UpdateGroupResponseRequirementsItemThresholdDataSource'; - export declare const UpdateGroupResponseRequirementsItemThresholdData: core.serialization.ObjectSchema< serializers.UpdateGroupResponseRequirementsItemThresholdData.Raw, CommonApi.UpdateGroupResponseRequirementsItemThresholdData diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.js index 4e10eef6233..bc6954e36ff 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdData.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupResponseRequirementsItemThresholdDataSource } from './UpdateGroupResponseRequirementsItemThresholdDataSource'; - export const UpdateGroupResponseRequirementsItemThresholdData = core.serialization.object({ threshold: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.d.ts index ade856e2ad4..02f212f9584 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.d.ts @@ -8,7 +8,6 @@ import { UpdateGroupResponseRequirementsItemThresholdDataSourceOne } from './Upd import { UpdateGroupResponseRequirementsItemThresholdDataSourceThree } from './UpdateGroupResponseRequirementsItemThresholdDataSourceThree'; import { UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId } from './UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId'; import { UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol } from './UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol'; - export declare const UpdateGroupResponseRequirementsItemThresholdDataSource: core.serialization.Schema< serializers.UpdateGroupResponseRequirementsItemThresholdDataSource.Raw, CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSource diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.js index 00faf52a5ee..4fdc1dbd091 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSource.js @@ -6,7 +6,6 @@ import { UpdateGroupResponseRequirementsItemThresholdDataSourceOne } from './Upd import { UpdateGroupResponseRequirementsItemThresholdDataSourceThree } from './UpdateGroupResponseRequirementsItemThresholdDataSourceThree'; import { UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId } from './UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId'; import { UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol } from './UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol'; - export const UpdateGroupResponseRequirementsItemThresholdDataSource = core.serialization.undiscriminatedUnion([ UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId, diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceOne.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceOne.d.ts index 63ca763ac9d..4225a99277b 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceOne.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceOne.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupResponseRequirementsItemThresholdDataSourceOne: core.serialization.ObjectSchema< serializers.UpdateGroupResponseRequirementsItemThresholdDataSourceOne.Raw, CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceOne diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceOne.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceOne.js index aefc7cbe6c0..aa50d561ba2 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceOne.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceOne.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupResponseRequirementsItemThresholdDataSourceOne = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.d.ts index 657df695d4e..17d89e0d31e 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType } from './UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType'; - export declare const UpdateGroupResponseRequirementsItemThresholdDataSourceThree: core.serialization.ObjectSchema< serializers.UpdateGroupResponseRequirementsItemThresholdDataSourceThree.Raw, CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceThree diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.js index ae510cb7ae1..90b071849fa 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThree.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType } from './UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType'; - export const UpdateGroupResponseRequirementsItemThresholdDataSourceThree = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType.d.ts index 5c32255be3d..2b08a519e48 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType: core.serialization.Schema< serializers.UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType.Raw, CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType.js index 4bb70fdc798..dbcfc5d4c95 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupResponseRequirementsItemThresholdDataSourceThreeSourceType = core.serialization.enum_(['cw721', 'cw20']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.d.ts index 714d149c391..e4f2ac71a80 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType } from './UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType'; - export declare const UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId: core.serialization.ObjectSchema< serializers.UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.Raw, CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.js index 7e4c52488a1..f7d24b861b5 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType } from './UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType'; - export const UpdateGroupResponseRequirementsItemThresholdDataSourceTokenId = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts index ffc2de9d2c6..691422ab38b 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType: core.serialization.Schema< serializers.UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType.Raw, CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType.js index 23370888b95..e77f050d618 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupResponseRequirementsItemThresholdDataSourceTokenIdSourceType = core.serialization.enum_(['erc20', 'erc721', 'erc1155', 'spl']); diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol.d.ts index 118f4cdc725..6628537dda9 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol: core.serialization.ObjectSchema< serializers.UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol.Raw, CommonApi.UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol.js b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol.js index b9907104c32..283c63fb873 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateGroupResponseRequirementsItemThresholdDataSourceTokenSymbol = core.serialization.object({ sourceType: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponse.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponse.d.ts index a7d3527c67f..97958fdd4f8 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponse.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponse.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateTopicResponseTopic } from './UpdateTopicResponseTopic'; - export declare const UpdateTopicResponse: core.serialization.ObjectSchema< serializers.UpdateTopicResponse.Raw, CommonApi.UpdateTopicResponse diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponse.js b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponse.js index b8711dfe8a2..36cd84132f0 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponse.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponse.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateTopicResponseTopic } from './UpdateTopicResponseTopic'; - export const UpdateTopicResponse = core.serialization.object({ topic: UpdateTopicResponseTopic, userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopic.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopic.d.ts index b0aa772f7cf..000189f4b90 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopic.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopic.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateTopicResponseTopicContestTopicsItem } from './UpdateTopicResponseTopicContestTopicsItem'; import { UpdateTopicResponseTopicWeightedVoting } from './UpdateTopicResponseTopicWeightedVoting'; - export declare const UpdateTopicResponseTopic: core.serialization.ObjectSchema< serializers.UpdateTopicResponseTopic.Raw, CommonApi.UpdateTopicResponseTopic diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopic.js b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopic.js index ed0163b224e..32593c9d594 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopic.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopic.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateTopicResponseTopicContestTopicsItem } from './UpdateTopicResponseTopicContestTopicsItem'; import { UpdateTopicResponseTopicWeightedVoting } from './UpdateTopicResponseTopicWeightedVoting'; - export const UpdateTopicResponseTopic = core.serialization.object({ id: core.serialization.number().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicContestTopicsItem.d.ts index a42e1bb473c..63e2989ed04 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateTopicResponseTopicContestTopicsItem: core.serialization.ObjectSchema< serializers.UpdateTopicResponseTopicContestTopicsItem.Raw, CommonApi.UpdateTopicResponseTopicContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicContestTopicsItem.js b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicContestTopicsItem.js index 8354f5f50ae..e905f9607af 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateTopicResponseTopicContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicWeightedVoting.d.ts index 2b0d6509b5f..bc96da114ef 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateTopicResponseTopicWeightedVoting: core.serialization.Schema< serializers.UpdateTopicResponseTopicWeightedVoting.Raw, CommonApi.UpdateTopicResponseTopicWeightedVoting diff --git a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicWeightedVoting.js b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicWeightedVoting.js index 17e14d94c71..8b5b5f515a3 100644 --- a/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/community/types/UpdateTopicResponseTopicWeightedVoting.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateTopicResponseTopicWeightedVoting = core.serialization.enum_([ 'stake', 'erc20', diff --git a/libs/api-client/src/serialization/resources/reaction/client/requests/CreateCommentReactionRequest.d.ts b/libs/api-client/src/serialization/resources/reaction/client/requests/CreateCommentReactionRequest.d.ts index ca3f272b048..f6874c9b9de 100644 --- a/libs/api-client/src/serialization/resources/reaction/client/requests/CreateCommentReactionRequest.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/client/requests/CreateCommentReactionRequest.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; - export declare const CreateCommentReactionRequest: core.serialization.Schema< serializers.CreateCommentReactionRequest.Raw, CommonApi.CreateCommentReactionRequest diff --git a/libs/api-client/src/serialization/resources/reaction/client/requests/CreateCommentReactionRequest.js b/libs/api-client/src/serialization/resources/reaction/client/requests/CreateCommentReactionRequest.js index a4cb0e6ea57..a3b4de3fa7e 100644 --- a/libs/api-client/src/serialization/resources/reaction/client/requests/CreateCommentReactionRequest.js +++ b/libs/api-client/src/serialization/resources/reaction/client/requests/CreateCommentReactionRequest.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../../core'; - export const CreateCommentReactionRequest = core.serialization.object({ commentId: core.serialization.property( 'comment_id', diff --git a/libs/api-client/src/serialization/resources/reaction/client/requests/CreateThreadReactionRequest.d.ts b/libs/api-client/src/serialization/resources/reaction/client/requests/CreateThreadReactionRequest.d.ts index dbbb4628ec5..bcd92faaad1 100644 --- a/libs/api-client/src/serialization/resources/reaction/client/requests/CreateThreadReactionRequest.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/client/requests/CreateThreadReactionRequest.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; - export declare const CreateThreadReactionRequest: core.serialization.Schema< serializers.CreateThreadReactionRequest.Raw, CommonApi.CreateThreadReactionRequest diff --git a/libs/api-client/src/serialization/resources/reaction/client/requests/CreateThreadReactionRequest.js b/libs/api-client/src/serialization/resources/reaction/client/requests/CreateThreadReactionRequest.js index 96ac8f70e83..4f4e6f7ed06 100644 --- a/libs/api-client/src/serialization/resources/reaction/client/requests/CreateThreadReactionRequest.js +++ b/libs/api-client/src/serialization/resources/reaction/client/requests/CreateThreadReactionRequest.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../../core'; - export const CreateThreadReactionRequest = core.serialization.object({ threadId: core.serialization.property( 'thread_id', diff --git a/libs/api-client/src/serialization/resources/reaction/client/requests/DeleteReactionRequest.d.ts b/libs/api-client/src/serialization/resources/reaction/client/requests/DeleteReactionRequest.d.ts index 0a4d4711e28..efc357c6b92 100644 --- a/libs/api-client/src/serialization/resources/reaction/client/requests/DeleteReactionRequest.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/client/requests/DeleteReactionRequest.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; - export declare const DeleteReactionRequest: core.serialization.Schema< serializers.DeleteReactionRequest.Raw, CommonApi.DeleteReactionRequest diff --git a/libs/api-client/src/serialization/resources/reaction/client/requests/DeleteReactionRequest.js b/libs/api-client/src/serialization/resources/reaction/client/requests/DeleteReactionRequest.js index c8cd0e0d8e5..a491a652c57 100644 --- a/libs/api-client/src/serialization/resources/reaction/client/requests/DeleteReactionRequest.js +++ b/libs/api-client/src/serialization/resources/reaction/client/requests/DeleteReactionRequest.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../../core'; - export const DeleteReactionRequest = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponse.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponse.d.ts index 387ec78683b..bcff358efd4 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponse.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponse.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentReactionResponseAddress } from './CreateCommentReactionResponseAddress'; - export declare const CreateCommentReactionResponse: core.serialization.ObjectSchema< serializers.CreateCommentReactionResponse.Raw, CommonApi.CreateCommentReactionResponse diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponse.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponse.js index 76c47b6b90d..3c7e76cdb62 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponse.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponse.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentReactionResponseAddress } from './CreateCommentReactionResponseAddress'; - export const CreateCommentReactionResponse = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddress.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddress.d.ts index 0f81e5d9543..2c8c28b8d20 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddress.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateCommentReactionResponseAddressRole } from './CreateCommentReactionResponseAddressRole'; import { CreateCommentReactionResponseAddressUser } from './CreateCommentReactionResponseAddressUser'; import { CreateCommentReactionResponseAddressWalletId } from './CreateCommentReactionResponseAddressWalletId'; - export declare const CreateCommentReactionResponseAddress: core.serialization.ObjectSchema< serializers.CreateCommentReactionResponseAddress.Raw, CommonApi.CreateCommentReactionResponseAddress diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddress.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddress.js index 45e232952f8..a44131bf80d 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddress.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateCommentReactionResponseAddressRole } from './CreateCommentReactionResponseAddressRole'; import { CreateCommentReactionResponseAddressUser } from './CreateCommentReactionResponseAddressUser'; import { CreateCommentReactionResponseAddressWalletId } from './CreateCommentReactionResponseAddressWalletId'; - export const CreateCommentReactionResponseAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressRole.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressRole.d.ts index 360c0e3930b..1aee25e6136 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentReactionResponseAddressRole: core.serialization.Schema< serializers.CreateCommentReactionResponseAddressRole.Raw, CommonApi.CreateCommentReactionResponseAddressRole diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressRole.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressRole.js index 744f78247f2..77503aa1958 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressRole.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentReactionResponseAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUser.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUser.d.ts index 81da43134e3..fbe1df5772b 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUser.d.ts @@ -8,7 +8,6 @@ import { CreateCommentReactionResponseAddressUserApiKey } from './CreateCommentR import { CreateCommentReactionResponseAddressUserEmailNotificationInterval } from './CreateCommentReactionResponseAddressUserEmailNotificationInterval'; import { CreateCommentReactionResponseAddressUserProfile } from './CreateCommentReactionResponseAddressUserProfile'; import { CreateCommentReactionResponseAddressUserProfileTagsItem } from './CreateCommentReactionResponseAddressUserProfileTagsItem'; - export declare const CreateCommentReactionResponseAddressUser: core.serialization.ObjectSchema< serializers.CreateCommentReactionResponseAddressUser.Raw, CommonApi.CreateCommentReactionResponseAddressUser diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUser.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUser.js index ea4a38f741b..cc434538bfa 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUser.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUser.js @@ -6,7 +6,6 @@ import { CreateCommentReactionResponseAddressUserApiKey } from './CreateCommentR import { CreateCommentReactionResponseAddressUserEmailNotificationInterval } from './CreateCommentReactionResponseAddressUserEmailNotificationInterval'; import { CreateCommentReactionResponseAddressUserProfile } from './CreateCommentReactionResponseAddressUserProfile'; import { CreateCommentReactionResponseAddressUserProfileTagsItem } from './CreateCommentReactionResponseAddressUserProfileTagsItem'; - export const CreateCommentReactionResponseAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..1c15af561fa --- /dev/null +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateCommentReactionResponseAddressUserApiKey: core.serialization.ObjectSchema< + serializers.CreateCommentReactionResponseAddressUserApiKey.Raw, + CommonApi.CreateCommentReactionResponseAddressUserApiKey +>; +export declare namespace CreateCommentReactionResponseAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.js new file mode 100644 index 00000000000..fe016910adb --- /dev/null +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateCommentReactionResponseAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserEmailNotificationInterval.d.ts index cdce8d6e0f1..4a1a0e3c8de 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentReactionResponseAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateCommentReactionResponseAddressUserEmailNotificationInterval.Raw, CommonApi.CreateCommentReactionResponseAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserEmailNotificationInterval.js index 26d1bd2bc6a..44f0fb250b4 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentReactionResponseAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.d.ts index 36d6f583033..420614ee84c 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateCommentReactionResponseAddressUserProfileBackgroundImage } from './CreateCommentReactionResponseAddressUserProfileBackgroundImage'; - export declare const CreateCommentReactionResponseAddressUserProfile: core.serialization.ObjectSchema< serializers.CreateCommentReactionResponseAddressUserProfile.Raw, CommonApi.CreateCommentReactionResponseAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.js index 70d97916e10..e96ec1cd7cb 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateCommentReactionResponseAddressUserProfileBackgroundImage } from './CreateCommentReactionResponseAddressUserProfileBackgroundImage'; - export const CreateCommentReactionResponseAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileBackgroundImage.d.ts index 79b266a5f59..1d2a6aeb6c3 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentReactionResponseAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateCommentReactionResponseAddressUserProfileBackgroundImage.Raw, CommonApi.CreateCommentReactionResponseAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileBackgroundImage.js index a366af0e223..88f13ef842b 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentReactionResponseAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileTagsItem.d.ts index c0a02226f07..6eddee07d4d 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentReactionResponseAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateCommentReactionResponseAddressUserProfileTagsItem.Raw, CommonApi.CreateCommentReactionResponseAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileTagsItem.js index 36636b107c2..64ce35fb720 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentReactionResponseAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressWalletId.d.ts index 278334f7b05..682ea3b28e2 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateCommentReactionResponseAddressWalletId: core.serialization.Schema< serializers.CreateCommentReactionResponseAddressWalletId.Raw, CommonApi.CreateCommentReactionResponseAddressWalletId diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressWalletId.js b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressWalletId.js index fad776c9992..9ce1837cc2b 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateCommentReactionResponseAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateCommentReactionResponseAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponse.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponse.d.ts index 299e0df705d..afe9d168bb9 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponse.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponse.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadReactionResponseAddress } from './CreateThreadReactionResponseAddress'; - export declare const CreateThreadReactionResponse: core.serialization.ObjectSchema< serializers.CreateThreadReactionResponse.Raw, CommonApi.CreateThreadReactionResponse diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponse.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponse.js index dc684e47364..37eadb0400a 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponse.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponse.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateThreadReactionResponseAddress } from './CreateThreadReactionResponseAddress'; - export const CreateThreadReactionResponse = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddress.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddress.d.ts index d66ad04e641..c6cbacbcc5e 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddress.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateThreadReactionResponseAddressRole } from './CreateThreadReactionResponseAddressRole'; import { CreateThreadReactionResponseAddressUser } from './CreateThreadReactionResponseAddressUser'; import { CreateThreadReactionResponseAddressWalletId } from './CreateThreadReactionResponseAddressWalletId'; - export declare const CreateThreadReactionResponseAddress: core.serialization.ObjectSchema< serializers.CreateThreadReactionResponseAddress.Raw, CommonApi.CreateThreadReactionResponseAddress diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddress.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddress.js index 92710aa60c8..d679bdf3d8c 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddress.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateThreadReactionResponseAddressRole } from './CreateThreadReactionResponseAddressRole'; import { CreateThreadReactionResponseAddressUser } from './CreateThreadReactionResponseAddressUser'; import { CreateThreadReactionResponseAddressWalletId } from './CreateThreadReactionResponseAddressWalletId'; - export const CreateThreadReactionResponseAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressRole.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressRole.d.ts index 4364af04a74..21902b06c22 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadReactionResponseAddressRole: core.serialization.Schema< serializers.CreateThreadReactionResponseAddressRole.Raw, CommonApi.CreateThreadReactionResponseAddressRole diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressRole.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressRole.js index 51c72ed8730..ca38abafe27 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressRole.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressRole.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadReactionResponseAddressRole = core.serialization.enum_( ['admin', 'moderator', 'member'], ); diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUser.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUser.d.ts index 330bb0d6078..c0b8d1a60ab 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUser.d.ts @@ -8,7 +8,6 @@ import { CreateThreadReactionResponseAddressUserApiKey } from './CreateThreadRea import { CreateThreadReactionResponseAddressUserEmailNotificationInterval } from './CreateThreadReactionResponseAddressUserEmailNotificationInterval'; import { CreateThreadReactionResponseAddressUserProfile } from './CreateThreadReactionResponseAddressUserProfile'; import { CreateThreadReactionResponseAddressUserProfileTagsItem } from './CreateThreadReactionResponseAddressUserProfileTagsItem'; - export declare const CreateThreadReactionResponseAddressUser: core.serialization.ObjectSchema< serializers.CreateThreadReactionResponseAddressUser.Raw, CommonApi.CreateThreadReactionResponseAddressUser diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUser.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUser.js index 46679d65f3a..4da0ebec406 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUser.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUser.js @@ -6,7 +6,6 @@ import { CreateThreadReactionResponseAddressUserApiKey } from './CreateThreadRea import { CreateThreadReactionResponseAddressUserEmailNotificationInterval } from './CreateThreadReactionResponseAddressUserEmailNotificationInterval'; import { CreateThreadReactionResponseAddressUserProfile } from './CreateThreadReactionResponseAddressUserProfile'; import { CreateThreadReactionResponseAddressUserProfileTagsItem } from './CreateThreadReactionResponseAddressUserProfileTagsItem'; - export const CreateThreadReactionResponseAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..55e463f5da0 --- /dev/null +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateThreadReactionResponseAddressUserApiKey: core.serialization.ObjectSchema< + serializers.CreateThreadReactionResponseAddressUserApiKey.Raw, + CommonApi.CreateThreadReactionResponseAddressUserApiKey +>; +export declare namespace CreateThreadReactionResponseAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.js new file mode 100644 index 00000000000..d51bc5dd6a0 --- /dev/null +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateThreadReactionResponseAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserEmailNotificationInterval.d.ts index 06ec8e1033f..eec2941b2e8 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadReactionResponseAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateThreadReactionResponseAddressUserEmailNotificationInterval.Raw, CommonApi.CreateThreadReactionResponseAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserEmailNotificationInterval.js index 3247f23dde8..9a442be295d 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadReactionResponseAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.d.ts index 55127a96217..1525ea036ef 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadReactionResponseAddressUserProfileBackgroundImage } from './CreateThreadReactionResponseAddressUserProfileBackgroundImage'; - export declare const CreateThreadReactionResponseAddressUserProfile: core.serialization.ObjectSchema< serializers.CreateThreadReactionResponseAddressUserProfile.Raw, CommonApi.CreateThreadReactionResponseAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.js index e524c849ca7..e33e47e2e19 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateThreadReactionResponseAddressUserProfileBackgroundImage } from './CreateThreadReactionResponseAddressUserProfileBackgroundImage'; - export const CreateThreadReactionResponseAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileBackgroundImage.d.ts index f5a27c759aa..dd28ae4ca09 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadReactionResponseAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateThreadReactionResponseAddressUserProfileBackgroundImage.Raw, CommonApi.CreateThreadReactionResponseAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileBackgroundImage.js index 180f14520d3..156cbe733ab 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadReactionResponseAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileTagsItem.d.ts index 6fa57ac3e4d..90b65ef9c37 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadReactionResponseAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateThreadReactionResponseAddressUserProfileTagsItem.Raw, CommonApi.CreateThreadReactionResponseAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileTagsItem.js index 362bc406f38..94acac7ad46 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadReactionResponseAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressWalletId.d.ts index c06e81394cd..14eef58cbc6 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadReactionResponseAddressWalletId: core.serialization.Schema< serializers.CreateThreadReactionResponseAddressWalletId.Raw, CommonApi.CreateThreadReactionResponseAddressWalletId diff --git a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressWalletId.js b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressWalletId.js index 0df086b4f4f..847991eb5ea 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/reaction/types/CreateThreadReactionResponseAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadReactionResponseAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/reaction/types/DeleteReactionResponse.d.ts b/libs/api-client/src/serialization/resources/reaction/types/DeleteReactionResponse.d.ts index a4834e45d62..f0b004b32c6 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/DeleteReactionResponse.d.ts +++ b/libs/api-client/src/serialization/resources/reaction/types/DeleteReactionResponse.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const DeleteReactionResponse: core.serialization.ObjectSchema< serializers.DeleteReactionResponse.Raw, CommonApi.DeleteReactionResponse diff --git a/libs/api-client/src/serialization/resources/reaction/types/DeleteReactionResponse.js b/libs/api-client/src/serialization/resources/reaction/types/DeleteReactionResponse.js index 6805041e10f..09141812319 100644 --- a/libs/api-client/src/serialization/resources/reaction/types/DeleteReactionResponse.js +++ b/libs/api-client/src/serialization/resources/reaction/types/DeleteReactionResponse.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const DeleteReactionResponse = core.serialization.object({ reactionId: core.serialization.property( 'reaction_id', diff --git a/libs/api-client/src/serialization/resources/thread/client/requests/CreateThreadRequest.d.ts b/libs/api-client/src/serialization/resources/thread/client/requests/CreateThreadRequest.d.ts index 232cc9ade8e..fbbc0a401ae 100644 --- a/libs/api-client/src/serialization/resources/thread/client/requests/CreateThreadRequest.d.ts +++ b/libs/api-client/src/serialization/resources/thread/client/requests/CreateThreadRequest.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../../core'; import * as serializers from '../../../../index'; import { CreateThreadRequestDiscordMeta } from '../../types/CreateThreadRequestDiscordMeta'; import { CreateThreadRequestKind } from '../../types/CreateThreadRequestKind'; - export declare const CreateThreadRequest: core.serialization.Schema< serializers.CreateThreadRequest.Raw, CommonApi.CreateThreadRequest diff --git a/libs/api-client/src/serialization/resources/thread/client/requests/CreateThreadRequest.js b/libs/api-client/src/serialization/resources/thread/client/requests/CreateThreadRequest.js index d1eee50ca2b..7b78f5ca0a7 100644 --- a/libs/api-client/src/serialization/resources/thread/client/requests/CreateThreadRequest.js +++ b/libs/api-client/src/serialization/resources/thread/client/requests/CreateThreadRequest.js @@ -4,7 +4,6 @@ import * as core from '../../../../../core'; import { CreateThreadRequestDiscordMeta } from '../../types/CreateThreadRequestDiscordMeta'; import { CreateThreadRequestKind } from '../../types/CreateThreadRequestKind'; - export const CreateThreadRequest = core.serialization.object({ communityId: core.serialization.property( 'community_id', diff --git a/libs/api-client/src/serialization/resources/thread/client/requests/DeleteThreadRequest.d.ts b/libs/api-client/src/serialization/resources/thread/client/requests/DeleteThreadRequest.d.ts index 176c896e464..f9165f8477d 100644 --- a/libs/api-client/src/serialization/resources/thread/client/requests/DeleteThreadRequest.d.ts +++ b/libs/api-client/src/serialization/resources/thread/client/requests/DeleteThreadRequest.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; - export declare const DeleteThreadRequest: core.serialization.Schema< serializers.DeleteThreadRequest.Raw, CommonApi.DeleteThreadRequest diff --git a/libs/api-client/src/serialization/resources/thread/client/requests/DeleteThreadRequest.js b/libs/api-client/src/serialization/resources/thread/client/requests/DeleteThreadRequest.js index eefb67d6ffd..4c81fd92990 100644 --- a/libs/api-client/src/serialization/resources/thread/client/requests/DeleteThreadRequest.js +++ b/libs/api-client/src/serialization/resources/thread/client/requests/DeleteThreadRequest.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../../core'; - export const DeleteThreadRequest = core.serialization.object({ threadId: core.serialization.property( 'thread_id', diff --git a/libs/api-client/src/serialization/resources/thread/client/requests/UpdateThreadRequest.d.ts b/libs/api-client/src/serialization/resources/thread/client/requests/UpdateThreadRequest.d.ts index 61600799aca..89165f17dab 100644 --- a/libs/api-client/src/serialization/resources/thread/client/requests/UpdateThreadRequest.d.ts +++ b/libs/api-client/src/serialization/resources/thread/client/requests/UpdateThreadRequest.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../../api/index'; import * as core from '../../../../../core'; import * as serializers from '../../../../index'; import { UpdateThreadRequestCollaborators } from '../../types/UpdateThreadRequestCollaborators'; - export declare const UpdateThreadRequest: core.serialization.Schema< serializers.UpdateThreadRequest.Raw, CommonApi.UpdateThreadRequest diff --git a/libs/api-client/src/serialization/resources/thread/client/requests/UpdateThreadRequest.js b/libs/api-client/src/serialization/resources/thread/client/requests/UpdateThreadRequest.js index c827be42dfa..3ec22719dee 100644 --- a/libs/api-client/src/serialization/resources/thread/client/requests/UpdateThreadRequest.js +++ b/libs/api-client/src/serialization/resources/thread/client/requests/UpdateThreadRequest.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../../core'; import { UpdateThreadRequestCollaborators } from '../../types/UpdateThreadRequestCollaborators'; - export const UpdateThreadRequest = core.serialization.object({ threadId: core.serialization.property( 'thread_id', diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMeta.d.ts index a7abcc9beb7..6b94cf3a9c3 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadRequestDiscordMetaUser } from './CreateThreadRequestDiscordMetaUser'; - export declare const CreateThreadRequestDiscordMeta: core.serialization.ObjectSchema< serializers.CreateThreadRequestDiscordMeta.Raw, CommonApi.CreateThreadRequestDiscordMeta diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMeta.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMeta.js index a65fd34550a..435f401f9d2 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateThreadRequestDiscordMetaUser } from './CreateThreadRequestDiscordMetaUser'; - export const CreateThreadRequestDiscordMeta = core.serialization.object({ user: CreateThreadRequestDiscordMetaUser, channelId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMetaUser.d.ts index 7f5a9938c55..7a6dfa78ee8 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadRequestDiscordMetaUser: core.serialization.ObjectSchema< serializers.CreateThreadRequestDiscordMetaUser.Raw, CommonApi.CreateThreadRequestDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMetaUser.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMetaUser.js index 22b2d153dce..51f34dd6857 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadRequestDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), username: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestKind.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestKind.d.ts index 007102ef967..41f77eab307 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestKind.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestKind.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadRequestKind: core.serialization.Schema< serializers.CreateThreadRequestKind.Raw, CommonApi.CreateThreadRequestKind diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestKind.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestKind.js index a391bc94acd..8072b951aa3 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestKind.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadRequestKind.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadRequestKind = core.serialization.enum_([ 'discussion', 'link', diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponse.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponse.d.ts index 5b82c0e9af3..4ba7eb3d4e0 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponse.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponse.d.ts @@ -12,7 +12,6 @@ import { CreateThreadResponseReactionsItem } from './CreateThreadResponseReactio import { CreateThreadResponseSearch } from './CreateThreadResponseSearch'; import { CreateThreadResponseThreadVersionHistoriesItem } from './CreateThreadResponseThreadVersionHistoriesItem'; import { CreateThreadResponseTopic } from './CreateThreadResponseTopic'; - export declare const CreateThreadResponse: core.serialization.ObjectSchema< serializers.CreateThreadResponse.Raw, CommonApi.CreateThreadResponse @@ -23,14 +22,13 @@ export declare namespace CreateThreadResponse { address_id: number; title: string; kind: string; - stage: string; + stage?: string | null; body?: string | null; - plaintext?: string | null; url?: string | null; topic_id?: number | null; pinned?: boolean | null; community_id: string; - view_count: number; + view_count?: number | null; links?: CreateThreadResponseLinksItem.Raw[] | null; content_url?: string | null; read_only?: boolean | null; @@ -46,9 +44,9 @@ export declare namespace CreateThreadResponse { archived_at?: string | null; locked_at?: string | null; discord_meta?: CreateThreadResponseDiscordMeta.Raw | null; - reaction_count: number; - reaction_weights_sum: number; - comment_count: number; + reaction_count?: number | null; + reaction_weights_sum?: number | null; + comment_count?: number | null; activity_rank_date?: string | null; created_by?: string | null; profile_name?: string | null; diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponse.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponse.js index 4c8151803a2..1ad7c570987 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponse.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponse.js @@ -10,7 +10,6 @@ import { CreateThreadResponseReactionsItem } from './CreateThreadResponseReactio import { CreateThreadResponseSearch } from './CreateThreadResponseSearch'; import { CreateThreadResponseThreadVersionHistoriesItem } from './CreateThreadResponseThreadVersionHistoriesItem'; import { CreateThreadResponseTopic } from './CreateThreadResponseTopic'; - export const CreateThreadResponse = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( @@ -19,9 +18,8 @@ export const CreateThreadResponse = core.serialization.object({ ), title: core.serialization.string(), kind: core.serialization.string(), - stage: core.serialization.string(), + stage: core.serialization.string().optional(), body: core.serialization.string().optional(), - plaintext: core.serialization.string().optional(), url: core.serialization.string().optional(), topicId: core.serialization.property( 'topic_id', @@ -34,7 +32,7 @@ export const CreateThreadResponse = core.serialization.object({ ), viewCount: core.serialization.property( 'view_count', - core.serialization.number(), + core.serialization.number().optional(), ), links: core.serialization.list(CreateThreadResponseLinksItem).optional(), contentUrl: core.serialization.property( @@ -95,15 +93,15 @@ export const CreateThreadResponse = core.serialization.object({ ), reactionCount: core.serialization.property( 'reaction_count', - core.serialization.number(), + core.serialization.number().optional(), ), reactionWeightsSum: core.serialization.property( 'reaction_weights_sum', - core.serialization.number(), + core.serialization.number().optional(), ), commentCount: core.serialization.property( 'comment_count', - core.serialization.number(), + core.serialization.number().optional(), ), activityRankDate: core.serialization.property( 'activity_rank_date', diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddress.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddress.d.ts index d0d1c36ffa4..437b14b7a28 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddress.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateThreadResponseAddressRole } from './CreateThreadResponseAddressRole'; import { CreateThreadResponseAddressUser } from './CreateThreadResponseAddressUser'; import { CreateThreadResponseAddressWalletId } from './CreateThreadResponseAddressWalletId'; - export declare const CreateThreadResponseAddress: core.serialization.ObjectSchema< serializers.CreateThreadResponseAddress.Raw, CommonApi.CreateThreadResponseAddress diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddress.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddress.js index 8e1be33b873..57f5452cc3b 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddress.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateThreadResponseAddressRole } from './CreateThreadResponseAddressRole'; import { CreateThreadResponseAddressUser } from './CreateThreadResponseAddressUser'; import { CreateThreadResponseAddressWalletId } from './CreateThreadResponseAddressWalletId'; - export const CreateThreadResponseAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressRole.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressRole.d.ts index 59a52a79268..9ba8182d648 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseAddressRole: core.serialization.Schema< serializers.CreateThreadResponseAddressRole.Raw, CommonApi.CreateThreadResponseAddressRole diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressRole.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressRole.js index db038f1c640..7dc826d741a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressRole.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressRole.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseAddressRole = core.serialization.enum_([ 'admin', 'moderator', diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUser.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUser.d.ts index 64cb8c88bc3..cbca8cbb19f 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUser.d.ts @@ -8,7 +8,6 @@ import { CreateThreadResponseAddressUserApiKey } from './CreateThreadResponseAdd import { CreateThreadResponseAddressUserEmailNotificationInterval } from './CreateThreadResponseAddressUserEmailNotificationInterval'; import { CreateThreadResponseAddressUserProfile } from './CreateThreadResponseAddressUserProfile'; import { CreateThreadResponseAddressUserProfileTagsItem } from './CreateThreadResponseAddressUserProfileTagsItem'; - export declare const CreateThreadResponseAddressUser: core.serialization.ObjectSchema< serializers.CreateThreadResponseAddressUser.Raw, CommonApi.CreateThreadResponseAddressUser diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUser.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUser.js index 7e68a8cd085..4cc1e32708c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUser.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUser.js @@ -6,7 +6,6 @@ import { CreateThreadResponseAddressUserApiKey } from './CreateThreadResponseAdd import { CreateThreadResponseAddressUserEmailNotificationInterval } from './CreateThreadResponseAddressUserEmailNotificationInterval'; import { CreateThreadResponseAddressUserProfile } from './CreateThreadResponseAddressUserProfile'; import { CreateThreadResponseAddressUserProfileTagsItem } from './CreateThreadResponseAddressUserProfileTagsItem'; - export const CreateThreadResponseAddressUser = core.serialization.object({ id: core.serialization.number().optional(), email: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..3b5cf9d1c88 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateThreadResponseAddressUserApiKey: core.serialization.ObjectSchema< + serializers.CreateThreadResponseAddressUserApiKey.Raw, + CommonApi.CreateThreadResponseAddressUserApiKey +>; +export declare namespace CreateThreadResponseAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserApiKey.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserApiKey.js new file mode 100644 index 00000000000..798e68eeeab --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserApiKey.js @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateThreadResponseAddressUserApiKey = core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), +}); diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserEmailNotificationInterval.d.ts index 4f7afbe5eda..7923459fa52 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateThreadResponseAddressUserEmailNotificationInterval.Raw, CommonApi.CreateThreadResponseAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserEmailNotificationInterval.js index 9d04d3519f3..b7d1a3df4b7 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfile.d.ts index c0ec433fa79..6a95bd6c3e1 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadResponseAddressUserProfileBackgroundImage } from './CreateThreadResponseAddressUserProfileBackgroundImage'; - export declare const CreateThreadResponseAddressUserProfile: core.serialization.ObjectSchema< serializers.CreateThreadResponseAddressUserProfile.Raw, CommonApi.CreateThreadResponseAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfile.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfile.js index 9c58a85f775..e6439e08678 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateThreadResponseAddressUserProfileBackgroundImage } from './CreateThreadResponseAddressUserProfileBackgroundImage'; - export const CreateThreadResponseAddressUserProfile = core.serialization.object( { name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileBackgroundImage.d.ts index d75acd73ffa..5c3368ab42b 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateThreadResponseAddressUserProfileBackgroundImage.Raw, CommonApi.CreateThreadResponseAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileBackgroundImage.js index 80eccaecf1e..3ab1ea2fe38 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileTagsItem.d.ts index 2aad20120dd..ceb259c6d9a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateThreadResponseAddressUserProfileTagsItem.Raw, CommonApi.CreateThreadResponseAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileTagsItem.js index c5430279c9f..47726d158be 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressWalletId.d.ts index 83b672edb83..4fb0fea09ba 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseAddressWalletId: core.serialization.Schema< serializers.CreateThreadResponseAddressWalletId.Raw, CommonApi.CreateThreadResponseAddressWalletId diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressWalletId.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressWalletId.js index 6b8b0f1fcbe..df7515027b8 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseAddressWalletId = core.serialization.enum_([ 'magic', 'polkadot', diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItem.d.ts index f0d88f142b4..7f0754c308a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateThreadResponseCollaboratorsItemRole } from './CreateThreadResponseCollaboratorsItemRole'; import { CreateThreadResponseCollaboratorsItemUser } from './CreateThreadResponseCollaboratorsItemUser'; import { CreateThreadResponseCollaboratorsItemWalletId } from './CreateThreadResponseCollaboratorsItemWalletId'; - export declare const CreateThreadResponseCollaboratorsItem: core.serialization.ObjectSchema< serializers.CreateThreadResponseCollaboratorsItem.Raw, CommonApi.CreateThreadResponseCollaboratorsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItem.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItem.js index a9ef723f043..00787dcbcf8 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateThreadResponseCollaboratorsItemRole } from './CreateThreadResponseCollaboratorsItemRole'; import { CreateThreadResponseCollaboratorsItemUser } from './CreateThreadResponseCollaboratorsItemUser'; import { CreateThreadResponseCollaboratorsItemWalletId } from './CreateThreadResponseCollaboratorsItemWalletId'; - export const CreateThreadResponseCollaboratorsItem = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemRole.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemRole.d.ts index 61ead4d12d2..9cc22599d5f 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseCollaboratorsItemRole: core.serialization.Schema< serializers.CreateThreadResponseCollaboratorsItemRole.Raw, CommonApi.CreateThreadResponseCollaboratorsItemRole diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemRole.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemRole.js index 108ab14c203..5ae593f6104 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemRole.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseCollaboratorsItemRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.d.ts index 271ca588967..b995cb9de05 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.d.ts @@ -8,7 +8,6 @@ import { CreateThreadResponseCollaboratorsItemUserApiKey } from './CreateThreadR import { CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval } from './CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval'; import { CreateThreadResponseCollaboratorsItemUserProfile } from './CreateThreadResponseCollaboratorsItemUserProfile'; import { CreateThreadResponseCollaboratorsItemUserProfileTagsItem } from './CreateThreadResponseCollaboratorsItemUserProfileTagsItem'; - export declare const CreateThreadResponseCollaboratorsItemUser: core.serialization.ObjectSchema< serializers.CreateThreadResponseCollaboratorsItemUser.Raw, CommonApi.CreateThreadResponseCollaboratorsItemUser diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.js index 84ebcdc2a55..dc7feaaaf06 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUser.js @@ -6,7 +6,6 @@ import { CreateThreadResponseCollaboratorsItemUserApiKey } from './CreateThreadR import { CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval } from './CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval'; import { CreateThreadResponseCollaboratorsItemUserProfile } from './CreateThreadResponseCollaboratorsItemUserProfile'; import { CreateThreadResponseCollaboratorsItemUserProfileTagsItem } from './CreateThreadResponseCollaboratorsItemUserProfileTagsItem'; - export const CreateThreadResponseCollaboratorsItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..f2b49bc6264 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateThreadResponseCollaboratorsItemUserApiKey: core.serialization.ObjectSchema< + serializers.CreateThreadResponseCollaboratorsItemUserApiKey.Raw, + CommonApi.CreateThreadResponseCollaboratorsItemUserApiKey +>; +export declare namespace CreateThreadResponseCollaboratorsItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..3ece453f397 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateThreadResponseCollaboratorsItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval.d.ts index 0973f9a034f..d7171cd56e0 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval.Raw, CommonApi.CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval.js index 046eb32e8c9..5be640f21ff 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseCollaboratorsItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.d.ts index 1410acd73f1..7c12c5b20e6 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage } from './CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage'; - export declare const CreateThreadResponseCollaboratorsItemUserProfile: core.serialization.ObjectSchema< serializers.CreateThreadResponseCollaboratorsItemUserProfile.Raw, CommonApi.CreateThreadResponseCollaboratorsItemUserProfile diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.js index fc69cdbbd33..831ac316e10 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage } from './CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage'; - export const CreateThreadResponseCollaboratorsItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage.d.ts index a6b3259202d..522ba9ab81c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage.Raw, CommonApi.CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage.js index 310e438c9e4..62164dd02fb 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseCollaboratorsItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileTagsItem.d.ts index d3a27fe4ea3..4e05c756f2a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseCollaboratorsItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateThreadResponseCollaboratorsItemUserProfileTagsItem.Raw, CommonApi.CreateThreadResponseCollaboratorsItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileTagsItem.js index 52b108884eb..ca07a44ca31 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseCollaboratorsItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemWalletId.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemWalletId.d.ts index 4285dc4f730..5b825e35152 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseCollaboratorsItemWalletId: core.serialization.Schema< serializers.CreateThreadResponseCollaboratorsItemWalletId.Raw, CommonApi.CreateThreadResponseCollaboratorsItemWalletId diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemWalletId.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemWalletId.js index b58392c1aaa..0ea91ab87ed 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemWalletId.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseCollaboratorsItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseCollaboratorsItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMeta.d.ts index 8e50d6ca2de..fb10d0faa2e 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadResponseDiscordMetaUser } from './CreateThreadResponseDiscordMetaUser'; - export declare const CreateThreadResponseDiscordMeta: core.serialization.ObjectSchema< serializers.CreateThreadResponseDiscordMeta.Raw, CommonApi.CreateThreadResponseDiscordMeta diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMeta.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMeta.js index 7d8dea703d7..59483e37a5b 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateThreadResponseDiscordMetaUser } from './CreateThreadResponseDiscordMetaUser'; - export const CreateThreadResponseDiscordMeta = core.serialization.object({ user: CreateThreadResponseDiscordMetaUser, channelId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMetaUser.d.ts index f96061978fb..a308215bcea 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseDiscordMetaUser: core.serialization.ObjectSchema< serializers.CreateThreadResponseDiscordMetaUser.Raw, CommonApi.CreateThreadResponseDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMetaUser.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMetaUser.js index 86c8a468647..088bfa2d9cb 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), username: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItem.d.ts index 44b0902edc9..48a00cfbafd 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadResponseLinksItemSource } from './CreateThreadResponseLinksItemSource'; - export declare const CreateThreadResponseLinksItem: core.serialization.ObjectSchema< serializers.CreateThreadResponseLinksItem.Raw, CommonApi.CreateThreadResponseLinksItem diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItem.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItem.js index a5767029e3c..e86f36b23da 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateThreadResponseLinksItemSource } from './CreateThreadResponseLinksItemSource'; - export const CreateThreadResponseLinksItem = core.serialization.object({ source: CreateThreadResponseLinksItemSource, identifier: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItemSource.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItemSource.d.ts index f244a3a233d..fe50cee2d6a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItemSource.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItemSource.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseLinksItemSource: core.serialization.Schema< serializers.CreateThreadResponseLinksItemSource.Raw, CommonApi.CreateThreadResponseLinksItemSource diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItemSource.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItemSource.js index 497ab242a85..a163dd9f3bf 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItemSource.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseLinksItemSource.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseLinksItemSource = core.serialization.enum_([ 'snapshot', 'proposal', diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItem.d.ts index 7afe4853ea2..5fd9de07c97 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadResponseReactionsItemAddress } from './CreateThreadResponseReactionsItemAddress'; - export declare const CreateThreadResponseReactionsItem: core.serialization.ObjectSchema< serializers.CreateThreadResponseReactionsItem.Raw, CommonApi.CreateThreadResponseReactionsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItem.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItem.js index 2cd320b86cd..a98045ba4c8 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateThreadResponseReactionsItemAddress } from './CreateThreadResponseReactionsItemAddress'; - export const CreateThreadResponseReactionsItem = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddress.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddress.d.ts index f1d0ef96558..ad1e2a33153 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddress.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { CreateThreadResponseReactionsItemAddressRole } from './CreateThreadResponseReactionsItemAddressRole'; import { CreateThreadResponseReactionsItemAddressUser } from './CreateThreadResponseReactionsItemAddressUser'; import { CreateThreadResponseReactionsItemAddressWalletId } from './CreateThreadResponseReactionsItemAddressWalletId'; - export declare const CreateThreadResponseReactionsItemAddress: core.serialization.ObjectSchema< serializers.CreateThreadResponseReactionsItemAddress.Raw, CommonApi.CreateThreadResponseReactionsItemAddress diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddress.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddress.js index 0050c7fd7b0..2dd45782b0c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddress.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { CreateThreadResponseReactionsItemAddressRole } from './CreateThreadResponseReactionsItemAddressRole'; import { CreateThreadResponseReactionsItemAddressUser } from './CreateThreadResponseReactionsItemAddressUser'; import { CreateThreadResponseReactionsItemAddressWalletId } from './CreateThreadResponseReactionsItemAddressWalletId'; - export const CreateThreadResponseReactionsItemAddress = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressRole.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressRole.d.ts index 2299a5be0d1..4d1889676db 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseReactionsItemAddressRole: core.serialization.Schema< serializers.CreateThreadResponseReactionsItemAddressRole.Raw, CommonApi.CreateThreadResponseReactionsItemAddressRole diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressRole.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressRole.js index 093dc063b76..8d4face8001 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressRole.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseReactionsItemAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.d.ts index 2024a1f6982..286a6c63a5a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.d.ts @@ -8,7 +8,6 @@ import { CreateThreadResponseReactionsItemAddressUserApiKey } from './CreateThre import { CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval } from './CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval'; import { CreateThreadResponseReactionsItemAddressUserProfile } from './CreateThreadResponseReactionsItemAddressUserProfile'; import { CreateThreadResponseReactionsItemAddressUserProfileTagsItem } from './CreateThreadResponseReactionsItemAddressUserProfileTagsItem'; - export declare const CreateThreadResponseReactionsItemAddressUser: core.serialization.ObjectSchema< serializers.CreateThreadResponseReactionsItemAddressUser.Raw, CommonApi.CreateThreadResponseReactionsItemAddressUser diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.js index ec7ca886b78..50e86f2c40f 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUser.js @@ -6,7 +6,6 @@ import { CreateThreadResponseReactionsItemAddressUserApiKey } from './CreateThre import { CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval } from './CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval'; import { CreateThreadResponseReactionsItemAddressUserProfile } from './CreateThreadResponseReactionsItemAddressUserProfile'; import { CreateThreadResponseReactionsItemAddressUserProfileTagsItem } from './CreateThreadResponseReactionsItemAddressUserProfileTagsItem'; - export const CreateThreadResponseReactionsItemAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..91b55126876 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const CreateThreadResponseReactionsItemAddressUserApiKey: core.serialization.ObjectSchema< + serializers.CreateThreadResponseReactionsItemAddressUserApiKey.Raw, + CommonApi.CreateThreadResponseReactionsItemAddressUserApiKey +>; +export declare namespace CreateThreadResponseReactionsItemAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..22688568369 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const CreateThreadResponseReactionsItemAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval.d.ts index dfdb58a27a4..5233d55ea3a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval.Raw, CommonApi.CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval.js index 3306be9c4bc..9684a88f228 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseReactionsItemAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.d.ts index 8594fcc546e..f2becf3015c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage } from './CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage'; - export declare const CreateThreadResponseReactionsItemAddressUserProfile: core.serialization.ObjectSchema< serializers.CreateThreadResponseReactionsItemAddressUserProfile.Raw, CommonApi.CreateThreadResponseReactionsItemAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.js index 9ba267dc292..9409c1cc3aa 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage } from './CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage'; - export const CreateThreadResponseReactionsItemAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage.d.ts index 79d13345629..84fb748d606 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage.Raw, CommonApi.CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage.js index 9b1109901e6..35777f7081a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseReactionsItemAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileTagsItem.d.ts index bca52927957..e8f532ca9b2 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseReactionsItemAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.CreateThreadResponseReactionsItemAddressUserProfileTagsItem.Raw, CommonApi.CreateThreadResponseReactionsItemAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileTagsItem.js index fb554aca95e..9e692736507 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseReactionsItemAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressWalletId.d.ts index 4ab68b2951b..1ad05139228 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseReactionsItemAddressWalletId: core.serialization.Schema< serializers.CreateThreadResponseReactionsItemAddressWalletId.Raw, CommonApi.CreateThreadResponseReactionsItemAddressWalletId diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressWalletId.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressWalletId.js index d4f723801db..661fc86b9c3 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseReactionsItemAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseReactionsItemAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseSearch.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseSearch.d.ts index 791df7d6407..81b177db44e 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseSearch.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseSearch.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseSearch: core.serialization.Schema< serializers.CreateThreadResponseSearch.Raw, CommonApi.CreateThreadResponseSearch diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseSearch.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseSearch.js index 855398af5e2..c91efb59370 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseSearch.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseSearch.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseSearch = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseThreadVersionHistoriesItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseThreadVersionHistoriesItem.d.ts index 6537cc54ea3..1de21a102e0 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseThreadVersionHistoriesItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseThreadVersionHistoriesItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseThreadVersionHistoriesItem: core.serialization.ObjectSchema< serializers.CreateThreadResponseThreadVersionHistoriesItem.Raw, CommonApi.CreateThreadResponseThreadVersionHistoriesItem diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseThreadVersionHistoriesItem.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseThreadVersionHistoriesItem.js index cf79640f749..19bad013439 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseThreadVersionHistoriesItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseThreadVersionHistoriesItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseThreadVersionHistoriesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopic.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopic.d.ts index 107f0657b5b..a6ec61e80e6 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopic.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopic.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { CreateThreadResponseTopicContestTopicsItem } from './CreateThreadResponseTopicContestTopicsItem'; import { CreateThreadResponseTopicWeightedVoting } from './CreateThreadResponseTopicWeightedVoting'; - export declare const CreateThreadResponseTopic: core.serialization.ObjectSchema< serializers.CreateThreadResponseTopic.Raw, CommonApi.CreateThreadResponseTopic diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopic.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopic.js index 4721ea54d4f..1fd8fd444d3 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopic.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopic.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { CreateThreadResponseTopicContestTopicsItem } from './CreateThreadResponseTopicContestTopicsItem'; import { CreateThreadResponseTopicWeightedVoting } from './CreateThreadResponseTopicWeightedVoting'; - export const CreateThreadResponseTopic = core.serialization.object({ id: core.serialization.number().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicContestTopicsItem.d.ts index d058f121de0..f2baac9605c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseTopicContestTopicsItem: core.serialization.ObjectSchema< serializers.CreateThreadResponseTopicContestTopicsItem.Raw, CommonApi.CreateThreadResponseTopicContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicContestTopicsItem.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicContestTopicsItem.js index dd410e7e4ce..03da2ed6aee 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseTopicContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicWeightedVoting.d.ts index 28659bbda06..8107ee0f1ea 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const CreateThreadResponseTopicWeightedVoting: core.serialization.Schema< serializers.CreateThreadResponseTopicWeightedVoting.Raw, CommonApi.CreateThreadResponseTopicWeightedVoting diff --git a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicWeightedVoting.js b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicWeightedVoting.js index a0bee56ef25..b6d4de42b69 100644 --- a/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/thread/types/CreateThreadResponseTopicWeightedVoting.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const CreateThreadResponseTopicWeightedVoting = core.serialization.enum_( ['stake', 'erc20'], ); diff --git a/libs/api-client/src/serialization/resources/thread/types/DeleteThreadResponse.d.ts b/libs/api-client/src/serialization/resources/thread/types/DeleteThreadResponse.d.ts index 562378c7fbc..d2535a031d2 100644 --- a/libs/api-client/src/serialization/resources/thread/types/DeleteThreadResponse.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/DeleteThreadResponse.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const DeleteThreadResponse: core.serialization.ObjectSchema< serializers.DeleteThreadResponse.Raw, CommonApi.DeleteThreadResponse diff --git a/libs/api-client/src/serialization/resources/thread/types/DeleteThreadResponse.js b/libs/api-client/src/serialization/resources/thread/types/DeleteThreadResponse.js index 3d1576d9793..07b279c8368 100644 --- a/libs/api-client/src/serialization/resources/thread/types/DeleteThreadResponse.js +++ b/libs/api-client/src/serialization/resources/thread/types/DeleteThreadResponse.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const DeleteThreadResponse = core.serialization.object({ threadId: core.serialization.property( 'thread_id', diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadRequestCollaborators.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadRequestCollaborators.d.ts index f03d257a67d..2ad3d419391 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadRequestCollaborators.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadRequestCollaborators.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadRequestCollaborators: core.serialization.ObjectSchema< serializers.UpdateThreadRequestCollaborators.Raw, CommonApi.UpdateThreadRequestCollaborators diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadRequestCollaborators.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadRequestCollaborators.js index 78d55e94a58..abdcb4d6b0c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadRequestCollaborators.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadRequestCollaborators.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadRequestCollaborators = core.serialization.object({ toAdd: core.serialization.list(core.serialization.number()).optional(), toRemove: core.serialization.list(core.serialization.number()).optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponse.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponse.d.ts index fae1326d100..766c71836df 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponse.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponse.d.ts @@ -12,7 +12,6 @@ import { UpdateThreadResponseReactionsItem } from './UpdateThreadResponseReactio import { UpdateThreadResponseSearch } from './UpdateThreadResponseSearch'; import { UpdateThreadResponseThreadVersionHistoriesItem } from './UpdateThreadResponseThreadVersionHistoriesItem'; import { UpdateThreadResponseTopic } from './UpdateThreadResponseTopic'; - export declare const UpdateThreadResponse: core.serialization.ObjectSchema< serializers.UpdateThreadResponse.Raw, CommonApi.UpdateThreadResponse @@ -23,14 +22,13 @@ export declare namespace UpdateThreadResponse { address_id: number; title: string; kind: string; - stage: string; + stage?: string | null; body?: string | null; - plaintext?: string | null; url?: string | null; topic_id?: number | null; pinned?: boolean | null; community_id: string; - view_count: number; + view_count?: number | null; links?: UpdateThreadResponseLinksItem.Raw[] | null; content_url?: string | null; read_only?: boolean | null; @@ -46,9 +44,9 @@ export declare namespace UpdateThreadResponse { archived_at?: string | null; locked_at?: string | null; discord_meta?: UpdateThreadResponseDiscordMeta.Raw | null; - reaction_count: number; - reaction_weights_sum: number; - comment_count: number; + reaction_count?: number | null; + reaction_weights_sum?: number | null; + comment_count?: number | null; activity_rank_date?: string | null; created_by?: string | null; profile_name?: string | null; diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponse.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponse.js index 76d6b821078..71fcff38e4c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponse.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponse.js @@ -10,7 +10,6 @@ import { UpdateThreadResponseReactionsItem } from './UpdateThreadResponseReactio import { UpdateThreadResponseSearch } from './UpdateThreadResponseSearch'; import { UpdateThreadResponseThreadVersionHistoriesItem } from './UpdateThreadResponseThreadVersionHistoriesItem'; import { UpdateThreadResponseTopic } from './UpdateThreadResponseTopic'; - export const UpdateThreadResponse = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( @@ -19,9 +18,8 @@ export const UpdateThreadResponse = core.serialization.object({ ), title: core.serialization.string(), kind: core.serialization.string(), - stage: core.serialization.string(), + stage: core.serialization.string().optional(), body: core.serialization.string().optional(), - plaintext: core.serialization.string().optional(), url: core.serialization.string().optional(), topicId: core.serialization.property( 'topic_id', @@ -34,7 +32,7 @@ export const UpdateThreadResponse = core.serialization.object({ ), viewCount: core.serialization.property( 'view_count', - core.serialization.number(), + core.serialization.number().optional(), ), links: core.serialization.list(UpdateThreadResponseLinksItem).optional(), contentUrl: core.serialization.property( @@ -95,15 +93,15 @@ export const UpdateThreadResponse = core.serialization.object({ ), reactionCount: core.serialization.property( 'reaction_count', - core.serialization.number(), + core.serialization.number().optional(), ), reactionWeightsSum: core.serialization.property( 'reaction_weights_sum', - core.serialization.number(), + core.serialization.number().optional(), ), commentCount: core.serialization.property( 'comment_count', - core.serialization.number(), + core.serialization.number().optional(), ), activityRankDate: core.serialization.property( 'activity_rank_date', diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddress.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddress.d.ts index ddd573df95a..e3364d41bd7 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddress.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateThreadResponseAddressRole } from './UpdateThreadResponseAddressRole'; import { UpdateThreadResponseAddressUser } from './UpdateThreadResponseAddressUser'; import { UpdateThreadResponseAddressWalletId } from './UpdateThreadResponseAddressWalletId'; - export declare const UpdateThreadResponseAddress: core.serialization.ObjectSchema< serializers.UpdateThreadResponseAddress.Raw, CommonApi.UpdateThreadResponseAddress diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddress.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddress.js index 3161d728c27..46857ea577e 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddress.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateThreadResponseAddressRole } from './UpdateThreadResponseAddressRole'; import { UpdateThreadResponseAddressUser } from './UpdateThreadResponseAddressUser'; import { UpdateThreadResponseAddressWalletId } from './UpdateThreadResponseAddressWalletId'; - export const UpdateThreadResponseAddress = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressRole.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressRole.d.ts index 03c058a1c65..8f4c184a9f7 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseAddressRole: core.serialization.Schema< serializers.UpdateThreadResponseAddressRole.Raw, CommonApi.UpdateThreadResponseAddressRole diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressRole.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressRole.js index 38c1bddbd21..43d62b2095b 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressRole.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressRole.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseAddressRole = core.serialization.enum_([ 'admin', 'moderator', diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUser.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUser.d.ts index 43aee165ffa..2220f77fa51 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUser.d.ts @@ -8,7 +8,6 @@ import { UpdateThreadResponseAddressUserApiKey } from './UpdateThreadResponseAdd import { UpdateThreadResponseAddressUserEmailNotificationInterval } from './UpdateThreadResponseAddressUserEmailNotificationInterval'; import { UpdateThreadResponseAddressUserProfile } from './UpdateThreadResponseAddressUserProfile'; import { UpdateThreadResponseAddressUserProfileTagsItem } from './UpdateThreadResponseAddressUserProfileTagsItem'; - export declare const UpdateThreadResponseAddressUser: core.serialization.ObjectSchema< serializers.UpdateThreadResponseAddressUser.Raw, CommonApi.UpdateThreadResponseAddressUser diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUser.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUser.js index fa977ee0217..9e4ae2f1c03 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUser.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUser.js @@ -6,7 +6,6 @@ import { UpdateThreadResponseAddressUserApiKey } from './UpdateThreadResponseAdd import { UpdateThreadResponseAddressUserEmailNotificationInterval } from './UpdateThreadResponseAddressUserEmailNotificationInterval'; import { UpdateThreadResponseAddressUserProfile } from './UpdateThreadResponseAddressUserProfile'; import { UpdateThreadResponseAddressUserProfileTagsItem } from './UpdateThreadResponseAddressUserProfileTagsItem'; - export const UpdateThreadResponseAddressUser = core.serialization.object({ id: core.serialization.number().optional(), email: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserApiKey.d.ts new file mode 100644 index 00000000000..92fe9d0ead4 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateThreadResponseAddressUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateThreadResponseAddressUserApiKey.Raw, + CommonApi.UpdateThreadResponseAddressUserApiKey +>; +export declare namespace UpdateThreadResponseAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserApiKey.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserApiKey.js new file mode 100644 index 00000000000..fe67ac6b927 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserApiKey.js @@ -0,0 +1,23 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateThreadResponseAddressUserApiKey = core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), +}); diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserEmailNotificationInterval.d.ts index 95770d66c79..0945ab0ba9c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateThreadResponseAddressUserEmailNotificationInterval.Raw, CommonApi.UpdateThreadResponseAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserEmailNotificationInterval.js index 27d11de36b8..c05ab72c99d 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfile.d.ts index 7bae38b0066..e34e624c89f 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateThreadResponseAddressUserProfileBackgroundImage } from './UpdateThreadResponseAddressUserProfileBackgroundImage'; - export declare const UpdateThreadResponseAddressUserProfile: core.serialization.ObjectSchema< serializers.UpdateThreadResponseAddressUserProfile.Raw, CommonApi.UpdateThreadResponseAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfile.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfile.js index 87e043e891b..4a2e2dd4530 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateThreadResponseAddressUserProfileBackgroundImage } from './UpdateThreadResponseAddressUserProfileBackgroundImage'; - export const UpdateThreadResponseAddressUserProfile = core.serialization.object( { name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileBackgroundImage.d.ts index c37660a2ccb..5ce08ea36c4 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateThreadResponseAddressUserProfileBackgroundImage.Raw, CommonApi.UpdateThreadResponseAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileBackgroundImage.js index 755f7526f7d..f8103dc62d9 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileTagsItem.d.ts index bf27d8cd0da..e687084c986 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateThreadResponseAddressUserProfileTagsItem.Raw, CommonApi.UpdateThreadResponseAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileTagsItem.js index f2b9dafe0b9..719802028a2 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressWalletId.d.ts index ea604cf0974..bfac6246930 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseAddressWalletId: core.serialization.Schema< serializers.UpdateThreadResponseAddressWalletId.Raw, CommonApi.UpdateThreadResponseAddressWalletId diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressWalletId.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressWalletId.js index 8e80351b416..b17a516ccb9 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseAddressWalletId = core.serialization.enum_([ 'magic', 'polkadot', diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItem.d.ts index bdf75b5af7a..c1167513f3d 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItem.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateThreadResponseCollaboratorsItemRole } from './UpdateThreadResponseCollaboratorsItemRole'; import { UpdateThreadResponseCollaboratorsItemUser } from './UpdateThreadResponseCollaboratorsItemUser'; import { UpdateThreadResponseCollaboratorsItemWalletId } from './UpdateThreadResponseCollaboratorsItemWalletId'; - export declare const UpdateThreadResponseCollaboratorsItem: core.serialization.ObjectSchema< serializers.UpdateThreadResponseCollaboratorsItem.Raw, CommonApi.UpdateThreadResponseCollaboratorsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItem.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItem.js index bcdb6142034..94e609ba616 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItem.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateThreadResponseCollaboratorsItemRole } from './UpdateThreadResponseCollaboratorsItemRole'; import { UpdateThreadResponseCollaboratorsItemUser } from './UpdateThreadResponseCollaboratorsItemUser'; import { UpdateThreadResponseCollaboratorsItemWalletId } from './UpdateThreadResponseCollaboratorsItemWalletId'; - export const UpdateThreadResponseCollaboratorsItem = core.serialization.object({ id: core.serialization.number().optional(), address: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemRole.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemRole.d.ts index 2ff4dc98177..d997e13d49f 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemRole.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseCollaboratorsItemRole: core.serialization.Schema< serializers.UpdateThreadResponseCollaboratorsItemRole.Raw, CommonApi.UpdateThreadResponseCollaboratorsItemRole diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemRole.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemRole.js index 35c324684c0..e686c1434bf 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemRole.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseCollaboratorsItemRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.d.ts index 9ab14d0d6b0..6629b18cf02 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.d.ts @@ -8,7 +8,6 @@ import { UpdateThreadResponseCollaboratorsItemUserApiKey } from './UpdateThreadR import { UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval } from './UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval'; import { UpdateThreadResponseCollaboratorsItemUserProfile } from './UpdateThreadResponseCollaboratorsItemUserProfile'; import { UpdateThreadResponseCollaboratorsItemUserProfileTagsItem } from './UpdateThreadResponseCollaboratorsItemUserProfileTagsItem'; - export declare const UpdateThreadResponseCollaboratorsItemUser: core.serialization.ObjectSchema< serializers.UpdateThreadResponseCollaboratorsItemUser.Raw, CommonApi.UpdateThreadResponseCollaboratorsItemUser diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.js index b90a344f274..aa965af1dbd 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUser.js @@ -6,7 +6,6 @@ import { UpdateThreadResponseCollaboratorsItemUserApiKey } from './UpdateThreadR import { UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval } from './UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval'; import { UpdateThreadResponseCollaboratorsItemUserProfile } from './UpdateThreadResponseCollaboratorsItemUserProfile'; import { UpdateThreadResponseCollaboratorsItemUserProfileTagsItem } from './UpdateThreadResponseCollaboratorsItemUserProfileTagsItem'; - export const UpdateThreadResponseCollaboratorsItemUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.d.ts new file mode 100644 index 00000000000..0b63a7117d4 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateThreadResponseCollaboratorsItemUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateThreadResponseCollaboratorsItemUserApiKey.Raw, + CommonApi.UpdateThreadResponseCollaboratorsItemUserApiKey +>; +export declare namespace UpdateThreadResponseCollaboratorsItemUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.js new file mode 100644 index 00000000000..9595f039130 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateThreadResponseCollaboratorsItemUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval.d.ts index f44342a8ba5..5f1f4f4d0a4 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval.Raw, CommonApi.UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval.js index bf5c5807cd8..eb8e131defd 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseCollaboratorsItemUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.d.ts index 1ed54ab4ce5..b8dc9345dc3 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage } from './UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage'; - export declare const UpdateThreadResponseCollaboratorsItemUserProfile: core.serialization.ObjectSchema< serializers.UpdateThreadResponseCollaboratorsItemUserProfile.Raw, CommonApi.UpdateThreadResponseCollaboratorsItemUserProfile diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.js index 910b78ab245..e5064197e19 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage } from './UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage'; - export const UpdateThreadResponseCollaboratorsItemUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage.d.ts index 8cad2eccdd0..34be5724db4 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage.Raw, CommonApi.UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage.js index a517bd7c383..77569fcc733 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseCollaboratorsItemUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileTagsItem.d.ts index 72d5f20f683..3e115a6bec4 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseCollaboratorsItemUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateThreadResponseCollaboratorsItemUserProfileTagsItem.Raw, CommonApi.UpdateThreadResponseCollaboratorsItemUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileTagsItem.js index 14bb5c799e3..3d716a636c7 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseCollaboratorsItemUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemWalletId.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemWalletId.d.ts index 4d16dfcfbd5..f71b6dd9b66 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseCollaboratorsItemWalletId: core.serialization.Schema< serializers.UpdateThreadResponseCollaboratorsItemWalletId.Raw, CommonApi.UpdateThreadResponseCollaboratorsItemWalletId diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemWalletId.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemWalletId.js index 3261f02521e..ef5cf78c650 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemWalletId.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseCollaboratorsItemWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseCollaboratorsItemWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMeta.d.ts index c749dea80e3..c327ad1d29c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMeta.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMeta.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateThreadResponseDiscordMetaUser } from './UpdateThreadResponseDiscordMetaUser'; - export declare const UpdateThreadResponseDiscordMeta: core.serialization.ObjectSchema< serializers.UpdateThreadResponseDiscordMeta.Raw, CommonApi.UpdateThreadResponseDiscordMeta diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMeta.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMeta.js index f1fe1f5027f..7b9d4639c8f 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMeta.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateThreadResponseDiscordMetaUser } from './UpdateThreadResponseDiscordMetaUser'; - export const UpdateThreadResponseDiscordMeta = core.serialization.object({ user: UpdateThreadResponseDiscordMetaUser, channelId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMetaUser.d.ts index 2280e3744b6..17b31b4d600 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMetaUser.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMetaUser.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseDiscordMetaUser: core.serialization.ObjectSchema< serializers.UpdateThreadResponseDiscordMetaUser.Raw, CommonApi.UpdateThreadResponseDiscordMetaUser diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMetaUser.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMetaUser.js index 5a43fa64e1b..e834bd4c3d2 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseDiscordMetaUser.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), username: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItem.d.ts index a3c061148f8..295ddb5cff9 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateThreadResponseLinksItemSource } from './UpdateThreadResponseLinksItemSource'; - export declare const UpdateThreadResponseLinksItem: core.serialization.ObjectSchema< serializers.UpdateThreadResponseLinksItem.Raw, CommonApi.UpdateThreadResponseLinksItem diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItem.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItem.js index 35f9153861d..205bf4d845a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateThreadResponseLinksItemSource } from './UpdateThreadResponseLinksItemSource'; - export const UpdateThreadResponseLinksItem = core.serialization.object({ source: UpdateThreadResponseLinksItemSource, identifier: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItemSource.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItemSource.d.ts index bf34e435c1e..3edd4943876 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItemSource.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItemSource.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseLinksItemSource: core.serialization.Schema< serializers.UpdateThreadResponseLinksItemSource.Raw, CommonApi.UpdateThreadResponseLinksItemSource diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItemSource.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItemSource.js index 61bf701c093..87e697fd57a 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItemSource.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseLinksItemSource.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseLinksItemSource = core.serialization.enum_([ 'snapshot', 'proposal', diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItem.d.ts index 9eb799f2b9e..913de19f705 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItem.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateThreadResponseReactionsItemAddress } from './UpdateThreadResponseReactionsItemAddress'; - export declare const UpdateThreadResponseReactionsItem: core.serialization.ObjectSchema< serializers.UpdateThreadResponseReactionsItem.Raw, CommonApi.UpdateThreadResponseReactionsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItem.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItem.js index 95bb61af7e6..438d9009090 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItem.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateThreadResponseReactionsItemAddress } from './UpdateThreadResponseReactionsItemAddress'; - export const UpdateThreadResponseReactionsItem = core.serialization.object({ id: core.serialization.number().optional(), addressId: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddress.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddress.d.ts index a66f6d616c9..1a26fca9955 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddress.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddress.d.ts @@ -7,7 +7,6 @@ import * as serializers from '../../../index'; import { UpdateThreadResponseReactionsItemAddressRole } from './UpdateThreadResponseReactionsItemAddressRole'; import { UpdateThreadResponseReactionsItemAddressUser } from './UpdateThreadResponseReactionsItemAddressUser'; import { UpdateThreadResponseReactionsItemAddressWalletId } from './UpdateThreadResponseReactionsItemAddressWalletId'; - export declare const UpdateThreadResponseReactionsItemAddress: core.serialization.ObjectSchema< serializers.UpdateThreadResponseReactionsItemAddress.Raw, CommonApi.UpdateThreadResponseReactionsItemAddress diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddress.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddress.js index 48f28f2c6ca..3587c52d633 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddress.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddress.js @@ -5,7 +5,6 @@ import * as core from '../../../../core'; import { UpdateThreadResponseReactionsItemAddressRole } from './UpdateThreadResponseReactionsItemAddressRole'; import { UpdateThreadResponseReactionsItemAddressUser } from './UpdateThreadResponseReactionsItemAddressUser'; import { UpdateThreadResponseReactionsItemAddressWalletId } from './UpdateThreadResponseReactionsItemAddressWalletId'; - export const UpdateThreadResponseReactionsItemAddress = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressRole.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressRole.d.ts index c855124ff9b..c65c4b96651 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressRole.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressRole.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseReactionsItemAddressRole: core.serialization.Schema< serializers.UpdateThreadResponseReactionsItemAddressRole.Raw, CommonApi.UpdateThreadResponseReactionsItemAddressRole diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressRole.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressRole.js index 7bd2a0612c8..5b77c045934 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressRole.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressRole.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseReactionsItemAddressRole = core.serialization.enum_(['admin', 'moderator', 'member']); diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.d.ts index ec82075576c..d7921f7e93c 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.d.ts @@ -8,7 +8,6 @@ import { UpdateThreadResponseReactionsItemAddressUserApiKey } from './UpdateThre import { UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval } from './UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval'; import { UpdateThreadResponseReactionsItemAddressUserProfile } from './UpdateThreadResponseReactionsItemAddressUserProfile'; import { UpdateThreadResponseReactionsItemAddressUserProfileTagsItem } from './UpdateThreadResponseReactionsItemAddressUserProfileTagsItem'; - export declare const UpdateThreadResponseReactionsItemAddressUser: core.serialization.ObjectSchema< serializers.UpdateThreadResponseReactionsItemAddressUser.Raw, CommonApi.UpdateThreadResponseReactionsItemAddressUser diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.js index b61fbb9f728..4975717688e 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUser.js @@ -6,7 +6,6 @@ import { UpdateThreadResponseReactionsItemAddressUserApiKey } from './UpdateThre import { UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval } from './UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval'; import { UpdateThreadResponseReactionsItemAddressUserProfile } from './UpdateThreadResponseReactionsItemAddressUserProfile'; import { UpdateThreadResponseReactionsItemAddressUserProfileTagsItem } from './UpdateThreadResponseReactionsItemAddressUserProfileTagsItem'; - export const UpdateThreadResponseReactionsItemAddressUser = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.d.ts new file mode 100644 index 00000000000..968acb0dc83 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.d.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const UpdateThreadResponseReactionsItemAddressUserApiKey: core.serialization.ObjectSchema< + serializers.UpdateThreadResponseReactionsItemAddressUserApiKey.Raw, + CommonApi.UpdateThreadResponseReactionsItemAddressUserApiKey +>; +export declare namespace UpdateThreadResponseReactionsItemAddressUserApiKey { + interface Raw { + user_id?: number | null; + hashed_api_key: string; + salt: string; + created_at?: string | null; + updated_at?: string | null; + } +} diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.js new file mode 100644 index 00000000000..038efbb4f03 --- /dev/null +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserApiKey.js @@ -0,0 +1,24 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const UpdateThreadResponseReactionsItemAddressUserApiKey = + core.serialization.object({ + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + hashedApiKey: core.serialization.property( + 'hashed_api_key', + core.serialization.string(), + ), + salt: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.date().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.date().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval.d.ts index a06f7efac40..5561884a9d9 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval: core.serialization.Schema< serializers.UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval.Raw, CommonApi.UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval.js index d987353fe17..6ba0a1ef9bb 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval.js @@ -2,6 +2,5 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseReactionsItemAddressUserEmailNotificationInterval = core.serialization.enum_(['weekly', 'never']); diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.d.ts index 1fe1147358a..1232d78373b 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.d.ts @@ -5,7 +5,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage } from './UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage'; - export declare const UpdateThreadResponseReactionsItemAddressUserProfile: core.serialization.ObjectSchema< serializers.UpdateThreadResponseReactionsItemAddressUserProfile.Raw, CommonApi.UpdateThreadResponseReactionsItemAddressUserProfile diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.js index 8e209378c49..1fa762f90f7 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfile.js @@ -3,7 +3,6 @@ */ import * as core from '../../../../core'; import { UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage } from './UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage'; - export const UpdateThreadResponseReactionsItemAddressUserProfile = core.serialization.object({ name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage.d.ts index a1978374664..26b0a3186a8 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage: core.serialization.ObjectSchema< serializers.UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage.Raw, CommonApi.UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage.js index 4e59787c4e9..f6c000c8366 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseReactionsItemAddressUserProfileBackgroundImage = core.serialization.object({ url: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileTagsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileTagsItem.d.ts index f2a1348c657..83e90f8bb49 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileTagsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileTagsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseReactionsItemAddressUserProfileTagsItem: core.serialization.ObjectSchema< serializers.UpdateThreadResponseReactionsItemAddressUserProfileTagsItem.Raw, CommonApi.UpdateThreadResponseReactionsItemAddressUserProfileTagsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileTagsItem.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileTagsItem.js index ef9d9c24524..c1450f80415 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileTagsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressUserProfileTagsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseReactionsItemAddressUserProfileTagsItem = core.serialization.object({ userId: core.serialization.property('user_id', core.serialization.number()), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressWalletId.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressWalletId.d.ts index ac7847dd711..5b7f932fd01 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressWalletId.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressWalletId.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseReactionsItemAddressWalletId: core.serialization.Schema< serializers.UpdateThreadResponseReactionsItemAddressWalletId.Raw, CommonApi.UpdateThreadResponseReactionsItemAddressWalletId diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressWalletId.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressWalletId.js index 20b3bffcf33..8fe97e32323 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressWalletId.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseReactionsItemAddressWalletId.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseReactionsItemAddressWalletId = core.serialization.enum_([ 'magic', diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseSearch.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseSearch.d.ts index 64f8b0e65c9..f7a8f304c94 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseSearch.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseSearch.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseSearch: core.serialization.Schema< serializers.UpdateThreadResponseSearch.Raw, CommonApi.UpdateThreadResponseSearch diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseSearch.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseSearch.js index 7169e5c61d6..73da707cf74 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseSearch.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseSearch.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseSearch = core.serialization.undiscriminatedUnion([ core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseThreadVersionHistoriesItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseThreadVersionHistoriesItem.d.ts index b3e48cbd779..e0f95aa22f2 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseThreadVersionHistoriesItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseThreadVersionHistoriesItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseThreadVersionHistoriesItem: core.serialization.ObjectSchema< serializers.UpdateThreadResponseThreadVersionHistoriesItem.Raw, CommonApi.UpdateThreadResponseThreadVersionHistoriesItem diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseThreadVersionHistoriesItem.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseThreadVersionHistoriesItem.js index f988f6e6630..63e35c8a5ea 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseThreadVersionHistoriesItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseThreadVersionHistoriesItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseThreadVersionHistoriesItem = core.serialization.object({ id: core.serialization.number().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopic.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopic.d.ts index 6c4500ba345..5326e375725 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopic.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopic.d.ts @@ -6,7 +6,6 @@ import * as core from '../../../../core'; import * as serializers from '../../../index'; import { UpdateThreadResponseTopicContestTopicsItem } from './UpdateThreadResponseTopicContestTopicsItem'; import { UpdateThreadResponseTopicWeightedVoting } from './UpdateThreadResponseTopicWeightedVoting'; - export declare const UpdateThreadResponseTopic: core.serialization.ObjectSchema< serializers.UpdateThreadResponseTopic.Raw, CommonApi.UpdateThreadResponseTopic diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopic.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopic.js index eb3488ab11d..1332e638782 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopic.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopic.js @@ -4,7 +4,6 @@ import * as core from '../../../../core'; import { UpdateThreadResponseTopicContestTopicsItem } from './UpdateThreadResponseTopicContestTopicsItem'; import { UpdateThreadResponseTopicWeightedVoting } from './UpdateThreadResponseTopicWeightedVoting'; - export const UpdateThreadResponseTopic = core.serialization.object({ id: core.serialization.number().optional(), name: core.serialization.string().optional(), diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicContestTopicsItem.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicContestTopicsItem.d.ts index 9d901865856..58a01c887e0 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicContestTopicsItem.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicContestTopicsItem.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseTopicContestTopicsItem: core.serialization.ObjectSchema< serializers.UpdateThreadResponseTopicContestTopicsItem.Raw, CommonApi.UpdateThreadResponseTopicContestTopicsItem diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicContestTopicsItem.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicContestTopicsItem.js index 7bdc270d790..c8f1e0279ef 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicContestTopicsItem.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicContestTopicsItem.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseTopicContestTopicsItem = core.serialization.object({ contestAddress: core.serialization.property( diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicWeightedVoting.d.ts b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicWeightedVoting.d.ts index 82dc7c1173c..e6aed8bd1a1 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicWeightedVoting.d.ts +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicWeightedVoting.d.ts @@ -4,7 +4,6 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; - export declare const UpdateThreadResponseTopicWeightedVoting: core.serialization.Schema< serializers.UpdateThreadResponseTopicWeightedVoting.Raw, CommonApi.UpdateThreadResponseTopicWeightedVoting diff --git a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicWeightedVoting.js b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicWeightedVoting.js index 3bdac68419f..cf65d48a1f1 100644 --- a/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicWeightedVoting.js +++ b/libs/api-client/src/serialization/resources/thread/types/UpdateThreadResponseTopicWeightedVoting.js @@ -2,7 +2,6 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; - export const UpdateThreadResponseTopicWeightedVoting = core.serialization.enum_( ['stake', 'erc20'], ); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 090f97253f7..923221ea0ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -170,10 +170,10 @@ importers: version: 6.21.0(eslint@8.57.0)(typescript@5.4.5) '@vitejs/plugin-react-swc': specifier: ^3.7.0 - version: 3.7.0(@swc/helpers@0.5.12)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)) + version: 3.7.0(@swc/helpers@0.5.12)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1)) '@vitest/coverage-istanbul': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0)) + version: 1.6.0(vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.34.1)) chai: specifier: ^4.3.6 version: 4.4.1 @@ -293,22 +293,22 @@ importers: version: 5.4.5 vite: specifier: ^5.2.12 - version: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0) + version: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1) vite-bundle-visualizer: specifier: ^1.2.1 version: 1.2.1(rollup@4.18.0) vite-plugin-html: specifier: ^3.2.2 - version: 3.2.2(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)) + version: 3.2.2(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1)) vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)) + version: 0.22.0(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1)) vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)) + version: 4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1)) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0) + version: 1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.34.1) wait-on: specifier: ^7.2.0 version: 7.2.0 @@ -512,7 +512,7 @@ importers: devDependencies: '@nomiclabs/hardhat-ethers': specifier: ^2.0.2 - version: 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) + version: 2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) '@typechain/ethers-v5': specifier: ^6.0.0 version: 6.0.5(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@4.0.3(typescript@5.4.5))(typescript@5.4.5) @@ -521,10 +521,10 @@ importers: version: 2.13.0 hardhat: specifier: ^2.3.0 - version: 2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) + version: 2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) hardhat-typechain: specifier: ^0.3.5 - version: 0.3.5(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(ts-generator@0.1.1)(typechain@4.0.3(typescript@5.4.5)) + version: 0.3.5(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(ts-generator@0.1.1)(typechain@4.0.3(typescript@5.4.5)) ts-generator: specifier: ^0.1.1 version: 0.1.1 @@ -804,10 +804,10 @@ importers: version: 0.10.10(@polkadot/api@6.0.5)(@polkadot/util@12.6.2)(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@canvas-js/core': specifier: ^0.10.10 - version: 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + version: 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) '@canvas-js/gossiplog': specifier: ^0.10.10 - version: 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + version: 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) '@canvas-js/interfaces': specifier: ^0.10.10 version: 0.10.10 @@ -880,10 +880,10 @@ importers: version: 0.10.10(@polkadot/api@6.0.5)(@polkadot/util@12.6.2)(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@canvas-js/core': specifier: ^0.10.10 - version: 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + version: 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) '@canvas-js/gossiplog': specifier: ^0.10.10 - version: 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + version: 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) '@canvas-js/interfaces': specifier: ^0.10.10 version: 0.10.10 @@ -1060,10 +1060,10 @@ importers: version: 1.91.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@tanstack/react-query': specifier: ^4.29.7 - version: 4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) + version: 4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) '@tanstack/react-query-devtools': specifier: ^4.29.7 - version: 4.36.1(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 4.36.1(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-table': specifier: ^8.9.7 version: 8.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1078,7 +1078,7 @@ importers: version: 10.45.2(@trpc/server@10.45.2) '@trpc/react-query': specifier: ^10.45.1 - version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react-helmet-async': specifier: ^1.0.3 version: 1.0.3(react@18.3.1) @@ -1321,7 +1321,7 @@ importers: version: 18.3.1 react-beautiful-dnd: specifier: ^13.1.1 - version: 13.1.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) + version: 13.1.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) react-device-detect: specifier: ^2.2.3 version: 2.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1765,42 +1765,78 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.25.2': resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.25.7': + resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} + engines: {node: '>=6.9.0'} + '@babel/core@7.24.5': resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.25.6': resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} + '@babel/helper-annotate-as-pure@7.25.7': + resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': + resolution: {integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.25.2': resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.25.0': resolution: {integrity: sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.25.7': + resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.25.2': resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.25.7': + resolution: {integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-define-polyfill-provider@0.6.2': resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: @@ -1814,6 +1850,10 @@ packages: resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.25.7': + resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.24.3': resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} @@ -1822,40 +1862,78 @@ packages: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.25.2': resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.24.7': resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.25.7': + resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.24.8': resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.25.7': + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.25.0': resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-remap-async-to-generator@7.25.7': + resolution: {integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.25.0': resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.25.7': + resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-simple-access@7.24.7': resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.1': resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} @@ -1864,6 +1942,10 @@ packages: resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.5': resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} @@ -1872,18 +1954,34 @@ packages: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.24.8': resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.25.0': resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.25.7': + resolution: {integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.24.5': resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.5': resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} @@ -1892,6 +1990,10 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.24.5': resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} engines: {node: '>=6.0.0'} @@ -1907,32 +2009,37 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3': - resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} + '@babel/parser@7.25.7': + resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7': + resolution: {integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0': - resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7': + resolution: {integrity: sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0': - resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7': + resolution: {integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7': + resolution: {integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0': - resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7': + resolution: {integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1957,6 +2064,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-export-default-from@7.25.7': + resolution: {integrity: sha512-Egdiuy7pLTyaPkIr6rItNyFVbblTmx3VgqY+72KiS9BzcA+SMyrS9zSumQeSANo8uE3Kax0ZUMkpNh0Q+mbNwg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-logical-assignment-operators@7.20.7': resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} @@ -2032,6 +2145,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-export-default-from@7.25.7': + resolution: {integrity: sha512-LRUCsC0YucSjabsmxx6yly8+Q/5mxKdp9gemlpR9ro3bfpcOQOXx/CHivs7QCbjgygd6uQ2GcRfHu1FVax/hgg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-export-namespace-from@7.8.3': resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: @@ -2043,14 +2162,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.24.7': - resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} + '@babel/plugin-syntax-flow@7.25.7': + resolution: {integrity: sha512-fyoj6/YdVtlv2ROig/J0fP7hh/wNO1MJGm1NR70Pg7jbkF+jOUL9joorqaCOQh06Y+LfgTagHzC8KqZ3MF782w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.24.7': - resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} + '@babel/plugin-syntax-import-assertions@7.25.7': + resolution: {integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.25.7': + resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2071,6 +2196,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.25.7': + resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -2119,6 +2250,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.25.7': + resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -2131,8 +2268,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.25.0': - resolution: {integrity: sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==} + '@babel/plugin-transform-arrow-functions@7.25.7': + resolution: {integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.25.7': + resolution: {integrity: sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2143,8 +2286,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.24.7': - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} + '@babel/plugin-transform-async-to-generator@7.25.7': + resolution: {integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.25.7': + resolution: {integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2155,14 +2304,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.24.7': - resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} + '@babel/plugin-transform-block-scoping@7.25.7': + resolution: {integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.25.7': + resolution: {integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.24.7': - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} + '@babel/plugin-transform-class-static-block@7.25.7': + resolution: {integrity: sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 @@ -2173,50 +2328,68 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-classes@7.25.7': + resolution: {integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.24.7': resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.25.7': + resolution: {integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-destructuring@7.24.8': resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.24.7': - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} + '@babel/plugin-transform-destructuring@7.25.7': + resolution: {integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.25.7': + resolution: {integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.24.7': - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} + '@babel/plugin-transform-duplicate-keys@7.25.7': + resolution: {integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0': - resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7': + resolution: {integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-dynamic-import@7.24.7': - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} + '@babel/plugin-transform-dynamic-import@7.25.7': + resolution: {integrity: sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.24.7': - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} + '@babel/plugin-transform-exponentiation-operator@7.25.7': + resolution: {integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.24.7': - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} + '@babel/plugin-transform-export-namespace-from@7.25.7': + resolution: {integrity: sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2227,8 +2400,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.24.7': - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} + '@babel/plugin-transform-flow-strip-types@7.25.7': + resolution: {integrity: sha512-q8Td2PPc6/6I73g96SreSUCKEcwMXCwcXSIAVTyTTN6CpJe0dMj8coxu1fg1T9vfBLi6Rsi6a4ECcFBbKabS5w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.25.7': + resolution: {integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2239,8 +2418,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.24.7': - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} + '@babel/plugin-transform-function-name@7.25.7': + resolution: {integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.25.7': + resolution: {integrity: sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2251,20 +2436,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.24.7': - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} + '@babel/plugin-transform-literals@7.25.7': + resolution: {integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.25.7': + resolution: {integrity: sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.24.7': - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} + '@babel/plugin-transform-member-expression-literals@7.25.7': + resolution: {integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.24.7': - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} + '@babel/plugin-transform-modules-amd@7.25.7': + resolution: {integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2275,14 +2466,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.25.0': - resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} + '@babel/plugin-transform-modules-commonjs@7.25.7': + resolution: {integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.25.7': + resolution: {integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.24.7': - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} + '@babel/plugin-transform-modules-umd@7.25.7': + resolution: {integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2293,44 +2490,50 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.24.7': - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7': + resolution: {integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.25.7': + resolution: {integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} + '@babel/plugin-transform-nullish-coalescing-operator@7.25.7': + resolution: {integrity: sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.24.7': - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} + '@babel/plugin-transform-numeric-separator@7.25.7': + resolution: {integrity: sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.24.7': - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} + '@babel/plugin-transform-object-rest-spread@7.25.7': + resolution: {integrity: sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.24.7': - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} + '@babel/plugin-transform-object-super@7.25.7': + resolution: {integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.24.7': - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} + '@babel/plugin-transform-optional-catch-binding@7.25.7': + resolution: {integrity: sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.8': - resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} + '@babel/plugin-transform-optional-chaining@7.25.7': + resolution: {integrity: sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2341,20 +2544,38 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-parameters@7.25.7': + resolution: {integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-methods@7.24.7': resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-methods@7.25.7': + resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-property-in-object@7.24.7': resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.24.7': - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} + '@babel/plugin-transform-private-property-in-object@7.25.7': + resolution: {integrity: sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.25.7': + resolution: {integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2365,32 +2586,56 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-display-name@7.25.7': + resolution: {integrity: sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.24.7': resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.25.7': + resolution: {integrity: sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.24.7': resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.25.7': + resolution: {integrity: sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.25.2': resolution: {integrity: sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.24.7': - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} + '@babel/plugin-transform-react-jsx@7.25.7': + resolution: {integrity: sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.24.7': - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} + '@babel/plugin-transform-regenerator@7.25.7': + resolution: {integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-reserved-words@7.25.7': + resolution: {integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2401,32 +2646,56 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-runtime@7.25.7': + resolution: {integrity: sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-shorthand-properties@7.24.7': resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-shorthand-properties@7.25.7': + resolution: {integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.24.7': resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.25.7': + resolution: {integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-sticky-regex@7.24.7': resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.24.7': - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} + '@babel/plugin-transform-sticky-regex@7.25.7': + resolution: {integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.8': - resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} + '@babel/plugin-transform-template-literals@7.25.7': + resolution: {integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.25.7': + resolution: {integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2437,14 +2706,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.24.7': - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} + '@babel/plugin-transform-typescript@7.25.7': + resolution: {integrity: sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.25.7': + resolution: {integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.24.7': - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} + '@babel/plugin-transform-unicode-property-regex@7.25.7': + resolution: {integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2455,8 +2730,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.24.7': - resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} + '@babel/plugin-transform-unicode-regex@7.25.7': + resolution: {integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.7': + resolution: {integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -2509,10 +2790,18 @@ packages: resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.25.7': + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + engines: {node: '>=6.9.0'} + '@babel/template@7.25.0': resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.25.3': resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} engines: {node: '>=6.9.0'} @@ -2521,6 +2810,10 @@ packages: resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} + engines: {node: '>=6.9.0'} + '@babel/types@7.24.5': resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} @@ -2533,6 +2826,10 @@ packages: resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} + '@babel/types@7.25.7': + resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} + engines: {node: '>=6.9.0'} + '@brillout/import@0.2.3': resolution: {integrity: sha512-1T8WlD75eeFSMrptGy8jiLHmfHgMmSjWvLOIUvHmSVZt+6k0eQqYUoK4KbmE4T9pVLIfxvZSOm2D68VEqKRHRw==} @@ -6696,6 +6993,9 @@ packages: '@types/node@20.12.10': resolution: {integrity: sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==} + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + '@types/node@8.10.66': resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} @@ -7730,6 +8030,10 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -7769,6 +8073,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} @@ -7881,6 +8190,9 @@ packages: caniuse-lite@1.0.30001655: resolution: {integrity: sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==} + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} + canvas-renderer@2.1.1: resolution: {integrity: sha512-/V0XetN7s1Mk3NO7x2wxPZYv0pLMQtGAhecuOuKR88beiYCUle1AbCcFZNLu+4NVzi9RVHS0rXtIgzPEaKidLw==} @@ -8266,6 +8578,9 @@ packages: core-js-compat@3.38.0: resolution: {integrity: sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==} + core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + core-js-pure@3.37.0: resolution: {integrity: sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==} @@ -8788,6 +9103,9 @@ packages: electron-to-chromium@1.5.11: resolution: {integrity: sha512-R1CccCDYqndR25CaXFd6hp/u9RaaMcftMkphmvuepXr5b1vfLkRml6aWVeBhXJ7rbevHkKEMJtz8XqPf7ffmew==} + electron-to-chromium@1.5.35: + resolution: {integrity: sha512-hOSRInrIDm0Brzp4IHW2F/VM+638qOL2CzE0DgpnGzKW27C95IqqeqgKz/hxHGnvPxvQGpHUGD5qRVC9EZY2+A==} + elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -8817,6 +9135,10 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -8862,6 +9184,11 @@ packages: engines: {node: '>=4'} hasBin: true + envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + engines: {node: '>=4'} + hasBin: true + err-code@3.0.1: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} @@ -8955,6 +9282,10 @@ packages: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-carriage@1.3.1: resolution: {integrity: sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==} @@ -9060,6 +9391,7 @@ packages: eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true esm-loader-css@1.0.6: @@ -9346,6 +9678,10 @@ packages: resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} hasBin: true + fast-xml-parser@4.5.0: + resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==} + hasBin: true + fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} @@ -9408,6 +9744,10 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} @@ -9522,6 +9862,10 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -9896,6 +10240,9 @@ packages: hermes-estree@0.23.0: resolution: {integrity: sha512-Rkp0PNLGpORw4ktsttkVbpYJbrYKS3hAnkxu8D9nvQi6LvSbuPa+tYw/t2u3Gjc35lYd/k95YkjqyTcN4zspag==} + hermes-estree@0.23.1: + resolution: {integrity: sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==} + hermes-parser@0.19.1: resolution: {integrity: sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==} @@ -9905,6 +10252,9 @@ packages: hermes-parser@0.23.0: resolution: {integrity: sha512-xLwM4ylfHGwrm+2qXfO1JT/fnqEDGSnpS/9hQ4VLtqTexSviu2ZpBgz07U8jVtndq67qdb/ps0qvaWDZ3fkTyg==} + hermes-parser@0.23.1: + resolution: {integrity: sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==} + hermes-profile-transformer@0.0.6: resolution: {integrity: sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==} engines: {node: '>=8'} @@ -10701,6 +11051,9 @@ packages: joi@17.13.1: resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==} + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + jose@5.3.0: resolution: {integrity: sha512-IChe9AtAE79ru084ow8jzkN2lNrG3Ntfiv65Cvj9uOCE2m5LNsdHG+9EbxWxAoWRF9TgDOqLN5jm08++owDVRg==} @@ -10776,6 +11129,11 @@ packages: engines: {node: '>=4'} hasBin: true + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -10904,8 +11262,8 @@ packages: lexical@0.17.1: resolution: {integrity: sha512-72/MhR7jqmyqD10bmJw8gztlCm4KDDT+TPtU4elqXrEvHoO5XENi34YAEUD9gIkPfqSwyLa9mwAX1nKzIr5xEA==} - lib0@0.2.97: - resolution: {integrity: sha512-Q4d1ekgvufi9FiHkkL46AhecfNjznSL9MRNoJRQ76gBHS9OqU2ArfQK0FvBpuxgWeJeNI0LVgAYMIpsGeX4gYg==} + lib0@0.2.98: + resolution: {integrity: sha512-XteTiNO0qEXqqweWx+b21p/fBnNHUA1NwAtJNJek1oPrewEZs2uiT4gWivHKr9GqCjDPAhchz0UQO8NwU3bBNA==} engines: {node: '>=16'} hasBin: true @@ -11273,60 +11631,118 @@ packages: resolution: {integrity: sha512-GXHueUzgzcazfzORDxDzWS9jVVRV6u+cR6TGvHOfGdfLzJCj7/D0PretLfyq+MwN20twHxLW+BUXkoaB8sCQBg==} engines: {node: '>=18'} + metro-babel-transformer@0.80.12: + resolution: {integrity: sha512-YZziRs0MgA3pzCkkvOoQRXjIoVjvrpi/yRlJnObyIvMP6lFdtyG4nUGIwGY9VXnBvxmXD6mPY2e+NSw6JAyiRg==} + engines: {node: '>=18'} + metro-cache-key@0.80.10: resolution: {integrity: sha512-57qBhO3zQfoU/hP4ZlLW5hVej2jVfBX6B4NcSfMj4LgDPL3YknWg80IJBxzQfjQY/m+fmMLmPy8aUMHzUp/guA==} engines: {node: '>=18'} + metro-cache-key@0.80.12: + resolution: {integrity: sha512-o4BspKnugg/pE45ei0LGHVuBJXwRgruW7oSFAeSZvBKA/sGr0UhOGY3uycOgWInnS3v5yTTfiBA9lHlNRhsvGA==} + engines: {node: '>=18'} + metro-cache@0.80.10: resolution: {integrity: sha512-8CBtDJwMguIE5RvV3PU1QtxUG8oSSX54mIuAbRZmcQ0MYiOl9JdrMd4JCBvIyhiZLoSStph425SMyCSnjtJsdA==} engines: {node: '>=18'} + metro-cache@0.80.12: + resolution: {integrity: sha512-p5kNHh2KJ0pbQI/H7ZBPCEwkyNcSz7OUkslzsiIWBMPQGFJ/xArMwkV7I+GJcWh+b4m6zbLxE5fk6fqbVK1xGA==} + engines: {node: '>=18'} + metro-config@0.80.10: resolution: {integrity: sha512-0GYAw0LkmGbmA81FepKQepL1KU/85Cyv7sAiWm6QWeV6AcVCpsKg6jGLqGHJ0LLPL60rWzA4TV1DQAlzdJAEtA==} engines: {node: '>=18'} + metro-config@0.80.12: + resolution: {integrity: sha512-4rwOWwrhm62LjB12ytiuR5NgK1ZBNr24/He8mqCsC+HXZ+ATbrewLNztzbAZHtFsrxP4D4GLTGgh96pCpYLSAQ==} + engines: {node: '>=18'} + metro-core@0.80.10: resolution: {integrity: sha512-nwBB6HbpGlNsZMuzxVqxqGIOsn5F3JKpsp8PziS7Z4mV8a/jA1d44mVOgYmDa2q5WlH5iJfRIIhdz24XRNDlLA==} engines: {node: '>=18'} + metro-core@0.80.12: + resolution: {integrity: sha512-QqdJ/yAK+IpPs2HU/h5v2pKEdANBagSsc6DRSjnwSyJsCoHlmyJKCaCJ7KhWGx+N4OHxh37hoA8fc2CuZbx0Fw==} + engines: {node: '>=18'} + metro-file-map@0.80.10: resolution: {integrity: sha512-ytsUq8coneaN7ZCVk1IogojcGhLIbzWyiI2dNmw2nnBgV/0A+M5WaTTgZ6dJEz3dzjObPryDnkqWPvIGLCPtiw==} engines: {node: '>=18'} + metro-file-map@0.80.12: + resolution: {integrity: sha512-sYdemWSlk66bWzW2wp79kcPMzwuG32x1ZF3otI0QZTmrnTaaTiGyhE66P1z6KR4n2Eu5QXiABa6EWbAQv0r8bw==} + engines: {node: '>=18'} + metro-minify-terser@0.80.10: resolution: {integrity: sha512-Xyv9pEYpOsAerrld7cSLIcnCCpv8ItwysOmTA+AKf1q4KyE9cxrH2O2SA0FzMCkPzwxzBWmXwHUr+A89BpEM6g==} engines: {node: '>=18'} + metro-minify-terser@0.80.12: + resolution: {integrity: sha512-muWzUw3y5k+9083ZoX9VaJLWEV2Jcgi+Oan0Mmb/fBNMPqP9xVDuy4pOMn/HOiGndgfh/MK7s4bsjkyLJKMnXQ==} + engines: {node: '>=18'} + metro-resolver@0.80.10: resolution: {integrity: sha512-EYC5CL7f+bSzrqdk1bylKqFNGabfiI5PDctxoPx70jFt89Jz+ThcOscENog8Jb4LEQFG6GkOYlwmPpsi7kx3QA==} engines: {node: '>=18'} + metro-resolver@0.80.12: + resolution: {integrity: sha512-PR24gYRZnYHM3xT9pg6BdbrGbM/Cu1TcyIFBVlAk7qDAuHkUNQ1nMzWumWs+kwSvtd9eZGzHoucGJpTUEeLZAw==} + engines: {node: '>=18'} + metro-runtime@0.80.10: resolution: {integrity: sha512-Xh0N589ZmSIgJYAM+oYwlzTXEHfASZac9TYPCNbvjNTn0EHKqpoJ/+Im5G3MZT4oZzYv4YnvzRtjqS5k0tK94A==} engines: {node: '>=18'} + metro-runtime@0.80.12: + resolution: {integrity: sha512-LIx7+92p5rpI0i6iB4S4GBvvLxStNt6fF0oPMaUd1Weku7jZdfkCZzmrtDD9CSQ6EPb0T9NUZoyXIxlBa3wOCw==} + engines: {node: '>=18'} + metro-source-map@0.80.10: resolution: {integrity: sha512-EyZswqJW8Uukv/HcQr6K19vkMXW1nzHAZPWJSEyJFKIbgp708QfRZ6vnZGmrtFxeJEaFdNup4bGnu8/mIOYlyA==} engines: {node: '>=18'} + metro-source-map@0.80.12: + resolution: {integrity: sha512-o+AXmE7hpvM8r8MKsx7TI21/eerYYy2DCDkWfoBkv+jNkl61khvDHlQn0cXZa6lrcNZiZkl9oHSMcwLLIrFmpw==} + engines: {node: '>=18'} + metro-symbolicate@0.80.10: resolution: {integrity: sha512-qAoVUoSxpfZ2DwZV7IdnQGXCSsf2cAUExUcZyuCqGlY5kaWBb0mx2BL/xbMFDJ4wBp3sVvSBPtK/rt4J7a0xBA==} engines: {node: '>=18'} hasBin: true + metro-symbolicate@0.80.12: + resolution: {integrity: sha512-/dIpNdHksXkGHZXARZpL7doUzHqSNxgQ8+kQGxwpJuHnDhGkENxB5PS2QBaTDdEcmyTMjS53CN1rl9n1gR6fmw==} + engines: {node: '>=18'} + hasBin: true + metro-transform-plugins@0.80.10: resolution: {integrity: sha512-leAx9gtA+2MHLsCeWK6XTLBbv2fBnNFu/QiYhWzMq8HsOAP4u1xQAU0tSgPs8+1vYO34Plyn79xTLUtQCRSSUQ==} engines: {node: '>=18'} + metro-transform-plugins@0.80.12: + resolution: {integrity: sha512-WQWp00AcZvXuQdbjQbx1LzFR31IInlkCDYJNRs6gtEtAyhwpMMlL2KcHmdY+wjDO9RPcliZ+Xl1riOuBecVlPA==} + engines: {node: '>=18'} + metro-transform-worker@0.80.10: resolution: {integrity: sha512-zNfNLD8Rz99U+JdOTqtF2o7iTjcDMMYdVS90z6+81Tzd2D0lDWVpls7R1hadS6xwM+ymgXFQTjM6V6wFoZaC0g==} engines: {node: '>=18'} + metro-transform-worker@0.80.12: + resolution: {integrity: sha512-KAPFN1y3eVqEbKLx1I8WOarHPqDMUa8WelWxaJCNKO/yHCP26zELeqTJvhsQup+8uwB6EYi/sp0b6TGoh6lOEA==} + engines: {node: '>=18'} + metro@0.80.10: resolution: {integrity: sha512-FDPi0X7wpafmDREXe1lgg3WzETxtXh6Kpq8+IwsG35R2tMyp2kFIqDdshdohuvDt1J/qDARcEPq7V/jElTb1kA==} engines: {node: '>=18'} hasBin: true + metro@0.80.12: + resolution: {integrity: sha512-1UsH5FzJd9quUsD1qY+zUG4JY3jo3YEMxbMYH9jT6NK3j4iORhlwTK8fYTfAUBhDKjgLfKjAh7aoazNE23oIRA==} + engines: {node: '>=18'} + hasBin: true + micro-base@0.9.0: resolution: {integrity: sha512-4+tOMKidYT5nQ6/UNmYrGVO5PMcnJdfuR4NC8HK8s2H61B4itOhA9yrsjBdqGV7ecdtej36x3YSIfPLRmPrspg==} deprecated: Switch to @scure/base for audited version of the lib & updates @@ -11437,6 +11853,10 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} hasBin: true @@ -11852,8 +12272,8 @@ packages: numeral@2.0.6: resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==} - nwsapi@2.2.12: - resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} @@ -11867,6 +12287,10 @@ packages: resolution: {integrity: sha512-dJHyB0S6JkMorUSfSGcYGkkg9kmq3qDUu3ygZUKIfkr47XOPuG35r2Sk6tbwtHXbdKIXmcMvM8DF2CwgdyaHfQ==} engines: {node: '>=18'} + ob1@0.80.12: + resolution: {integrity: sha512-VMArClVT6LkhUGpnuEoBuyjG9rzUyEzg4PDkav6wK1cLhOK02gPCYFxoiB4mqVnrMhDpIzJcrGNAMVi9P+hXrw==} + engines: {node: '>=18'} + obj-multiplex@1.0.0: resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} @@ -12291,6 +12715,9 @@ packages: picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -12476,6 +12903,9 @@ packages: preact@10.23.2: resolution: {integrity: sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==} + preact@10.24.2: + resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} + prebuild-install@7.1.2: resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} @@ -12802,6 +13232,9 @@ packages: react-devtools-core@5.3.1: resolution: {integrity: sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw==} + react-devtools-core@5.3.2: + resolution: {integrity: sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==} + react-devtools-inline@4.4.0: resolution: {integrity: sha512-ES0GolSrKO8wsKbsEkVeiR/ZAaHQTY4zDh1UW8DImVmm8oaGLl3ijJDvSGe+qDRKPZdPRnDtWWnSvvrgxXdThQ==} @@ -13147,6 +13580,10 @@ packages: resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} engines: {node: '>=4'} + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} @@ -13171,6 +13608,17 @@ packages: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} + regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.11.1: + resolution: {integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==} + hasBin: true + regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true @@ -13439,10 +13887,19 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + sequelize-cli@6.6.2: resolution: {integrity: sha512-V8Oh+XMz2+uquLZltZES6MVAD+yEnmMfwfn+gpXcDiwE3jyQygLt4xoI0zG8gKt6cRcs84hsKnXAKDQjG/JAgg==} engines: {node: '>=10.0.0'} @@ -13496,6 +13953,10 @@ packages: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + server-only@0.0.1: resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} @@ -14073,6 +14534,11 @@ packages: engines: {node: '>=10'} hasBin: true + terser@5.34.1: + resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} + engines: {node: '>=10'} + hasBin: true + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -14467,6 +14933,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@5.28.4: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} @@ -14493,6 +14962,10 @@ packages: resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + unicode-property-aliases-ecmascript@2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} @@ -14599,6 +15072,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uqr@0.1.2: resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} @@ -15351,6 +15830,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -16103,8 +16587,15 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 + '@babel/code-frame@7.25.7': + dependencies: + '@babel/highlight': 7.25.7 + picocolors: 1.1.0 + '@babel/compat-data@7.25.2': {} + '@babel/compat-data@7.25.7': {} + '@babel/core@7.24.5': dependencies: '@ampproject/remapping': 2.3.0 @@ -16125,6 +16616,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.25.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.25.6': dependencies: '@babel/types': 7.25.6 @@ -16132,14 +16643,25 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.25.7': + dependencies: + '@babel/types': 7.25.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + '@babel/helper-annotate-as-pure@7.24.7': dependencies: '@babel/types': 7.25.2 - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + '@babel/helper-annotate-as-pure@7.25.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/types': 7.25.7 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color @@ -16151,6 +16673,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.25.7': + dependencies: + '@babel/compat-data': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.25.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16164,6 +16694,32 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.24.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/traverse': 7.25.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/traverse': 7.25.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16171,6 +16727,20 @@ snapshots: regexpu-core: 5.3.2 semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-annotate-as-pure': 7.25.7 + regexpu-core: 6.1.1 + semver: 6.3.1 + + '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + regexpu-core: 6.1.1 + semver: 6.3.1 + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16182,6 +16752,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.7 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + '@babel/helper-environment-visitor@7.22.20': {} '@babel/helper-member-expression-to-functions@7.24.8': @@ -16191,6 +16772,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-member-expression-to-functions@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.24.3': dependencies: '@babel/types': 7.25.2 @@ -16202,6 +16790,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.25.2(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16212,12 +16807,38 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.24.7': dependencies: '@babel/types': 7.25.2 + '@babel/helper-optimise-call-expression@7.25.7': + dependencies: + '@babel/types': 7.25.7 + '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-plugin-utils@7.25.7': {} + '@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16227,6 +16848,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-wrap-function': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-wrap-function': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-replace-supers@7.25.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16236,6 +16875,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-member-expression-to-functions': 7.25.7 + '@babel/helper-optimise-call-expression': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.25.3 @@ -16243,6 +16900,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-simple-access@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: '@babel/traverse': 7.25.3 @@ -16250,16 +16914,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.24.1': {} '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.25.7': {} + '@babel/helper-validator-identifier@7.24.5': {} '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.7': {} + '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-validator-option@7.25.7': {} + '@babel/helper-wrap-function@7.25.0': dependencies: '@babel/template': 7.25.0 @@ -16268,6 +16945,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-wrap-function@7.25.7': + dependencies: + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/helpers@7.24.5': dependencies: '@babel/template': 7.25.0 @@ -16276,6 +16961,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helpers@7.25.7': + dependencies: + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 + '@babel/highlight@7.24.5': dependencies: '@babel/helper-validator-identifier': 7.24.5 @@ -16290,6 +16980,13 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 + '@babel/highlight@7.25.7': + dependencies: + '@babel/helper-validator-identifier': 7.25.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + '@babel/parser@7.24.5': dependencies: '@babel/types': 7.24.5 @@ -16302,38 +16999,77 @@ snapshots: dependencies: '@babel/types': 7.25.6 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.24.5)': + '@babel/parser@7.25.7': + dependencies: + '@babel/types': 7.25.7 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/traverse': 7.25.6 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.24.5)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.24.5)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.24.5)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/traverse': 7.25.6 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color @@ -16361,6 +17097,12 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-export-default-from': 7.24.7(@babel/core@7.24.5) + '@babel/plugin-proposal-export-default-from@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-export-default-from': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16407,129 +17149,269 @@ snapshots: dependencies: '@babel/core': 7.24.5 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-default-from@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-default-from@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.25.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-async-generator-functions@7.25.0(@babel/core@7.24.5)': + '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-async-generator-functions@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.24.5) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) - '@babel/traverse': 7.25.6 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-generator-functions@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color @@ -16542,33 +17424,83 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-class-static-block@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-static-block@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-classes@7.25.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16581,65 +17513,162 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-classes@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.24.5) + '@babel/traverse': 7.25.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) + '@babel/traverse': 7.25.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 '@babel/template': 7.25.0 + '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/template': 7.25.7 + + '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/template': 7.25.7 + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.24.5)': + '@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-dynamic-import@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-dynamic-import@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) + + '@babel/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-export-namespace-from@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-transform-export-namespace-from@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-transform-flow-strip-types@7.25.2(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-flow-strip-types@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-flow': 7.25.7(@babel/core@7.25.7) + + '@babel/plugin-transform-for-of@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-for-of@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 transitivePeerDependencies: - supports-color @@ -16652,33 +17681,86 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-transform-json-strings@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-transform-literals@7.25.2(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-literals@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-logical-assignment-operators@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-logical-assignment-operators@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + + '@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color @@ -16691,21 +17773,57 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-simple-access': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-systemjs@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color @@ -16715,59 +17833,129 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-new-target@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-new-target@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-nullish-coalescing-operator@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-nullish-coalescing-operator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + + '@babel/plugin-transform-numeric-separator@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-numeric-separator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + + '@babel/plugin-transform-object-rest-spread@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.5) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.24.5) + + '@babel/plugin-transform-object-rest-spread@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-object-super@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.25.0(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-optional-catch-binding@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.5)': + '@babel/plugin-transform-optional-catch-binding@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + + '@babel/plugin-transform-optional-chaining@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) transitivePeerDependencies: - supports-color + '@babel/plugin-transform-optional-chaining@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16776,6 +17964,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16786,26 +17990,66 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-private-property-in-object@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-react-display-name@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-react-jsx-self@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-react-jsx-source@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16817,16 +18061,38 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) + '@babel/types': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-transform-runtime@7.24.7(@babel/core@7.24.5)': dependencies: @@ -16840,11 +18106,33 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-runtime@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -16853,20 +18141,56 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-spread@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.5)': + '@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.24.5)': dependencies: @@ -16879,16 +18203,38 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-unicode-escapes@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.5)': dependencies: @@ -16896,32 +18242,50 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.5)': + '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.24.5)': + dependencies: + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 '@babel/preset-env@7.25.3(@babel/core@7.24.5)': dependencies: - '@babel/compat-data': 7.25.2 + '@babel/compat-data': 7.25.7 '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.3(@babel/core@7.24.5) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.24.5) + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.7(@babel/core@7.24.5) '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.5) + '@babel/plugin-syntax-import-assertions': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.24.5) '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) @@ -16933,60 +18297,149 @@ snapshots: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-async-generator-functions': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-classes': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.5) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.24.5) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.24.5) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.5) - '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.5) + '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-async-generator-functions': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-block-scoped-functions': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-class-properties': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-class-static-block': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-dotall-regex': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-duplicate-keys': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-dynamic-import': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-exponentiation-operator': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-export-namespace-from': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-for-of': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-json-strings': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-logical-assignment-operators': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-member-expression-literals': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-modules-amd': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-modules-systemjs': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-modules-umd': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-new-target': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-numeric-separator': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-object-rest-spread': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-object-super': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-optional-catch-binding': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-private-property-in-object': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-reserved-words': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-template-literals': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-typeof-symbol': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-escapes': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-property-regex': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-sets-regex': 7.25.7(@babel/core@7.24.5) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.5) babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.24.5) babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) - core-js-compat: 3.38.0 + core-js-compat: 3.38.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-env@7.25.3(@babel/core@7.25.7)': + dependencies: + '@babel/compat-data': 7.25.7 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-import-assertions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.7) + '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-async-generator-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-block-scoped-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-class-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-class-static-block': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-dotall-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-duplicate-keys': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-dynamic-import': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-exponentiation-operator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-export-namespace-from': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-for-of': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-json-strings': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-member-expression-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-amd': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-systemjs': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-umd': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-new-target': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-numeric-separator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-object-rest-spread': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-object-super': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-private-property-in-object': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-reserved-words': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-template-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-typeof-symbol': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-escapes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-property-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-sets-regex': 7.25.7(@babel/core@7.25.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.7) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.7) + core-js-compat: 3.38.1 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -17001,8 +18454,15 @@ snapshots: '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.25.6 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/types': 7.25.7 + esutils: 2.0.3 + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/types': 7.25.7 esutils: 2.0.3 '@babel/preset-typescript@7.24.7(@babel/core@7.24.5)': @@ -17044,12 +18504,22 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.25.7': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.25.3 '@babel/types': 7.25.2 + '@babel/template@7.25.7': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 + '@babel/traverse@7.25.3': dependencies: '@babel/code-frame': 7.24.7 @@ -17074,6 +18544,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.25.7': + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.24.5': dependencies: '@babel/helper-string-parser': 7.24.1 @@ -17092,6 +18574,12 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@babel/types@7.25.7': + dependencies: + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + '@brillout/import@0.2.3': {} '@canvas-js/chain-cosmos@0.10.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)': @@ -17163,10 +18651,10 @@ snapshots: - supports-color - utf-8-validate - '@canvas-js/core@0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)': + '@canvas-js/core@0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@canvas-js/chain-ethereum': 0.10.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@canvas-js/gossiplog': 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + '@canvas-js/gossiplog': 0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) '@canvas-js/interfaces': 0.10.10 '@canvas-js/modeldb': 0.10.10 '@canvas-js/modeldb-idb': 0.10.10(@types/react@18.3.3)(react@18.3.1) @@ -17219,7 +18707,7 @@ snapshots: '@libp2p/peer-id': 4.2.4 '@multiformats/multiaddr': 12.3.0 - '@canvas-js/gossiplog@0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)': + '@canvas-js/gossiplog@0.10.10(@types/react@18.3.3)(bufferutil@4.0.8)(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@canvas-js/discovery': 0.10.10 '@canvas-js/interfaces': 0.10.10 @@ -17249,7 +18737,7 @@ snapshots: '@libp2p/peer-id-factory': 4.2.4 '@libp2p/ping': 1.1.5 '@libp2p/prometheus-metrics': 3.1.5 - '@libp2p/webrtc': 4.1.7(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)) + '@libp2p/webrtc': 4.1.7(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)) '@libp2p/websockets': 8.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@multiformats/multiaddr': 12.3.0 '@noble/hashes': 1.4.0 @@ -17768,7 +19256,7 @@ snapshots: eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.1 keccak: 3.0.4 - preact: 10.23.2 + preact: 10.24.2 sha.js: 2.4.11 transitivePeerDependencies: - supports-color @@ -19608,7 +21096,7 @@ snapshots: uint8arraylist: 2.4.8 uint8arrays: 5.1.0 - '@libp2p/webrtc@4.1.7(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))': + '@libp2p/webrtc@4.1.7(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))': dependencies: '@chainsafe/libp2p-noise': 15.1.1 '@libp2p/interface': 1.7.0 @@ -19631,7 +21119,7 @@ snapshots: progress-events: 1.0.0 protons-runtime: 5.5.0 race-signal: 1.1.0 - react-native-webrtc: 118.0.7(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)) + react-native-webrtc: 118.0.7(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)) uint8arraylist: 2.4.8 uint8arrays: 5.1.0 transitivePeerDependencies: @@ -20260,10 +21748,10 @@ snapshots: '@nomicfoundation/solidity-analyzer-win32-ia32-msvc': 0.1.1 '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 - '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))': + '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))': dependencies: ethers: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) + hardhat: 2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) '@one-ini/wasm@0.1.1': {} @@ -20448,7 +21936,7 @@ snapshots: '@polkadot/api-derive@6.0.5': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/api': 6.0.5 '@polkadot/rpc-core': 6.0.5 '@polkadot/types': 6.0.5 @@ -20461,7 +21949,7 @@ snapshots: '@polkadot/api@6.0.5': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/api-derive': 6.0.5 '@polkadot/keyring': 7.9.2(@polkadot/util-crypto@7.9.2(@polkadot/util@7.9.2))(@polkadot/util@7.9.2) '@polkadot/rpc-core': 6.0.5 @@ -20525,7 +22013,7 @@ snapshots: '@polkadot/keyring@7.9.2(@polkadot/util-crypto@7.9.2(@polkadot/util@7.9.2))(@polkadot/util@7.9.2)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/util': 7.9.2 '@polkadot/util-crypto': 7.9.2(@polkadot/util@7.9.2) @@ -20537,11 +22025,11 @@ snapshots: '@polkadot/networks@7.9.2': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/rpc-core@6.0.5': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/rpc-provider': 6.0.5 '@polkadot/types': 6.0.5 '@polkadot/util': 7.9.2 @@ -20594,7 +22082,7 @@ snapshots: '@polkadot/rpc-provider@6.0.5': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/types': 6.0.5 '@polkadot/util': 7.9.2 '@polkadot/util-crypto': 7.9.2(@polkadot/util@7.9.2) @@ -20646,7 +22134,7 @@ snapshots: '@polkadot/types-known@6.0.5': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/networks': 7.9.2 '@polkadot/types': 6.0.5 '@polkadot/util': 7.9.2 @@ -20685,7 +22173,7 @@ snapshots: '@polkadot/types@6.0.5': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/util': 7.9.2 '@polkadot/util-crypto': 7.9.2(@polkadot/util@7.9.2) rxjs: 7.8.1 @@ -20705,7 +22193,7 @@ snapshots: '@polkadot/util-crypto@7.9.2(@polkadot/util@7.9.2)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/networks': 7.9.2 '@polkadot/util': 7.9.2 '@polkadot/wasm-crypto': 4.6.1(@polkadot/util@7.9.2)(@polkadot/x-randomvalues@7.9.2) @@ -20734,7 +22222,7 @@ snapshots: '@polkadot/util@7.9.2': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/x-textdecoder': 7.9.2 '@polkadot/x-textencoder': 7.9.2 '@types/bn.js': 4.11.6 @@ -20751,7 +22239,7 @@ snapshots: '@polkadot/wasm-crypto-asmjs@4.6.1(@polkadot/util@7.9.2)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/util': 7.9.2 '@polkadot/wasm-crypto-asmjs@7.3.2(@polkadot/util@12.6.2)': @@ -20771,7 +22259,7 @@ snapshots: '@polkadot/wasm-crypto-wasm@4.6.1(@polkadot/util@7.9.2)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/util': 7.9.2 '@polkadot/wasm-crypto-wasm@7.3.2(@polkadot/util@12.6.2)': @@ -20782,7 +22270,7 @@ snapshots: '@polkadot/wasm-crypto@4.6.1(@polkadot/util@7.9.2)(@polkadot/x-randomvalues@7.9.2)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/util': 7.9.2 '@polkadot/wasm-crypto-asmjs': 4.6.1(@polkadot/util@7.9.2) '@polkadot/wasm-crypto-wasm': 4.6.1(@polkadot/util@7.9.2) @@ -20817,7 +22305,7 @@ snapshots: '@polkadot/x-fetch@7.9.2': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/x-global': 7.9.2 '@types/node-fetch': 2.6.11 node-fetch: 2.7.0 @@ -20830,7 +22318,7 @@ snapshots: '@polkadot/x-global@7.9.2': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2))': dependencies: @@ -20841,7 +22329,7 @@ snapshots: '@polkadot/x-randomvalues@7.9.2': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/x-global': 7.9.2 '@polkadot/x-textdecoder@12.6.2': @@ -20851,7 +22339,7 @@ snapshots: '@polkadot/x-textdecoder@7.9.2': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/x-global': 7.9.2 '@polkadot/x-textencoder@12.6.2': @@ -20861,7 +22349,7 @@ snapshots: '@polkadot/x-textencoder@7.9.2': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/x-global': 7.9.2 '@polkadot/x-ws@12.6.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': @@ -20875,7 +22363,7 @@ snapshots: '@polkadot/x-ws@7.9.2': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@polkadot/x-global': 7.9.2 '@types/websocket': 1.0.10 websocket: 1.0.35 @@ -21497,7 +22985,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.4.5) deepmerge: 4.3.1 fast-glob: 3.3.2 - joi: 17.13.1 + joi: 17.13.3 transitivePeerDependencies: - typescript @@ -21509,13 +22997,13 @@ snapshots: '@react-native-community/cli-debugger-ui@14.0.0': dependencies: - serve-static: 1.15.0 + serve-static: 1.16.2 transitivePeerDependencies: - supports-color '@react-native-community/cli-debugger-ui@14.0.0-alpha.11': dependencies: - serve-static: 1.15.0 + serve-static: 1.16.2 transitivePeerDependencies: - supports-color @@ -21551,14 +23039,14 @@ snapshots: chalk: 4.1.2 command-exists: 1.2.9 deepmerge: 4.3.1 - envinfo: 7.13.0 + envinfo: 7.14.0 execa: 5.1.1 node-stream-zip: 1.15.0 ora: 5.4.1 - semver: 7.6.0 + semver: 7.6.3 strip-ansi: 5.2.0 wcwidth: 1.0.1 - yaml: 2.5.0 + yaml: 2.5.1 transitivePeerDependencies: - typescript @@ -21588,7 +23076,7 @@ snapshots: chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 - fast-xml-parser: 4.2.5 + fast-xml-parser: 4.5.0 logkitty: 0.7.1 '@react-native-community/cli-platform-apple@13.6.4': @@ -21608,7 +23096,7 @@ snapshots: chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 - fast-xml-parser: 4.2.5 + fast-xml-parser: 4.5.0 ora: 5.4.1 '@react-native-community/cli-platform-ios@13.6.4': @@ -21647,7 +23135,7 @@ snapshots: errorhandler: 1.5.1 nocache: 3.0.4 pretty-format: 26.6.2 - serve-static: 1.15.0 + serve-static: 1.16.2 ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil @@ -21663,7 +23151,7 @@ snapshots: errorhandler: 1.5.1 nocache: 3.0.4 pretty-format: 26.6.2 - serve-static: 1.15.0 + serve-static: 1.16.2 ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil @@ -21695,7 +23183,7 @@ snapshots: mime: 2.6.0 open: 6.4.0 ora: 5.4.1 - semver: 7.6.0 + semver: 7.6.3 shell-quote: 1.8.1 sudo-prompt: 9.2.1 @@ -21708,7 +23196,7 @@ snapshots: mime: 2.6.0 open: 6.4.0 ora: 5.4.1 - semver: 7.6.0 + semver: 7.6.3 shell-quote: 1.8.1 sudo-prompt: 9.2.1 @@ -21718,7 +23206,7 @@ snapshots: '@react-native-community/cli-types@14.0.0': dependencies: - joi: 17.13.1 + joi: 17.13.3 '@react-native-community/cli@13.6.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: @@ -21762,7 +23250,7 @@ snapshots: fs-extra: 8.1.0 graceful-fs: 4.2.11 prompts: 2.4.2 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - bufferutil - supports-color @@ -21780,9 +23268,9 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/babel-plugin-codegen@0.75.1(@babel/preset-env@7.25.3(@babel/core@7.24.5))': + '@react-native/babel-plugin-codegen@0.75.1(@babel/preset-env@7.25.3(@babel/core@7.25.7))': dependencies: - '@react-native/codegen': 0.75.1(@babel/preset-env@7.25.3(@babel/core@7.24.5)) + '@react-native/codegen': 0.75.1(@babel/preset-env@7.25.3(@babel/core@7.25.7)) transitivePeerDependencies: - '@babel/preset-env' - supports-color @@ -21836,52 +23324,52 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))': - dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-proposal-export-default-from': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-export-default-from': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-async-generator-functions': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-classes': 7.25.0(@babel/core@7.24.5) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.5) - '@babel/plugin-transform-flow-strip-types': 7.25.2(@babel/core@7.24.5) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.24.5) - '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.24.5) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.5) - '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.5) - '@babel/template': 7.25.0 - '@react-native/babel-plugin-codegen': 0.75.1(@babel/preset-env@7.25.3(@babel/core@7.24.5)) - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.24.5) + '@react-native/babel-preset@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))': + dependencies: + '@babel/core': 7.25.7 + '@babel/plugin-proposal-export-default-from': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-export-default-from': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-flow': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-async-generator-functions': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-class-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-flow-strip-types': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-for-of': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-numeric-separator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-object-rest-spread': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-private-property-in-object': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-react-display-name': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-react-jsx': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-react-jsx-self': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-react-jsx-source': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-runtime': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.25.7) + '@babel/template': 7.25.7 + '@react-native/babel-plugin-codegen': 0.75.1(@babel/preset-env@7.25.3(@babel/core@7.25.7)) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.25.7) react-refresh: 0.14.2 transitivePeerDependencies: - '@babel/preset-env' @@ -21900,14 +23388,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/codegen@0.75.1(@babel/preset-env@7.25.3(@babel/core@7.24.5))': + '@react-native/codegen@0.75.1(@babel/preset-env@7.25.3(@babel/core@7.25.7))': dependencies: - '@babel/parser': 7.25.6 - '@babel/preset-env': 7.25.3(@babel/core@7.24.5) + '@babel/parser': 7.25.7 + '@babel/preset-env': 7.25.3(@babel/core@7.25.7) glob: 7.2.3 hermes-parser: 0.22.0 invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.25.3(@babel/core@7.24.5)) + jscodeshift: 0.14.0(@babel/preset-env@7.25.3(@babel/core@7.25.7)) mkdirp: 0.5.6 nullthrows: 1.1.1 transitivePeerDependencies: @@ -21935,17 +23423,17 @@ snapshots: - supports-color - utf-8-validate - '@react-native/community-cli-plugin@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + '@react-native/community-cli-plugin@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@react-native-community/cli-server-api': 14.0.0-alpha.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@react-native-community/cli-tools': 14.0.0-alpha.11 '@react-native/dev-middleware': 0.75.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@react-native/metro-babel-transformer': 0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5)) + '@react-native/metro-babel-transformer': 0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7)) chalk: 4.1.2 execa: 5.1.1 - metro: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-config: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-core: 0.80.10 + metro: 0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-config: 0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-core: 0.80.12 node-fetch: 2.7.0 querystring: 0.2.1 readline: 1.3.0 @@ -21994,7 +23482,7 @@ snapshots: nullthrows: 1.1.1 open: 7.4.2 selfsigned: 2.4.1 - serve-static: 1.15.0 + serve-static: 1.16.2 ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil @@ -22020,10 +23508,10 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/metro-babel-transformer@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))': + '@react-native/metro-babel-transformer@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))': dependencies: - '@babel/core': 7.24.5 - '@react-native/babel-preset': 0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5)) + '@babel/core': 7.25.7 + '@react-native/babel-preset': 0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7)) hermes-parser: 0.22.0 nullthrows: 1.1.1 transitivePeerDependencies: @@ -22043,12 +23531,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.3 - '@react-native/virtualized-lists@0.75.1(@types/react@18.3.3)(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)': + '@react-native/virtualized-lists@0.75.1(@types/react@18.3.3)(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10) + react-native: 0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 18.3.3 @@ -23088,10 +24576,10 @@ snapshots: - '@types/react' - react-dom - '@tanstack/react-query-devtools@4.36.1(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-query-devtools@4.36.1(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/match-sorter-utils': 8.15.1 - '@tanstack/react-query': 4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) + '@tanstack/react-query': 4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) superjson: 1.13.3 @@ -23106,14 +24594,14 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-native: 0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - '@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)': + '@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: '@tanstack/query-core': 4.36.1 react: 18.3.1 use-sync-external-store: 1.2.2(react@18.3.1) optionalDependencies: react-dom: 18.3.1(react@18.3.1) - react-native: 0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10) + react-native: 0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10) '@tanstack/react-store@0.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -23221,9 +24709,9 @@ snapshots: dependencies: '@trpc/server': 10.45.2 - '@trpc/react-query@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@trpc/react-query@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/react-query': 4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) + '@tanstack/react-query': 4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) '@trpc/client': 10.45.2(@trpc/server@10.45.2) '@trpc/server': 10.45.2 react: 18.3.1 @@ -23549,6 +25037,11 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + optional: true + '@types/node@8.10.66': {} '@types/normalize-package-data@2.4.4': {} @@ -23908,14 +25401,14 @@ snapshots: - debug - utf-8-validate - '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.12)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0))': + '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.12)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1))': dependencies: '@swc/core': 1.5.25(@swc/helpers@0.5.12) - vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0) + vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1) transitivePeerDependencies: - '@swc/helpers' - '@vitest/coverage-istanbul@1.6.0(vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0))': + '@vitest/coverage-istanbul@1.6.0(vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.34.1))': dependencies: debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 @@ -23926,7 +25419,7 @@ snapshots: magicast: 0.3.4 picocolors: 1.0.0 test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0) + vitest: 1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.34.1) transitivePeerDependencies: - supports-color @@ -25288,6 +26781,15 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.7): + dependencies: + '@babel/compat-data': 7.25.2 + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.24.5): dependencies: '@babel/core': 7.24.5 @@ -25296,6 +26798,14 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.7): + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) + core-js-compat: 3.38.0 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.5): dependencies: '@babel/core': 7.24.5 @@ -25303,12 +26813,25 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.7): + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) + transitivePeerDependencies: + - supports-color + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.24.5): dependencies: '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.25.7): + dependencies: + '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.25.7) + transitivePeerDependencies: + - '@babel/core' + balanced-match@1.0.2: {} balanced-match@2.0.0: {} @@ -25451,6 +26974,10 @@ snapshots: dependencies: fill-range: 7.0.1 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + brorand@1.1.0: {} browser-headers@0.4.1: {} @@ -25516,6 +27043,13 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) + browserslist@4.24.0: + dependencies: + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.35 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) + bs58@4.0.1: dependencies: base-x: 3.0.9 @@ -25626,6 +27160,8 @@ snapshots: caniuse-lite@1.0.30001655: {} + caniuse-lite@1.0.30001667: {} + canvas-renderer@2.1.1: {} canvas-renderer@2.2.1: @@ -26109,6 +27645,10 @@ snapshots: dependencies: browserslist: 4.23.3 + core-js-compat@3.38.1: + dependencies: + browserslist: 4.24.0 + core-js-pure@3.37.0: {} core-js@3.37.0: {} @@ -26716,6 +28256,8 @@ snapshots: electron-to-chromium@1.5.11: {} + electron-to-chromium@1.5.35: {} + elliptic@6.5.4: dependencies: bn.js: 4.12.0 @@ -26758,6 +28300,8 @@ snapshots: encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -26806,6 +28350,8 @@ snapshots: envinfo@7.13.0: {} + envinfo@7.14.0: {} + err-code@3.0.1: {} error-ex@1.3.2: @@ -27018,6 +28564,8 @@ snapshots: escalade@3.1.2: {} + escalade@3.2.0: {} + escape-carriage@1.3.1: {} escape-html@1.0.3: {} @@ -27668,6 +29216,10 @@ snapshots: dependencies: strnum: 1.0.5 + fast-xml-parser@4.5.0: + dependencies: + strnum: 1.0.5 + fastest-levenshtein@1.0.16: {} fastestsmallesttextencoderdecoder@1.0.22: {} @@ -27741,6 +29293,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + filter-obj@1.1.0: {} finalhandler@1.1.2: @@ -27909,6 +29465,12 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + format@0.2.2: {} formdata-node@4.4.1: @@ -28197,13 +29759,13 @@ snapshots: hard-rejection@2.1.0: {} - hardhat-typechain@0.3.5(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(ts-generator@0.1.1)(typechain@4.0.3(typescript@5.4.5)): + hardhat-typechain@0.3.5(hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))(ts-generator@0.1.1)(typechain@4.0.3(typescript@5.4.5)): dependencies: - hardhat: 2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) + hardhat: 2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) ts-generator: 0.1.1 typechain: 4.0.3(typescript@5.4.5) - hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10): + hardhat@2.22.3(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 @@ -28249,7 +29811,7 @@ snapshots: uuid: 8.3.2 ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - bufferutil @@ -28317,6 +29879,8 @@ snapshots: hermes-estree@0.23.0: {} + hermes-estree@0.23.1: {} + hermes-parser@0.19.1: dependencies: hermes-estree: 0.19.1 @@ -28329,6 +29893,10 @@ snapshots: dependencies: hermes-estree: 0.23.0 + hermes-parser@0.23.1: + dependencies: + hermes-estree: 0.23.1 + hermes-profile-transformer@0.0.6: dependencies: source-map: 0.7.4 @@ -29189,6 +30757,14 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + jose@5.3.0: {} joycon@3.1.1: {} @@ -29249,6 +30825,31 @@ snapshots: transitivePeerDependencies: - supports-color + jscodeshift@0.14.0(@babel/preset-env@7.25.3(@babel/core@7.25.7)): + dependencies: + '@babel/core': 7.24.5 + '@babel/parser': 7.25.3 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.5) + '@babel/preset-env': 7.25.3(@babel/core@7.25.7) + '@babel/preset-flow': 7.24.7(@babel/core@7.24.5) + '@babel/preset-typescript': 7.24.7(@babel/core@7.24.5) + '@babel/register': 7.24.6(@babel/core@7.24.5) + babel-core: 7.0.0-bridge.0(@babel/core@7.24.5) + chalk: 4.1.2 + flow-parser: 0.245.0 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.21.5 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color + jscrypto@1.0.3: {} jsdom-global@3.0.2(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)): @@ -29260,12 +30861,12 @@ snapshots: cssstyle: 4.1.0 data-urls: 5.0.0 decimal.js: 10.4.3 - form-data: 4.0.0 + form-data: 4.0.1 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 + nwsapi: 2.2.13 parse5: 7.1.2 rrweb-cssom: 0.6.0 saxes: 6.0.0 @@ -29288,12 +30889,12 @@ snapshots: cssstyle: 4.1.0 data-urls: 5.0.0 decimal.js: 10.4.3 - form-data: 4.0.0 + form-data: 4.0.1 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 + nwsapi: 2.2.13 parse5: 7.1.2 rrweb-cssom: 0.6.0 saxes: 6.0.0 @@ -29316,6 +30917,8 @@ snapshots: jsesc@2.5.2: {} + jsesc@3.0.2: {} + json-buffer@3.0.1: {} json-parse-better-errors@1.0.2: {} @@ -29440,7 +31043,7 @@ snapshots: lexical@0.17.1: {} - lib0@0.2.97: + lib0@0.2.98: dependencies: isomorphic.js: 0.2.5 @@ -29951,16 +31554,35 @@ snapshots: transitivePeerDependencies: - supports-color + metro-babel-transformer@0.80.12: + dependencies: + '@babel/core': 7.25.7 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.23.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-cache-key@0.80.10: dependencies: flow-enums-runtime: 0.0.6 + metro-cache-key@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + metro-cache@0.80.10: dependencies: exponential-backoff: 3.1.1 flow-enums-runtime: 0.0.6 metro-core: 0.80.10 + metro-cache@0.80.12: + dependencies: + exponential-backoff: 3.1.1 + flow-enums-runtime: 0.0.6 + metro-core: 0.80.12 + metro-config@0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: connect: 3.7.0 @@ -29977,12 +31599,33 @@ snapshots: - supports-color - utf-8-validate + metro-config@0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + connect: 3.7.0 + cosmiconfig: 5.2.1 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-cache: 0.80.12 + metro-core: 0.80.12 + metro-runtime: 0.80.12 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro-core@0.80.10: dependencies: flow-enums-runtime: 0.0.6 lodash.throttle: 4.1.1 metro-resolver: 0.80.10 + metro-core@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.80.12 + metro-file-map@0.80.10: dependencies: anymatch: 3.1.3 @@ -30001,20 +31644,52 @@ snapshots: transitivePeerDependencies: - supports-color + metro-file-map@0.80.12: + dependencies: + anymatch: 3.1.3 + debug: 2.6.9 + fb-watchman: 2.0.2 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + node-abort-controller: 3.1.1 + nullthrows: 1.1.1 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - supports-color + metro-minify-terser@0.80.10: dependencies: flow-enums-runtime: 0.0.6 terser: 5.31.0 + metro-minify-terser@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.34.1 + metro-resolver@0.80.10: dependencies: flow-enums-runtime: 0.0.6 + metro-resolver@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + metro-runtime@0.80.10: dependencies: '@babel/runtime': 7.25.6 flow-enums-runtime: 0.0.6 + metro-runtime@0.80.12: + dependencies: + '@babel/runtime': 7.25.7 + flow-enums-runtime: 0.0.6 + metro-source-map@0.80.10: dependencies: '@babel/traverse': 7.25.6 @@ -30029,6 +31704,20 @@ snapshots: transitivePeerDependencies: - supports-color + metro-source-map@0.80.12: + dependencies: + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.80.12 + nullthrows: 1.1.1 + ob1: 0.80.12 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-symbolicate@0.80.10: dependencies: flow-enums-runtime: 0.0.6 @@ -30041,6 +31730,18 @@ snapshots: transitivePeerDependencies: - supports-color + metro-symbolicate@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.80.12 + nullthrows: 1.1.1 + source-map: 0.5.7 + through2: 2.0.5 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-transform-plugins@0.80.10: dependencies: '@babel/core': 7.24.5 @@ -30052,6 +31753,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-transform-plugins@0.80.12: + dependencies: + '@babel/core': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-transform-worker@0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.24.5 @@ -30073,6 +31785,26 @@ snapshots: - supports-color - utf-8-validate + metro-transform-worker@0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@babel/core': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 + flow-enums-runtime: 0.0.6 + metro: 0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-babel-transformer: 0.80.12 + metro-cache: 0.80.12 + metro-cache-key: 0.80.12 + metro-minify-terser: 0.80.12 + metro-source-map: 0.80.12 + metro-transform-plugins: 0.80.12 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro@0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@babel/code-frame': 7.24.7 @@ -30124,6 +31856,55 @@ snapshots: - supports-color - utf-8-validate + metro@0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@babel/code-frame': 7.25.7 + '@babel/core': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 + accepts: 1.3.8 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 2.6.9 + denodeify: 1.2.1 + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.23.1 + image-size: 1.1.1 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.80.12 + metro-cache: 0.80.12 + metro-cache-key: 0.80.12 + metro-config: 0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-core: 0.80.12 + metro-file-map: 0.80.12 + metro-resolver: 0.80.12 + metro-runtime: 0.80.12 + metro-source-map: 0.80.12 + metro-symbolicate: 0.80.12 + metro-transform-plugins: 0.80.12 + metro-transform-worker: 0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) + mime-types: 2.1.35 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + strip-ansi: 6.0.1 + throat: 5.0.0 + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + micro-base@0.9.0: {} micro-ftch@0.3.1: {} @@ -30383,6 +32164,11 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + miller-rabin@4.0.1: dependencies: bn.js: 4.12.0 @@ -30825,7 +32611,7 @@ snapshots: numeral@2.0.6: {} - nwsapi@2.2.12: {} + nwsapi@2.2.13: {} nyc@15.1.0: dependencies: @@ -30865,6 +32651,10 @@ snapshots: dependencies: flow-enums-runtime: 0.0.6 + ob1@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + obj-multiplex@1.0.0: dependencies: end-of-stream: 1.4.4 @@ -31328,6 +33118,8 @@ snapshots: picocolors@1.0.1: {} + picocolors@1.1.0: {} + picomatch@2.3.1: {} picomatch@4.0.2: {} @@ -31560,6 +33352,8 @@ snapshots: preact@10.23.2: {} + preact@10.24.2: {} + prebuild-install@7.1.2: dependencies: detect-libc: 2.0.3 @@ -31918,7 +33712,7 @@ snapshots: lodash.flow: 3.5.0 pure-color: 1.3.0 - react-beautiful-dnd@13.1.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1): + react-beautiful-dnd@13.1.1(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: '@babel/runtime': 7.24.5 css-box-model: 1.2.1 @@ -31926,7 +33720,7 @@ snapshots: raf-schd: 4.0.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-redux: 7.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) + react-redux: 7.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) redux: 4.2.1 use-memo-one: 1.1.3(react@18.3.1) transitivePeerDependencies: @@ -31946,6 +33740,14 @@ snapshots: - bufferutil - utf-8-validate + react-devtools-core@5.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + shell-quote: 1.8.1 + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + react-devtools-inline@4.4.0: dependencies: es6-symbol: 3.1.4 @@ -31991,7 +33793,7 @@ snapshots: react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 html-parse-stringify: 3.0.1 i18next: 23.11.5 react: 18.3.1 @@ -32050,12 +33852,12 @@ snapshots: react: 18.3.1 react-native: 0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - react-native-webrtc@118.0.7(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)): + react-native-webrtc@118.0.7(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)): dependencies: base64-js: 1.5.1 debug: 4.3.4(supports-color@8.1.1) event-target-shim: 6.0.2 - react-native: 0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10) + react-native: 0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10) transitivePeerDependencies: - supports-color @@ -32116,19 +33918,19 @@ snapshots: - supports-color - utf-8-validate - react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10): + react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native-community/cli': 14.0.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) '@react-native-community/cli-platform-android': 14.0.0 '@react-native-community/cli-platform-ios': 14.0.0 '@react-native/assets-registry': 0.75.1 - '@react-native/codegen': 0.75.1(@babel/preset-env@7.25.3(@babel/core@7.24.5)) - '@react-native/community-cli-plugin': 0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@react-native/codegen': 0.75.1(@babel/preset-env@7.25.3(@babel/core@7.25.7)) + '@react-native/community-cli-plugin': 0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@react-native/gradle-plugin': 0.75.1 '@react-native/js-polyfills': 0.75.1 '@react-native/normalize-colors': 0.75.1 - '@react-native/virtualized-lists': 0.75.1(@types/react@18.3.3)(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) + '@react-native/virtualized-lists': 0.75.1(@types/react@18.3.3)(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -32141,18 +33943,18 @@ snapshots: jest-environment-node: 29.7.0 jsc-android: 250231.0.0 memoize-one: 5.2.1 - metro-runtime: 0.80.10 - metro-source-map: 0.80.10 + metro-runtime: 0.80.12 + metro-source-map: 0.80.12 mkdirp: 0.5.6 nullthrows: 1.1.1 pretty-format: 26.6.2 promise: 8.3.0 react: 18.3.1 - react-devtools-core: 5.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + react-devtools-core: 5.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) react-refresh: 0.14.2 regenerator-runtime: 0.13.11 scheduler: 0.24.0-canary-efb381bbf-20230505 - semver: 7.6.0 + semver: 7.6.3 stacktrace-parser: 0.1.10 whatwg-fetch: 3.6.20 ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -32192,7 +33994,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1): + react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: '@babel/runtime': 7.24.5 '@types/react-redux': 7.1.33 @@ -32203,7 +34005,7 @@ snapshots: react-is: 17.0.2 optionalDependencies: react-dom: 18.3.1(react@18.3.1) - react-native: 0.75.1(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10) + react-native: 0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10) react-refresh@0.14.2: {} @@ -32424,6 +34226,10 @@ snapshots: dependencies: regenerate: 1.4.2 + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + regenerate@1.4.2: {} regenerator-runtime@0.13.11: {} @@ -32432,7 +34238,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 regexp-tree@0.1.27: {} @@ -32452,6 +34258,21 @@ snapshots: unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 + regexpu-core@6.1.1: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.11.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + + regjsparser@0.11.1: + dependencies: + jsesc: 3.0.2 + regjsparser@0.9.1: dependencies: jsesc: 0.5.0 @@ -32756,6 +34577,8 @@ snapshots: dependencies: lru-cache: 6.0.0 + semver@7.6.3: {} + send@0.18.0: dependencies: debug: 2.6.9 @@ -32774,6 +34597,24 @@ snapshots: transitivePeerDependencies: - supports-color + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + sequelize-cli@6.6.2: dependencies: cli-color: 2.0.4 @@ -32824,6 +34665,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + server-only@0.0.1: {} set-blocking@2.0.0: {} @@ -33564,6 +35414,13 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + terser@5.34.1: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -33757,6 +35614,27 @@ snapshots: optionalDependencies: '@swc/core': 1.5.25(@swc/helpers@0.5.12) + ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@22.7.5)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.7.5 + acorn: 8.12.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.5.25(@swc/helpers@0.5.12) + optional: true + ts-toolbelt@9.6.0: {} tsc-alias@1.8.8: @@ -33989,6 +35867,9 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.19.8: + optional: true + undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 @@ -34014,6 +35895,8 @@ snapshots: unicode-match-property-value-ecmascript@2.1.0: {} + unicode-match-property-value-ecmascript@2.2.0: {} + unicode-property-aliases-ecmascript@2.1.0: {} unidiff@1.0.4: @@ -34097,6 +35980,12 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 + update-browserslist-db@1.1.1(browserslist@4.24.0): + dependencies: + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.0 + uqr@0.1.2: {} uri-js@4.4.1: @@ -34283,13 +36172,13 @@ snapshots: - rollup - supports-color - vite-node@1.6.0(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0): + vite-node@1.6.0(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1): dependencies: cac: 6.7.14 debug: 4.3.5 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0) + vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1) transitivePeerDependencies: - '@types/node' - less @@ -34300,7 +36189,7 @@ snapshots: - supports-color - terser - vite-plugin-html@3.2.2(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)): + vite-plugin-html@3.2.2(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -34314,28 +36203,28 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0) + vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1) - vite-plugin-node-polyfills@0.22.0(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)): + vite-plugin-node-polyfills@0.22.0(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.18.0) node-stdlib-browser: 1.2.0 - vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0) + vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1) transitivePeerDependencies: - rollup - vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0)): + vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1)): dependencies: debug: 4.3.4(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 3.1.0(typescript@5.4.5) optionalDependencies: - vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0) + vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1) transitivePeerDependencies: - supports-color - typescript - vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0): + vite@5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1): dependencies: esbuild: 0.20.2 postcss: 8.4.38 @@ -34344,9 +36233,9 @@ snapshots: '@types/node': 20.12.10 fsevents: 2.3.3 sass: 1.77.0 - terser: 5.31.0 + terser: 5.34.1 - vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.31.0): + vitest@1.6.0(@types/node@20.12.10)(jsdom@24.0.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(sass@1.77.0)(terser@5.34.1): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -34365,8 +36254,8 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.8.0 tinypool: 0.8.4 - vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0) - vite-node: 1.6.0(@types/node@20.12.10)(sass@1.77.0)(terser@5.31.0) + vite: 5.2.12(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1) + vite-node: 1.6.0(@types/node@20.12.10)(sass@1.77.0)(terser@5.34.1) why-is-node-running: 2.2.2 optionalDependencies: '@types/node': 20.12.10 @@ -35296,6 +37185,8 @@ snapshots: yaml@2.5.0: {} + yaml@2.5.1: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 @@ -35350,7 +37241,7 @@ snapshots: yjs@13.6.18: dependencies: - lib0: 0.2.97 + lib0: 0.2.98 yn@3.1.1: {} From 3261ef0b76c03e8186c3d2352074acbf3d237569 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 10 Oct 2024 10:27:02 -0400 Subject: [PATCH 095/425] remove tsc, publish from src --- libs/api-client/README.md | 10 +++++++++- libs/api-client/fern/docs.yml | 2 +- libs/api-client/package.json | 18 ++++-------------- libs/api-client/test/index.ts | 20 -------------------- libs/api-client/tsconfig.build.json | 9 --------- libs/api-client/tsconfig.json | 4 ---- 6 files changed, 14 insertions(+), 49 deletions(-) delete mode 100644 libs/api-client/test/index.ts delete mode 100644 libs/api-client/tsconfig.build.json delete mode 100644 libs/api-client/tsconfig.json diff --git a/libs/api-client/README.md b/libs/api-client/README.md index 9a4401a00bb..e6f6b2e5759 100644 --- a/libs/api-client/README.md +++ b/libs/api-client/README.md @@ -1,6 +1,14 @@ # Common API -## Manual Setup +## Documentation + +[Fern API Reference](https://common.docs.buildwithfern.com) + +## CI/CD Instructions (Developers) + +- TODO + +## Manual Setup (Developers) ### Generate a new API client diff --git a/libs/api-client/fern/docs.yml b/libs/api-client/fern/docs.yml index 37d2853fc5c..7e402ab6770 100644 --- a/libs/api-client/fern/docs.yml +++ b/libs/api-client/fern/docs.yml @@ -1,5 +1,5 @@ instances: - - url: https://Common.docs.buildwithfern.com + - url: https://common.docs.buildwithfern.com title: Common | Documentation navigation: - api: API Reference diff --git a/libs/api-client/package.json b/libs/api-client/package.json index f4b30277bd7..bcde782ecbb 100644 --- a/libs/api-client/package.json +++ b/libs/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@commonxyz/api-client", - "version": "0.0.2", + "version": "0.0.3", "type": "module", "description": "Common Client Proxy", "repository": { @@ -15,12 +15,11 @@ "access": "public" }, "files": [ - "build" + "src" ], "exports": { ".": { - "default": "./build/index.js", - "devmode": "./src/index.ts" + "default": "./src/index.js" } }, "scripts": { @@ -38,14 +37,5 @@ "community" ], "author": "common.xyz", - "license": "MIT", - "dependencies": { - "moment": "^2.23.0", - "qs": "^6.13.0", - "url-join": "^5.0.0" - }, - "devDependencies": { - "@types/moment": "^2.13.0", - "tsx": "^4.7.2" - } + "license": "MIT" } diff --git a/libs/api-client/test/index.ts b/libs/api-client/test/index.ts deleted file mode 100644 index e99ced9a5f7..00000000000 --- a/libs/api-client/test/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Quick and dirty api-client test -import { CommonApiClient } from '@hicommonwealth/api-client'; - -async function main() { - const client = new CommonApiClient({ - apiKey: '', - address: '', - }); - const members = await client.community.getMembers({ - communityId: 'sushi', - limit: '10', - cursor: '1', - orderBy: 'last_active', - orderDirection: 'DESC', - includeRoles: true, - }); - console.log(members); -} - -void main(); diff --git a/libs/api-client/tsconfig.build.json b/libs/api-client/tsconfig.build.json deleted file mode 100644 index ae1687b715d..00000000000 --- a/libs/api-client/tsconfig.build.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "build" - }, - "include": ["src"], - "references": [] -} diff --git a/libs/api-client/tsconfig.json b/libs/api-client/tsconfig.json deleted file mode 100644 index 4f4bd883433..00000000000 --- a/libs/api-client/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../tsconfig.json", - "references": [] -} From ac06957db75c18cfcf302b4628c477c1212bd781 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 10 Oct 2024 10:31:33 -0400 Subject: [PATCH 096/425] refresh pnpm lock --- pnpm-lock.yaml | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 923221ea0ad..2e6bd1f8197 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -422,24 +422,7 @@ importers: specifier: ^4.7.2 version: 4.9.3 - libs/api-client: - dependencies: - moment: - specifier: ^2.23.0 - version: 2.30.1 - qs: - specifier: ^6.13.0 - version: 6.13.0 - url-join: - specifier: ^5.0.0 - version: 5.0.0 - devDependencies: - '@types/moment': - specifier: ^2.13.0 - version: 2.13.0 - tsx: - specifier: ^4.7.2 - version: 4.9.3 + libs/api-client: {} libs/chains: dependencies: @@ -13084,10 +13067,6 @@ packages: resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - qs@6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} @@ -15084,10 +15063,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-join@5.0.0: - resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -33552,10 +33527,6 @@ snapshots: dependencies: side-channel: 1.0.6 - qs@6.13.0: - dependencies: - side-channel: 1.0.6 - qs@6.5.3: {} query-string@5.1.1: @@ -35992,8 +35963,6 @@ snapshots: dependencies: punycode: 2.3.1 - url-join@5.0.0: {} - url-parse@1.5.10: dependencies: querystringify: 2.2.0 From 5805530e78f0bd05b9cbc2fa3f330f0d80c9204d Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 10 Oct 2024 10:45:03 -0400 Subject: [PATCH 097/425] echo ts scripts --- libs/api-client/package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/api-client/package.json b/libs/api-client/package.json index bcde782ecbb..e48ee69d29b 100644 --- a/libs/api-client/package.json +++ b/libs/api-client/package.json @@ -24,10 +24,9 @@ }, "scripts": { "build": "echo Generated SDK is prebuilt", - "clean": "rm -rf build && rm -rf coverage", + "clean": "echo Generated SDK is prebuilt", + "check-types": "echo Generated SDK is prebuilt", "publish": "npm publish", - "run-test": "tsx ./test/index.ts", - "check-types": "tsc --noEmit", "format": "npx prettier --write 'src/**/*.{js,d.ts}'", "generate-client": "chmod u+x scripts/fern-init.sh && ./scripts/fern-init.sh && fern generate && pnpm format" }, From c4a589c2b453e2aa787c519aa6bf748d6a145168 Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Thu, 10 Oct 2024 20:02:36 +0500 Subject: [PATCH 098/425] resolve the PR Comment --- .../new_designs/CWSelectList/CWSelectList.tsx | 12 +++++------ .../CWSingleSelectItem.scss | 2 +- .../CWSingleSelectItem/CWSingleSelectItem.tsx | 19 +++++++++--------- .../StakeExchangeForm/StakeExchangeForm.tsx | 20 +++---------------- 4 files changed, 19 insertions(+), 34 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx index 59cb519fae5..c93bcd2fe59 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx @@ -15,8 +15,8 @@ type CustomCWSelectListProps = { label?: string; hookToForm?: boolean; customError?: string; - handleClickCopyClipboard?: (id: string) => void; - showIcon?: boolean; + saveToClipboard?: (id: string, successNotification?: boolean) => void; + showCopyIcon?: boolean; }; export const CWSelectList = < @@ -38,8 +38,8 @@ export const CWSelectList = < customError, components, isMulti, - showIcon, - handleClickCopyClipboard, + showCopyIcon, + saveToClipboard, } = props; const formContext = useFormContext(); const formFieldContext = hookToForm @@ -133,8 +133,8 @@ export const CWSelectList = < SingleValue: (singleValueProps) => ( ), }} diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.scss b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.scss index 654c5b2ad1c..1e089db6dfb 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.scss +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.scss @@ -1,5 +1,5 @@ @import '../../../../../../styles/shared.scss'; -.custom-single-value { +.CWSingleSelectItem { display: flex; width: 97%; justify-content: space-between; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx index 4499d86fec2..61f727afdf9 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx @@ -5,9 +5,8 @@ import { SingleValueProps } from 'react-select'; import { CWIcon } from '../../cw_icons/cw_icon'; import './CWSingleSelectItem.scss'; type CustomSingleValueProps = { - extraProp?: boolean; - handleClickCopyClipboard?: (id: string) => void; - showIcon?: boolean; + showCopyIcon?: boolean; + saveToClipboard?: (id: string, successNotification?: boolean) => void; }; type OptionProps = { @@ -18,17 +17,17 @@ type OptionProps = { export const CWSingleSelectItem = ( props: SingleValueProps & CustomSingleValueProps, ) => { - const { data, extraProp = false, handleClickCopyClipboard } = props; + const { data, showCopyIcon = false, saveToClipboard } = props; const handleClickToCopy = (event: React.MouseEvent) => { event.stopPropagation(); - if (handleClickCopyClipboard) { - handleClickCopyClipboard(data.value); + if (saveToClipboard) { + saveToClipboard(data.value, true); } }; return ( -
- {extraProp && ( +
+ {showCopyIcon && (
)} - {!extraProp && {data.label}} + {!showCopyIcon && {data.label}} - {extraProp && } + {showCopyIcon && }
); }; diff --git a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx index f7a4ca5250c..796f7d26e01 100644 --- a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx +++ b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx @@ -1,8 +1,5 @@ import { commonProtocol } from '@hicommonwealth/shared'; -import { - notifyError, - notifySuccess, -} from 'client/scripts/controllers/app/notifications'; +import { saveToClipboard } from 'client/scripts/utils/clipboard'; import clsx from 'clsx'; import { findDenominationIcon } from 'helpers/findDenomination'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; @@ -306,17 +303,6 @@ const StakeExchangeForm = ({ ? false : numberOfStakeToExchange >= stakeBalance; - const handleClickCopyClipboard = (address: string) => { - navigator.clipboard - .writeText(address) - .then(() => { - notifySuccess('successfully copy to clipboard'); - }) - .catch(() => { - notifyError('Failed to copy clipboard'); - }); - }; - return (
@@ -344,8 +330,8 @@ const StakeExchangeForm = ({ isSearchable={false} options={addressOptions} onChange={onSetSelectedAddress} - handleClickCopyClipboard={handleClickCopyClipboard} - showIcon={true} + saveToClipboard={saveToClipboard} + showCopyIcon={true} />
From bdf1acd622a038a39cb781fcc34f7595c19f31aa Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Thu, 10 Oct 2024 20:23:54 +0500 Subject: [PATCH 099/425] resolve eslint --- .../new_designs/CWSelectList/CWSelectList.tsx | 6 +++++- .../CWSingleSelectItem/CWSingleSelectItem.tsx | 10 +++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx index c93bcd2fe59..eee12789db4 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx @@ -15,7 +15,11 @@ type CustomCWSelectListProps = { label?: string; hookToForm?: boolean; customError?: string; - saveToClipboard?: (id: string, successNotification?: boolean) => void; + // eslint-disable-next-line prettier/prettier + saveToClipboard?: ( + id: string, + successNotification?: boolean, + ) => Promise; showCopyIcon?: boolean; }; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx index 61f727afdf9..122f074ce01 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx @@ -6,7 +6,11 @@ import { CWIcon } from '../../cw_icons/cw_icon'; import './CWSingleSelectItem.scss'; type CustomSingleValueProps = { showCopyIcon?: boolean; - saveToClipboard?: (id: string, successNotification?: boolean) => void; + // eslint-disable-next-line prettier/prettier + saveToClipboard?: ( + id: string, + successNotification?: boolean, + ) => Promise; }; type OptionProps = { @@ -18,10 +22,10 @@ export const CWSingleSelectItem = ( props: SingleValueProps & CustomSingleValueProps, ) => { const { data, showCopyIcon = false, saveToClipboard } = props; - const handleClickToCopy = (event: React.MouseEvent) => { + const handleClickToCopy = async (event: React.MouseEvent) => { event.stopPropagation(); if (saveToClipboard) { - saveToClipboard(data.value, true); + await saveToClipboard(data.value, true); } }; From 44f64f2ea954eb09b334092f590639fed4a5f148 Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Thu, 10 Oct 2024 20:34:51 +0500 Subject: [PATCH 100/425] resolve eslint --- .../CWSingleSelectItem/CWSingleSelectItem.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx index 122f074ce01..b63d324589e 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx @@ -22,6 +22,7 @@ export const CWSingleSelectItem = ( props: SingleValueProps & CustomSingleValueProps, ) => { const { data, showCopyIcon = false, saveToClipboard } = props; + const handleClickToCopy = async (event: React.MouseEvent) => { event.stopPropagation(); if (saveToClipboard) { @@ -43,7 +44,14 @@ export const CWSingleSelectItem = ( )} {!showCopyIcon && {data.label}} - {showCopyIcon && } + {showCopyIcon && ( + { + void handleClickToCopy(event); + }} + /> + )}
); }; From b16c49287e3da4cbbb89d4c7f0cc103bd91b5623 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 10 Oct 2024 21:11:13 +0500 Subject: [PATCH 101/425] Added `GroupTopicPermissions` entity --- libs/model/src/models/associations.ts | 14 +++++- libs/model/src/models/factories.ts | 2 + libs/model/src/models/groupTopicPermission.ts | 46 +++++++++++++++++++ libs/model/src/models/index.ts | 1 + .../entities/groupTopicPermission.schemas.ts | 18 ++++++++ libs/schemas/src/entities/index.ts | 1 + ...02720-add-group-topic-permissions-table.js | 42 +++++++++++++++++ 7 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 libs/model/src/models/groupTopicPermission.ts create mode 100644 libs/schemas/src/entities/groupTopicPermission.schemas.ts create mode 100644 packages/commonwealth/server/migrations/20241010102720-add-group-topic-permissions-table.js diff --git a/libs/model/src/models/associations.ts b/libs/model/src/models/associations.ts index 873be2f2669..9de79d0bad0 100644 --- a/libs/model/src/models/associations.ts +++ b/libs/model/src/models/associations.ts @@ -86,7 +86,13 @@ export const buildAssociations = (db: DB) => { asMany: 'threads', onUpdate: 'CASCADE', onDelete: 'SET NULL', - }).withMany(db.ContestTopic, { asMany: 'contest_topics' }); + }) + .withMany(db.ContestTopic, { asMany: 'contest_topics' }) + .withMany(db.GroupTopicPermission, { + foreignKey: 'topic_id', + onUpdate: 'CASCADE', + onDelete: 'CASCADE', + }); db.Thread.withMany(db.Poll) .withMany(db.ContestAction, { @@ -127,7 +133,11 @@ export const buildAssociations = (db: DB) => { onDelete: 'CASCADE', }); - db.Group.withMany(db.GroupPermission); + db.Group.withMany(db.GroupPermission).withMany(db.GroupTopicPermission, { + foreignKey: 'group_id', + onUpdate: 'CASCADE', + onDelete: 'CASCADE', + }); // Many-to-many associations (cross-references) db.Membership.withManyToMany( diff --git a/libs/model/src/models/factories.ts b/libs/model/src/models/factories.ts index b92197182b1..6888451fbbb 100644 --- a/libs/model/src/models/factories.ts +++ b/libs/model/src/models/factories.ts @@ -24,6 +24,7 @@ import EmailUpdateToken from './email_update_token'; import EvmEventSource from './evmEventSource'; import Group from './group'; import GroupPermission from './groupPermission'; +import GroupTopicPermission from './groupTopicPermission'; import LastProcessedEvmBlock from './lastProcessedEvmBlock'; import Membership from './membership'; import Outbox from './outbox'; @@ -89,6 +90,7 @@ export const Factories = { Webhook, Wallets, XpLog, + GroupTopicPermission, }; export type DB = { diff --git a/libs/model/src/models/groupTopicPermission.ts b/libs/model/src/models/groupTopicPermission.ts new file mode 100644 index 00000000000..0d8454fb838 --- /dev/null +++ b/libs/model/src/models/groupTopicPermission.ts @@ -0,0 +1,46 @@ +import { GroupTopicPermission } from '@hicommonwealth/schemas'; +import Sequelize from 'sequelize'; +import { z } from 'zod'; +import { GroupAttributes } from './group'; +import { TopicAttributes } from './topic'; +import type { ModelInstance } from './types'; + +export type GroupTopicPermissionAttributes = z.infer< + typeof GroupTopicPermission +> & { + // associations + Group?: GroupAttributes; + Topic?: TopicAttributes; +}; + +export type GroupTopicPermissionInstance = + ModelInstance; + +export default ( + sequelize: Sequelize.Sequelize, +): Sequelize.ModelStatic => + sequelize.define( + 'GroupTopicPermission', + { + group_id: { + type: Sequelize.INTEGER, + allowNull: false, + primaryKey: true, + }, + topic_id: { + type: Sequelize.INTEGER, + allowNull: false, + primaryKey: true, + }, + allowed_actions: { + type: Sequelize.STRING, + allowNull: false, + }, + }, + { + tableName: 'GroupTopicPermissions', + timestamps: true, + createdAt: 'created_at', + updatedAt: 'updated_at', + }, + ); diff --git a/libs/model/src/models/index.ts b/libs/model/src/models/index.ts index 99c49cf8464..bf06e279662 100644 --- a/libs/model/src/models/index.ts +++ b/libs/model/src/models/index.ts @@ -61,6 +61,7 @@ export * from './discord_bot_config'; export * from './email_update_token'; export * from './evmEventSource'; export * from './group'; +export * from './groupTopicPermission'; export * from './lastProcessedEvmBlock'; export * from './membership'; export * from './outbox'; diff --git a/libs/schemas/src/entities/groupTopicPermission.schemas.ts b/libs/schemas/src/entities/groupTopicPermission.schemas.ts new file mode 100644 index 00000000000..cd32e7db027 --- /dev/null +++ b/libs/schemas/src/entities/groupTopicPermission.schemas.ts @@ -0,0 +1,18 @@ +import { z } from 'zod'; +import { PG_INT } from '../utils'; + +export enum GroupTopicPermissionEnum { + UPVOTE = 'UPVOTE', + UPVOTE_AND_COMMENT = 'UPVOTE_AND_COMMENT', + UPVOTE_AND_COMMENT_AND_POST = 'UPVOTE_AND_COMMENT_AND_POST', +} + +export type GroupTopicPermissionAction = keyof typeof GroupTopicPermissionEnum; + +export const GroupTopicPermission = z.object({ + group_id: PG_INT, + topic_id: PG_INT, + allowed_actions: z.nativeEnum(GroupTopicPermissionEnum), + created_at: z.coerce.date().optional(), + updated_at: z.coerce.date().optional(), +}); diff --git a/libs/schemas/src/entities/index.ts b/libs/schemas/src/entities/index.ts index 2180aae9b3a..d98ea66652c 100644 --- a/libs/schemas/src/entities/index.ts +++ b/libs/schemas/src/entities/index.ts @@ -5,6 +5,7 @@ export * from './contract.schemas'; export * from './discordBotConfig.schemas'; export * from './group-permission.schemas'; export * from './group.schemas'; +export * from './groupTopicPermission.schemas'; export * from './notification.schemas'; export * from './reaction.schemas'; export * from './snapshot.schemas'; diff --git a/packages/commonwealth/server/migrations/20241010102720-add-group-topic-permissions-table.js b/packages/commonwealth/server/migrations/20241010102720-add-group-topic-permissions-table.js new file mode 100644 index 00000000000..e6109b1c8a4 --- /dev/null +++ b/packages/commonwealth/server/migrations/20241010102720-add-group-topic-permissions-table.js @@ -0,0 +1,42 @@ +'use strict'; + +module.exports = { + up: async (queryInterface, Sequelize) => { + return queryInterface.sequelize.transaction(async (t) => { + await queryInterface.createTable( + 'GroupTopicPermissions', + { + group_id: { + type: Sequelize.INTEGER, + allowNull: false, + primaryKey: true, + references: { model: 'Groups', key: 'id' }, + onUpdate: 'CASCADE', + onDelete: 'CASCADE', + }, + topic_id: { + type: Sequelize.INTEGER, + allowNull: false, + primaryKey: true, + references: { model: 'Topics', key: 'id' }, + onUpdate: 'CASCADE', + onDelete: 'CASCADE', + }, + allowed_actions: { type: Sequelize.STRING, allowNull: false }, + created_at: { type: Sequelize.DATE, allowNull: false }, + updated_at: { type: Sequelize.DATE, allowNull: false }, + }, + { + timestamps: true, + transactions: t, + }, + ); + }); + }, + + down: async (queryInterface, Sequelize) => { + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.dropTable('GroupTopicPermissions', { transaction }); + }); + }, +}; From edf786ae7000cf245d5d66e8a007dda32c9ec83d Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 10 Oct 2024 21:17:08 +0500 Subject: [PATCH 102/425] Added logic to create group with topic level permissions --- .../src/community/CreateGroup.command.ts | 18 +++- .../schemas/src/commands/community.schemas.ts | 10 +- .../scripts/state/api/groups/createGroup.ts | 9 +- .../Groups/common/GroupForm/GroupForm.scss | 12 +++ .../Groups/common/GroupForm/GroupForm.tsx | 92 +++++++++++++++++-- .../TopicPermissionsSubForm.scss | 23 +++++ .../TopicPermissionsSubForm.tsx | 33 +++++++ .../TopicPermissionsSubForm/index.tsx | 1 + .../Groups/common/GroupForm/constants.ts | 22 +++++ .../Groups/common/GroupForm/index.types.ts | 26 +++++- .../Groups/common/helpers/index.ts | 2 +- 11 files changed, 233 insertions(+), 15 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/TopicPermissionsSubForm/TopicPermissionsSubForm.scss create mode 100644 packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/TopicPermissionsSubForm/TopicPermissionsSubForm.tsx create mode 100644 packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/TopicPermissionsSubForm/index.tsx create mode 100644 packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants.ts diff --git a/libs/model/src/community/CreateGroup.command.ts b/libs/model/src/community/CreateGroup.command.ts index f863cc1d8e6..810003bc022 100644 --- a/libs/model/src/community/CreateGroup.command.ts +++ b/libs/model/src/community/CreateGroup.command.ts @@ -25,7 +25,7 @@ export function CreateGroup(): Command< const topics = await models.Topic.findAll({ where: { - id: { [Op.in]: payload.topics || [] }, + id: { [Op.in]: payload.topics?.map((t) => t.id) || [] }, community_id, }, }); @@ -70,6 +70,22 @@ export function CreateGroup(): Command< transaction, }, ); + + // add topic level interaction permissions for current group + await Promise.all( + (payload.topics || [])?.map(async (t) => { + if (group.id) { + await models.GroupTopicPermission.create( + { + group_id: group.id, + topic_id: t.id, + allowed_actions: t.permission, + }, + { transaction }, + ); + } + }), + ); } return group.toJSON(); }, diff --git a/libs/schemas/src/commands/community.schemas.ts b/libs/schemas/src/commands/community.schemas.ts index 05953b63b97..05e11c59116 100644 --- a/libs/schemas/src/commands/community.schemas.ts +++ b/libs/schemas/src/commands/community.schemas.ts @@ -12,6 +12,7 @@ import { z } from 'zod'; import { Community, Group, + GroupTopicPermissionEnum, Requirement, StakeTransaction, Topic, @@ -228,7 +229,14 @@ export const CreateGroup = { community_id: z.string(), metadata: GroupMetadata, requirements: z.array(Requirement).optional(), - topics: z.array(PG_INT).optional(), + topics: z + .array( + z.object({ + id: PG_INT, + permission: z.nativeEnum(GroupTopicPermissionEnum), + }), + ) + .optional(), }), output: Community.extend({ groups: z.array(Group).optional() }).partial(), }; diff --git a/packages/commonwealth/client/scripts/state/api/groups/createGroup.ts b/packages/commonwealth/client/scripts/state/api/groups/createGroup.ts index 9989411ebda..7d27c1085a2 100644 --- a/packages/commonwealth/client/scripts/state/api/groups/createGroup.ts +++ b/packages/commonwealth/client/scripts/state/api/groups/createGroup.ts @@ -1,11 +1,12 @@ -import { trpc } from 'client/scripts/utils/trpcClient'; import { ApiEndpoints, queryClient } from 'state/api/config'; +import { trpc } from 'utils/trpcClient'; +import { GroupFormTopicSubmitValues } from 'views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types'; interface CreateGroupProps { communityId: string; address: string; groupName: string; - topicIds: number[]; + topics: GroupFormTopicSubmitValues[]; groupDescription?: string; requirementsToFulfill: number | undefined; requirements?: any[]; @@ -16,7 +17,7 @@ export const buildCreateGroupInput = ({ communityId, groupName, groupDescription, - topicIds, + topics, requirementsToFulfill, requirements = [], }: CreateGroupProps) => { @@ -32,7 +33,7 @@ export const buildCreateGroupInput = ({ }), }, requirements, - topics: topicIds, + topics, }; }; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.scss b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.scss index 92a7056367e..94dd4e13a16 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.scss +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.scss @@ -43,6 +43,18 @@ color: $neutral-500; } } + + .topic-permission-header { + padding: 0 12px; + + @include extraSmall { + padding: 0 8px; + } + } + + .divider-spacing { + margin: -10px 0px; + } } .action-buttons { diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx index 747e49526c8..c6859d67e96 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx @@ -25,11 +25,19 @@ import { import Allowlist from './Allowlist'; import './GroupForm.scss'; import RequirementSubForm from './RequirementSubForm'; +import TopicPermissionsSubForm from './TopicPermissionsSubForm'; +import { + REQUIREMENTS_TO_FULFILL, + REVERSED_TOPIC_PERMISSIONS, + TOPIC_PERMISSIONS, +} from './constants'; import { FormSubmitValues, GroupFormProps, RequirementSubFormsState, RequirementSubType, + TopicPermissions, + TopicPermissionsSubFormsState, } from './index.types'; import { VALIDATION_MESSAGES, @@ -37,11 +45,6 @@ import { requirementSubFormValidationSchema, } from './validations'; -const REQUIREMENTS_TO_FULFILL = { - ALL_REQUIREMENTS: 'ALL', - N_REQUIREMENTS: 'N', -}; - type CWRequirementsRadioButtonProps = { maxRequirements: number; inputValue: string; @@ -170,6 +173,9 @@ const GroupForm = ({ const [requirementSubForms, setRequirementSubForms] = useState< RequirementSubFormsState[] >([]); + const [topicPermissionsSubForms, setTopicPermissionsSubForms] = useState< + TopicPermissionsSubFormsState[] + >([]); useEffect(() => { if (initialValues.requirements) { @@ -371,6 +377,10 @@ const GroupForm = ({ const formValues = { ...values, + topics: topicPermissionsSubForms.map((t) => ({ + id: t.topic.id, + permission: REVERSED_TOPIC_PERMISSIONS[t.permission], + })), requirementsToFulfill, requirements: requirementSubForms.map((x) => x.values), }; @@ -378,6 +388,31 @@ const GroupForm = ({ await onSubmit(formValues); }; + const handleWatchForm = (values: FormSubmitValues) => { + if (values?.topics?.length > 0) { + setTopicPermissionsSubForms( + values.topics.map((topic) => ({ + topic: { + id: parseInt(`${topic.value}`), + name: topic.label, + }, + permission: TOPIC_PERMISSIONS.UPVOTE_AND_COMMENT_AND_POST, + })), + ); + } else { + setTopicPermissionsSubForms([]); + } + }; + + const updateTopicPermissionByIndex = ( + index: number, + newPermission: TopicPermissions, + ) => { + const updatedTopicPermissionsSubForms = [...topicPermissionsSubForms]; + updatedTopicPermissionsSubForms[index].permission = newPermission; + setTopicPermissionsSubForms([...updatedTopicPermissionsSubForms]); + }; + // + 1 for allowlists const maxRequirements = requirementSubForms.length + 1; @@ -394,11 +429,16 @@ const GroupForm = ({ ? REQUIREMENTS_TO_FULFILL.ALL_REQUIREMENTS : REQUIREMENTS_TO_FULFILL.N_REQUIREMENTS : '', - topics: initialValues.topics || '', + topics: + initialValues?.topics?.map((t) => ({ + label: t.label, + value: t.value, + })) || '', }} validationSchema={groupValidationSchema} onSubmit={handleSubmit} onErrors={validateSubForms} + onWatch={handleWatchForm} > {({ formState }) => ( <> @@ -567,6 +607,46 @@ const GroupForm = ({ }))} /> + + {/* Sub-section: Gated topic permissions */} + {topicPermissionsSubForms?.length > 0 && ( +
+
+ + Topic Permissions + + + Select which topics this group can create threads and + within. + +
+ + + Topic + + + {topicPermissionsSubForms.map((topicPermission, index) => ( + <> + + + updateTopicPermissionByIndex(index, newPermission) + } + /> + {index === topicPermissionsSubForms.length - 1 && ( + + )} + + ))} +
+ )} ({ + label: permission, + value: permission, +})); + +const TopicPermissionsSubForm = ({ + topic, + defaultPermission, + onPermissionChange, +}: TopicPermissionsSubFormType) => { + return ( +
+ {topic.name} + + p.value === defaultPermission)} + options={permissionMap} + onChange={(option) => option?.value && onPermissionChange(option.value)} + /> +
+ ); +}; + +export default TopicPermissionsSubForm; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/TopicPermissionsSubForm/index.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/TopicPermissionsSubForm/index.tsx new file mode 100644 index 00000000000..15331b9c7ff --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/TopicPermissionsSubForm/index.tsx @@ -0,0 +1 @@ +export { default } from './TopicPermissionsSubForm'; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants.ts b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants.ts new file mode 100644 index 00000000000..cc27814347b --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants.ts @@ -0,0 +1,22 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; + +export const REQUIREMENTS_TO_FULFILL = { + ALL_REQUIREMENTS: 'ALL', + N_REQUIREMENTS: 'N', +}; + +export const TOPIC_PERMISSIONS = { + [GroupTopicPermissionEnum.UPVOTE]: 'Upvote', + [GroupTopicPermissionEnum.UPVOTE_AND_COMMENT]: 'Upvote & Comment', + [GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST]: + 'Upvote & Comment & Post', +}; + +type ReversedTopicPermissions = { + [K in keyof typeof TOPIC_PERMISSIONS as (typeof TOPIC_PERMISSIONS)[K]]: K; +}; + +export const REVERSED_TOPIC_PERMISSIONS: ReversedTopicPermissions = + Object.fromEntries( + Object.entries(TOPIC_PERMISSIONS).map(([key, value]) => [value, key]), + ) as ReversedTopicPermissions; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types.ts b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types.ts index e24198d10e8..17f04e35fa4 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types.ts @@ -1,3 +1,6 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { TOPIC_PERMISSIONS } from './constants'; + export type RequirementSubFormsState = { defaultValues?: RequirementSubTypeWithLabel; values: RequirementSubType; @@ -13,6 +16,20 @@ export type RequirementSubType = { requirementTokenId?: string; }; +export type TopicPermissions = + (typeof TOPIC_PERMISSIONS)[keyof typeof TOPIC_PERMISSIONS]; + +export type TopicPermissionsSubFormsState = { + topic: TopicPermissionsSubFormType['topic']; + permission: TopicPermissions; +}; + +export type TopicPermissionsSubFormType = { + topic: { id: number; name: string }; + defaultPermission?: TopicPermissions; + onPermissionChange: (permission: string) => void; +}; + export type LabelType = { label: string; value: string; @@ -35,12 +52,17 @@ export type RequirementSubFormType = { onChange: (values: RequirementSubType) => any; }; +export type GroupFormTopicSubmitValues = { + id: number; + permission: GroupTopicPermissionEnum; +}; + export type GroupResponseValuesType = { groupName: string; groupDescription?: string; requirementsToFulfill: 'ALL' | number; requirements?: RequirementSubType[]; - topics: LabelType[]; + topics: GroupFormTopicSubmitValues[]; allowlist?: number[]; }; @@ -49,7 +71,7 @@ export type GroupInitialValuesTypeWithLabel = { groupDescription?: string; requirements?: RequirementSubTypeWithLabel[]; requirementsToFulfill?: 'ALL' | number; - topics: LabelType[]; + topics: (LabelType & { permission: GroupTopicPermissionEnum })[]; }; export type FormSubmitValues = { diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/helpers/index.ts b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/helpers/index.ts index 905e1476203..ec6b4b5b6b0 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/helpers/index.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/helpers/index.ts @@ -23,7 +23,7 @@ export const makeGroupDataBaseAPIPayload = ( address: userStore.getState().activeAccount?.address || '', groupName: formSubmitValues.groupName.trim(), groupDescription: (formSubmitValues.groupDescription || '').trim(), - topicIds: formSubmitValues.topics.map((x) => parseInt(x.value)), + topics: formSubmitValues.topics, requirementsToFulfill: formSubmitValues.requirementsToFulfill === 'ALL' ? // @ts-expect-error StrictNullChecks From de7d3325db4e08098efd55531cbe9e775b60e519 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 10 Oct 2024 21:18:53 +0500 Subject: [PATCH 103/425] Added logic to update group with topic level permissions --- .../src/community/UpdateGroup.command.ts | 22 ++++++++++++++++++- .../schemas/src/commands/community.schemas.ts | 9 +++++++- .../scripts/state/api/groups/editGroup.ts | 9 ++++---- .../Update/UpdateCommunityGroupPage.tsx | 1 + .../Groups/common/GroupForm/GroupForm.tsx | 9 ++++++++ 5 files changed, 44 insertions(+), 6 deletions(-) diff --git a/libs/model/src/community/UpdateGroup.command.ts b/libs/model/src/community/UpdateGroup.command.ts index 25461556365..ffe06a9623f 100644 --- a/libs/model/src/community/UpdateGroup.command.ts +++ b/libs/model/src/community/UpdateGroup.command.ts @@ -33,7 +33,7 @@ export function UpdateGroup(): Command< const topics = await models.Topic.findAll({ where: { - id: { [Op.in]: payload.topics || [] }, + id: { [Op.in]: payload.topics?.map((t) => t.id) || [] }, community_id, }, }); @@ -90,6 +90,26 @@ export function UpdateGroup(): Command< transaction, }, ); + + // update topic level interaction permissions for current group + await Promise.all( + (payload.topics || [])?.map(async (t) => { + if (group.id) { + await models.GroupTopicPermission.update( + { + allowed_actions: t.permission, + }, + { + where: { + group_id: group_id, + topic_id: t.id, + }, + transaction, + }, + ); + } + }), + ); } return group.toJSON(); diff --git a/libs/schemas/src/commands/community.schemas.ts b/libs/schemas/src/commands/community.schemas.ts index 05e11c59116..44e3a7f7969 100644 --- a/libs/schemas/src/commands/community.schemas.ts +++ b/libs/schemas/src/commands/community.schemas.ts @@ -247,7 +247,14 @@ export const UpdateGroup = { group_id: PG_INT, metadata: GroupMetadata.optional(), requirements: z.array(Requirement).optional(), - topics: z.array(PG_INT).optional(), + topics: z + .array( + z.object({ + id: PG_INT, + permission: z.nativeEnum(GroupTopicPermissionEnum), + }), + ) + .optional(), }), output: Group.partial(), }; diff --git a/packages/commonwealth/client/scripts/state/api/groups/editGroup.ts b/packages/commonwealth/client/scripts/state/api/groups/editGroup.ts index 35313e768e2..1e516d6fa9d 100644 --- a/packages/commonwealth/client/scripts/state/api/groups/editGroup.ts +++ b/packages/commonwealth/client/scripts/state/api/groups/editGroup.ts @@ -1,4 +1,5 @@ -import { trpc } from 'client/scripts/utils/trpcClient'; +import { trpc } from 'utils/trpcClient'; +import { GroupFormTopicSubmitValues } from 'views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types'; import { userStore } from '../../ui/user'; import { ApiEndpoints, queryClient } from '../config'; @@ -8,7 +9,7 @@ interface EditGroupProps { address: string; groupName: string; groupDescription?: string; - topicIds: number[]; + topics: GroupFormTopicSubmitValues[]; requirementsToFulfill: number | undefined; requirements?: any[]; } @@ -19,7 +20,7 @@ export const buildUpdateGroupInput = ({ address, groupName, groupDescription, - topicIds, + topics, requirementsToFulfill, requirements, }: EditGroupProps) => { @@ -37,7 +38,7 @@ export const buildUpdateGroupInput = ({ }), }, ...(requirements && { requirements }), - topics: topicIds, + topics, }; }; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/Update/UpdateCommunityGroupPage.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/Update/UpdateCommunityGroupPage.tsx index fb93b2b7c2c..35a1d021ec1 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/Update/UpdateCommunityGroupPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/Update/UpdateCommunityGroupPage.tsx @@ -131,6 +131,7 @@ const UpdateCommunityGroupPage = ({ groupId }: { groupId: string }) => { topics: (foundGroup.topics || []).map((topic) => ({ label: topic.name, value: topic.id, + permission: topic.permission, })), }} onSubmit={(values) => { diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx index c6859d67e96..d9f70414617 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx @@ -209,6 +209,15 @@ const GroupForm = ({ `${initialValues.requirementsToFulfill}`, ); } + + if (initialValues.topics) { + setTopicPermissionsSubForms( + initialValues.topics.map((t) => ({ + permission: TOPIC_PERMISSIONS[t.permission], + topic: { id: parseInt(`${t.value}`), name: t.label }, + })), + ); + } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); From ece7ba99b82f5ff2d2a32526377ccb3c53713bed Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 10 Oct 2024 12:36:20 -0400 Subject: [PATCH 104/425] refactor feed query --- libs/model/src/feed/GetUserFeed.query.ts | 272 ++++++++++++++++ libs/model/src/feed/index.ts | 1 + libs/schemas/src/queries/feed.schemas.ts | 49 +++ .../controllers/server_threads_controller.ts | 11 - .../get_bulk_threads.ts | 305 ------------------ packages/commonwealth/server/routes/feed.ts | 69 ++-- .../routes/threads/get_threads_handler.ts | 50 ++- 7 files changed, 380 insertions(+), 377 deletions(-) create mode 100644 libs/model/src/feed/GetUserFeed.query.ts delete mode 100644 packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts diff --git a/libs/model/src/feed/GetUserFeed.query.ts b/libs/model/src/feed/GetUserFeed.query.ts new file mode 100644 index 00000000000..9f5416a9bf9 --- /dev/null +++ b/libs/model/src/feed/GetUserFeed.query.ts @@ -0,0 +1,272 @@ +import { InvalidInput, Query, ServerError } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import moment from 'moment'; +import { QueryTypes } from 'sequelize'; +import { z } from 'zod'; +import { models } from '../database'; + +export function GetUserFeed(): Query { + return { + ...schemas.GetUserFeed, + auth: [], + secure: false, + body: async ({ payload }) => { + const { + community_id, + stage, + topic_id, + page, + limit, + order_by, + from_date, + to_date, + archived, + contestAddress, + status, + withXRecentComments = 0, + } = payload; + + if (stage && status) + throw new InvalidInput('Cannot provide both stage and status'); + + if (status && !contestAddress) + throw new InvalidInput( + 'Must provide contestAddress if status is provided', + ); + + // query params that bind to sql query + const _limit = limit ? Math.min(limit, 500) : 20; + const _page = page || 1; + const replacements = { + page: _page, + limit: _limit, + offset: _limit * (_page - 1) || 0, + from_date, + to_date: to_date || moment().toISOString(), + community_id, + stage, + topic_id, + contestAddress, + status, + withXRecentComments: + withXRecentComments > 10 ? 10 : withXRecentComments, // cap to 10 + }; + + // sql query parts that order results by provided query param + const orderByQueries = { + newest: 'created_at DESC', + oldest: 'created_at ASC', + mostLikes: 'reaction_count DESC', + mostComments: 'comment_count DESC', + latestActivity: 'updated_at DESC', + }; + + const contestStatus = { + active: ' AND CON.end_time > NOW()', + pastWinners: ' AND CON.end_time <= NOW()', + all: '', + }; + + const responseThreadsQuery = models.sequelize.query< + z.infer + >( + ` + WITH contest_ids as ( + SELECT DISTINCT(CA.thread_id) + FROM "Contests" CON + JOIN "ContestActions" CA ON CON.contest_id = CA.contest_id + ${ + contestAddress + ? ` WHERE CA.contest_address = '${contestAddress}' ` + : '' + } + ${contestAddress ? contestStatus[status!] || contestStatus.all : ''} + ), + top_threads AS ( + SELECT id, title, url, body, kind, stage, read_only, discord_meta, + pinned, community_id, T.created_at, updated_at, locked_at as thread_locked, links, + has_poll, last_commented_on, comment_count as "numberOfComments", + marked_as_spam_at, archived_at, topic_id, reaction_weights_sum, canvas_signed_data, + canvas_msg_id, last_edited, address_id + FROM "Threads" T + WHERE + community_id = :community_id AND + deleted_at IS NULL AND + archived_at IS ${archived ? 'NOT' : ''} NULL + ${topic_id ? ' AND topic_id = :topic_id' : ''} + ${stage ? ' AND stage = :stage' : ''} + ${from_date ? ' AND T.created_at > :from_date' : ''} + ${to_date ? ' AND T.created_at < :to_date' : ''} + ${contestAddress ? ' AND id IN (SELECT * FROM "contest_ids")' : ''} + ORDER BY pinned DESC, ${orderByQueries[order_by ?? 'newest']} + LIMIT :limit OFFSET :offset + ), thread_metadata AS ( + -- get the thread authors and their profiles + SELECT + TH.id as thread_id, + json_build_object( + 'id', T.id, + 'name', T.name, + 'description', T.description, + 'communityId', T.community_id, + 'telegram', T.telegram + ) as topic, + json_build_object( + 'id', A.id, + 'address', A.address, + 'community_id', A.community_id + ) as "Address", + U.id as user_id, + A.last_active as address_last_active, + U.profile->>'avatar_url' as avatar_url, + U.profile->>'name' as profile_name + FROM top_threads TH JOIN "Topics" T ON TH.topic_id = T.id + LEFT JOIN "Addresses" A ON TH.address_id = A.id + LEFT JOIN "Users" U ON A.user_id = U.id + ), collaborator_data AS ( + -- get the thread collaborators and their profiles + SELECT + TT.id as thread_id, + CASE WHEN max(A.id) IS NOT NULL THEN + json_agg(json_strip_nulls(json_build_object( + 'address', A.address, + 'community_id', A.community_id, + 'User', json_build_object( + 'id', editor_profiles.id, + 'profile', json_build_object( + 'userId', editor_profiles.id, + 'name', editor_profiles.profile->>'name', + 'address', A.address, + 'lastActive', A.last_active::text, + 'avatarUrl', editor_profiles.profile->>'avatar_url' + ) + ) + ))) + ELSE '[]'::json + END AS collaborators + FROM top_threads TT LEFT JOIN "Collaborations" AS C ON TT.id = C.thread_id + LEFT JOIN "Addresses" A ON C.address_id = A.id + LEFT JOIN "Users" editor_profiles ON A.user_id = editor_profiles.id + GROUP BY TT.id + ), reaction_data AS ( + -- get the thread reactions and the address/profile of the user who reacted + SELECT + TT.id as thread_id, + json_agg(json_strip_nulls(json_build_object( + 'id', R.id, + 'type', R.reaction, + 'address', A.address, + 'updated_at', R.updated_at::text, + 'voting_weight', R.calculated_voting_weight, + 'profile_name', U.profile->>'name', + 'avatar_url', U.profile->>'avatar_url', + 'last_active', A.last_active::text + ))) as "associatedReactions" + FROM "Reactions" R JOIN top_threads TT ON TT.id = R.thread_id + JOIN "Addresses" A ON A.id = R.address_id + JOIN "Users" U ON U.id = A.user_id + -- where clause doesn't change query result but forces DB to use the correct indexes + WHERE R.thread_id = TT.id + GROUP BY TT.id + ), contest_data AS ( + -- get the contest data associated with the thread + SELECT + TT.id as thread_id, + json_agg(json_strip_nulls(json_build_object( + 'contest_id', CON.contest_id, + 'contest_name', CM.name, + 'contest_cancelled', CM.cancelled, + 'contest_interval', CM.interval, + 'contest_address', CON.contest_address, + 'score', CON.score, + 'thread_id', TT.id, + 'content_id', CA.content_id, + 'start_time', CON.start_time, + 'end_time', CON.end_time + ))) as "associatedContests" + FROM "Contests" CON + JOIN "ContestManagers" CM ON CM.contest_address = CON.contest_address + JOIN "ContestActions" CA ON CON.contest_id = CA.contest_id + AND CON.contest_address = CA.contest_address AND CA.action = 'upvoted' + JOIN top_threads TT ON TT.id = CA.thread_id + GROUP BY TT.id + )${ + withXRecentComments + ? `, recent_comments AS ( + -- get the recent comments data associated with the thread + SELECT + TT.id as thread_id, + json_agg(json_strip_nulls(json_build_object( + 'id', COM.id, + 'address', A.address, + 'text', COM.text, + 'created_at', COM.created_at::text, + 'updated_at', COM.updated_at::text, + 'deleted_at', COM.deleted_at::text, + 'marked_as_spam_at', COM.marked_as_spam_at::text, + 'discord_meta', COM.discord_meta, + 'profile_name', U.profile->>'name', + 'profile_avatar_url', U.profile->>'avatar_url', + 'user_id', U.id + ))) as "recentComments" + FROM ( + Select tempC.* FROM "Comments" tempC + JOIN top_threads tempTT ON tempTT.id = tempC.thread_id + WHERE deleted_at IS NULL + ORDER BY created_at DESC + LIMIT :withXRecentComments + ) COM + JOIN top_threads TT ON TT.id = COM.thread_id + JOIN "Addresses" A ON A.id = COM.address_id + JOIN "Users" U ON U.id = A.user_id + GROUP BY TT.id + )` + : '' + } + SELECT + TT.*, TM.*, CD.*, RD.*, COND.* + ${withXRecentComments ? `, RC.*` : ''} + FROM top_threads TT + LEFT JOIN thread_metadata TM ON TT.id = TM.thread_id + LEFT JOIN collaborator_data CD ON TT.id = CD.thread_id + LEFT JOIN reaction_data RD ON TT.id = RD.thread_id + LEFT JOIN contest_data COND ON TT.id = COND.thread_id + ${ + withXRecentComments + ? `LEFT JOIN recent_comments RC ON TT.id = RC.thread_id;` + : '' + } + `, + { + replacements, + type: QueryTypes.SELECT, + }, + ); + + const numVotingThreadsQuery = models.Thread.count({ + where: { + community_id, + stage: 'voting', + }, + }); + + try { + const [threads, numVotingThreads] = await Promise.all([ + responseThreadsQuery, + numVotingThreadsQuery, + ]); + console.log(threads); + + return { + limit: replacements.limit, + page: replacements.page, + // data params + threads, + numVotingThreads, + }; + } catch (e) { + throw new ServerError('Could not fetch threads', e as Error); + } + }, + }; +} diff --git a/libs/model/src/feed/index.ts b/libs/model/src/feed/index.ts index 33a92371b79..0479874ed96 100644 --- a/libs/model/src/feed/index.ts +++ b/libs/model/src/feed/index.ts @@ -1 +1,2 @@ export * from './GetGlobalActivity.query'; +export * from './GetUserFeed.query'; diff --git a/libs/schemas/src/queries/feed.schemas.ts b/libs/schemas/src/queries/feed.schemas.ts index 8ae1a86583a..2a206406c99 100644 --- a/libs/schemas/src/queries/feed.schemas.ts +++ b/libs/schemas/src/queries/feed.schemas.ts @@ -1,4 +1,5 @@ import { z } from 'zod'; +import { Thread } from '../entities'; import { PG_INT } from '../utils'; export const ThreadFeedRecord = z.object({ @@ -39,3 +40,51 @@ export const ChainFeed = { input: z.object({}), output: z.array(ChainFeedRecord), }; + +export const MappedReaction = z.object({ + id: z.number(), + type: z.literal('like'), + address: z.string(), + updated_at: z.date(), + voting_weight: z.number(), + profile_name: z.string().optional(), + avatar_url: z.string().optional(), + last_active: z.date().optional(), +}); + +export const MappedThread = Thread.extend({ + associatedReactions: z.array(MappedReaction), +}); + +export const GetUserFeedStatus = z.enum(['active', 'pastWinners', 'all']); +export const GetUserFeedOrderBy = z.enum([ + 'newest', + 'oldest', + 'mostLikes', + 'mostComments', + 'latestActivity', +]); + +export const GetUserFeed = { + input: z.object({ + community_id: z.string(), + page: z.number().optional(), + limit: z.number().optional(), + stage: z.string().optional(), + topic_id: PG_INT.optional(), + includePinnedThreads: z.boolean().optional(), + order_by: GetUserFeedOrderBy.optional(), + from_date: z.string().optional(), + to_date: z.string().optional(), + archived: z.boolean().optional(), + contestAddress: z.string().optional(), + status: GetUserFeedStatus.optional(), + withXRecentComments: z.number().optional(), + }), + output: z.object({ + page: z.number(), + limit: z.number(), + numVotingThreads: z.number(), + threads: z.array(MappedThread), + }), +}; diff --git a/packages/commonwealth/server/controllers/server_threads_controller.ts b/packages/commonwealth/server/controllers/server_threads_controller.ts index 40777c15a27..d979eb7cadb 100644 --- a/packages/commonwealth/server/controllers/server_threads_controller.ts +++ b/packages/commonwealth/server/controllers/server_threads_controller.ts @@ -14,11 +14,6 @@ import { GetActiveThreadsResult, __getActiveThreads, } from './server_threads_methods/get_active_threads'; -import { - GetBulkThreadsOptions, - GetBulkThreadsResult, - __getBulkThreads, -} from './server_threads_methods/get_bulk_threads'; import { GetThreadPollsOptions, GetThreadPollsResult, @@ -65,12 +60,6 @@ export class ServerThreadsController { return __searchThreads.call(this, options); } - async getBulkThreads( - options: GetBulkThreadsOptions, - ): Promise { - return __getBulkThreads.call(this, options); - } - async countThreads( options: CountThreadsOptions, ): Promise { diff --git a/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts b/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts deleted file mode 100644 index a7a34616e2c..00000000000 --- a/packages/commonwealth/server/controllers/server_threads_methods/get_bulk_threads.ts +++ /dev/null @@ -1,305 +0,0 @@ -import { AppError, ServerError } from '@hicommonwealth/core'; -import { ThreadAttributes } from '@hicommonwealth/model'; -import moment from 'moment'; -import { QueryTypes } from 'sequelize'; -import { ServerThreadsController } from '../server_threads_controller'; - -type ReactionType = 'like'; - -export type GetBulkThreadsOptions = { - communityId: string; - stage: string; - topicId: number; - includePinnedThreads: boolean; - page: number; - limit: number; - orderBy: string; - fromDate: string; - toDate: string; - archived: boolean; - contestAddress: string; - status: string; - withXRecentComments?: number; -}; - -export type AssociatedReaction = { - id: number | string; - type: ReactionType; - address: string; - updated_at: string; - voting_weight: number; - profile_name?: string; - avatar_url?: string; - last_active?: string; -}; - -type ThreadsQuery = ThreadAttributes & AssociatedReaction[]; - -export type GetBulkThreadsResult = { - numVotingThreads: number; - threads: ThreadsQuery[]; - limit: number; - page: number; -}; - -export async function __getBulkThreads( - this: ServerThreadsController, - { - communityId, - stage, - topicId, - page, - limit, - orderBy, - fromDate, - toDate, - archived, - contestAddress, - status, - withXRecentComments = 0, - }: GetBulkThreadsOptions, -): Promise { - if (stage && status) { - throw new AppError('Cannot provide both stage and status'); - } - - if (status && !contestAddress) { - throw new AppError('Must provide contestAddress if status is provided'); - } - - // query params that bind to sql query - const replacements = (() => { - const _limit = limit ? Math.min(limit, 500) : 20; - const _page = page || 1; - const _offset = _limit * (_page - 1) || 0; - const _to_date = toDate || moment().toISOString(); - - return { - fromDate, - toDate: _to_date, - page: _page, - limit: _limit, - offset: _offset, - communityId, - stage, - topicId, - contestAddress, - status, - withXRecentComments: withXRecentComments > 10 ? 10 : withXRecentComments, // cap to 10 - }; - })(); - - // sql query parts that order results by provided query param - const orderByQueries = { - newest: 'created_at DESC', - oldest: 'created_at ASC', - mostLikes: 'reaction_count DESC', - mostComments: 'comment_count DESC', - latestActivity: 'updated_at DESC', - }; - - const contestStatus = { - active: ' AND CON.end_time > NOW()', - pastWinners: ' AND CON.end_time <= NOW()', - all: '', - }; - - const responseThreadsQuery = this.models.sequelize.query( - ` - WITH contest_ids as ( - SELECT DISTINCT(CA.thread_id) - FROM "Contests" CON - JOIN "ContestActions" CA ON CON.contest_id = CA.contest_id - ${ - contestAddress - ? ` WHERE CA.contest_address = '${contestAddress}' ` - : '' - } - ${contestAddress ? contestStatus[status] || contestStatus.all : ''} - ), - top_threads AS ( - SELECT id, title, url, body, kind, stage, read_only, discord_meta, - pinned, community_id, T.created_at, updated_at, locked_at as thread_locked, links, - has_poll, last_commented_on, comment_count as "numberOfComments", - marked_as_spam_at, archived_at, topic_id, reaction_weights_sum, canvas_signed_data, - canvas_msg_id, last_edited, address_id - FROM "Threads" T - WHERE - community_id = :communityId AND - deleted_at IS NULL AND - archived_at IS ${archived ? 'NOT' : ''} NULL - ${topicId ? ' AND topic_id = :topicId' : ''} - ${stage ? ' AND stage = :stage' : ''} - ${fromDate ? ' AND T.created_at > :fromDate' : ''} - ${toDate ? ' AND T.created_at < :toDate' : ''} - ${contestAddress ? ' AND id IN (SELECT * FROM "contest_ids")' : ''} - ORDER BY pinned DESC, ${orderByQueries[orderBy] ?? 'T.created_at DESC'} - LIMIT :limit OFFSET :offset - ), thread_metadata AS ( - -- get the thread authors and their profiles - SELECT - TH.id as thread_id, - json_build_object( - 'id', T.id, - 'name', T.name, - 'description', T.description, - 'communityId', T.community_id, - 'telegram', T.telegram - ) as topic, - json_build_object( - 'id', A.id, - 'address', A.address, - 'community_id', A.community_id - ) as "Address", - U.id as user_id, - A.last_active as address_last_active, - U.profile->>'avatar_url' as avatar_url, - U.profile->>'name' as profile_name - FROM top_threads TH JOIN "Topics" T ON TH.topic_id = T.id - LEFT JOIN "Addresses" A ON TH.address_id = A.id - LEFT JOIN "Users" U ON A.user_id = U.id - ), collaborator_data AS ( - -- get the thread collaborators and their profiles - SELECT - TT.id as thread_id, - CASE WHEN max(A.id) IS NOT NULL THEN - json_agg(json_strip_nulls(json_build_object( - 'address', A.address, - 'community_id', A.community_id, - 'User', json_build_object( - 'id', editor_profiles.id, - 'profile', json_build_object( - 'userId', editor_profiles.id, - 'name', editor_profiles.profile->>'name', - 'address', A.address, - 'lastActive', A.last_active::text, - 'avatarUrl', editor_profiles.profile->>'avatar_url' - ) - ) - ))) - ELSE '[]'::json - END AS collaborators - FROM top_threads TT LEFT JOIN "Collaborations" AS C ON TT.id = C.thread_id - LEFT JOIN "Addresses" A ON C.address_id = A.id - LEFT JOIN "Users" editor_profiles ON A.user_id = editor_profiles.id - GROUP BY TT.id - ), reaction_data AS ( - -- get the thread reactions and the address/profile of the user who reacted - SELECT - TT.id as thread_id, - json_agg(json_strip_nulls(json_build_object( - 'id', R.id, - 'type', R.reaction, - 'address', A.address, - 'updated_at', R.updated_at::text, - 'voting_weight', R.calculated_voting_weight, - 'profile_name', U.profile->>'name', - 'avatar_url', U.profile->>'avatar_url', - 'last_active', A.last_active::text - ))) as "associatedReactions" - FROM "Reactions" R JOIN top_threads TT ON TT.id = R.thread_id - JOIN "Addresses" A ON A.id = R.address_id - JOIN "Users" U ON U.id = A.user_id - -- where clause doesn't change query result but forces DB to use the correct indexes - WHERE R.thread_id = TT.id - GROUP BY TT.id - ), contest_data AS ( - -- get the contest data associated with the thread - SELECT - TT.id as thread_id, - json_agg(json_strip_nulls(json_build_object( - 'contest_id', CON.contest_id, - 'contest_name', CM.name, - 'contest_cancelled', CM.cancelled, - 'contest_interval', CM.interval, - 'contest_address', CON.contest_address, - 'score', CON.score, - 'thread_id', TT.id, - 'content_id', CA.content_id, - 'start_time', CON.start_time, - 'end_time', CON.end_time - ))) as "associatedContests" - FROM "Contests" CON - JOIN "ContestManagers" CM ON CM.contest_address = CON.contest_address - JOIN "ContestActions" CA ON CON.contest_id = CA.contest_id - AND CON.contest_address = CA.contest_address AND CA.action = 'upvoted' - JOIN top_threads TT ON TT.id = CA.thread_id - GROUP BY TT.id - )${ - withXRecentComments - ? `, recent_comments AS ( - -- get the recent comments data associated with the thread - SELECT - TT.id as thread_id, - json_agg(json_strip_nulls(json_build_object( - 'id', COM.id, - 'address', A.address, - 'text', COM.text, - 'created_at', COM.created_at::text, - 'updated_at', COM.updated_at::text, - 'deleted_at', COM.deleted_at::text, - 'marked_as_spam_at', COM.marked_as_spam_at::text, - 'discord_meta', COM.discord_meta, - 'profile_name', U.profile->>'name', - 'profile_avatar_url', U.profile->>'avatar_url', - 'user_id', U.id - ))) as "recentComments" - FROM ( - Select tempC.* FROM "Comments" tempC - JOIN top_threads tempTT ON tempTT.id = tempC.thread_id - WHERE deleted_at IS NULL - ORDER BY created_at DESC - LIMIT :withXRecentComments - ) COM - JOIN top_threads TT ON TT.id = COM.thread_id - JOIN "Addresses" A ON A.id = COM.address_id - JOIN "Users" U ON U.id = A.user_id - GROUP BY TT.id - )` - : '' - } - SELECT - TT.*, TM.*, CD.*, RD.*, COND.* - ${withXRecentComments ? `, RC.*` : ''} - FROM top_threads TT - LEFT JOIN thread_metadata TM ON TT.id = TM.thread_id - LEFT JOIN collaborator_data CD ON TT.id = CD.thread_id - LEFT JOIN reaction_data RD ON TT.id = RD.thread_id - LEFT JOIN contest_data COND ON TT.id = COND.thread_id - ${ - withXRecentComments - ? `LEFT JOIN recent_comments RC ON TT.id = RC.thread_id;` - : '' - } - `, - { - replacements, - type: QueryTypes.SELECT, - }, - ); - - const numVotingThreadsQuery = this.models.Thread.count({ - where: { - community_id: communityId, - stage: 'voting', - }, - }); - - try { - const [threads, numVotingThreads] = await Promise.all([ - responseThreadsQuery, - numVotingThreadsQuery, - ]); - - return { - limit: replacements.limit, - page: replacements.page, - // data params - threads, - numVotingThreads, - }; - } catch (e) { - console.error(e); - throw new ServerError('Could not fetch threads'); - } -} diff --git a/packages/commonwealth/server/routes/feed.ts b/packages/commonwealth/server/routes/feed.ts index 2731334967a..02388bea060 100644 --- a/packages/commonwealth/server/routes/feed.ts +++ b/packages/commonwealth/server/routes/feed.ts @@ -1,8 +1,14 @@ -import { AppError } from '@hicommonwealth/core'; -import { Thread, ThreadAttributes, type DB } from '@hicommonwealth/model'; +import { AppError, query } from '@hicommonwealth/core'; +import { Feed as FeedQueries, Thread, type DB } from '@hicommonwealth/model'; +import { + GetUserFeed, + GetUserFeedOrderBy, + GetUserFeedStatus, + Thread as ThreadSchema, +} from '@hicommonwealth/schemas'; import { getDecodedString, slugify } from '@hicommonwealth/shared'; import { Feed } from 'feed'; -import { GetBulkThreadsResult } from '../controllers/server_threads_methods/get_bulk_threads'; +import { z } from 'zod'; import { ServerControllers } from '../routing/router'; import { TypedRequestQuery, TypedResponse } from '../types'; import { formatErrorPretty } from '../util/errorFormat'; @@ -14,16 +20,18 @@ import { SearchThreadsRequestQuery, } from './threads/get_threads_handler'; -function toDate(t: ThreadAttributes): Date { - // @ts-expect-error StrictNullChecks - return t.last_edited ?? t.created_at; +function toDate(t: z.infer): Date { + return t.last_edited ?? t.created_at!; } -function sortByDateDesc(a: ThreadAttributes, b: ThreadAttributes) { +function sortByDateDesc( + a: z.infer, + b: z.infer, +) { return toDate(b).getTime() - toDate(a).getTime(); } -function computeUpdated(bulkThreads: GetBulkThreadsResult): Date { +function computeUpdated(bulkThreads: z.infer) { if (bulkThreads.threads.length === 0) { // there are no threads return new Date(); @@ -34,6 +42,7 @@ function computeUpdated(bulkThreads: GetBulkThreadsResult): Date { // return the most recent thread and get its date return toDate(sortedByDateDesc[0]); } + export const getFeedHandler = async ( models: DB, controllers: ServerControllers, @@ -85,30 +94,22 @@ export const getFeedHandler = async ( status, } = bulkQueryValidationResult.data; - const bulkThreads = await controllers.threads.getBulkThreads({ - communityId: community_id, - // @ts-expect-error StrictNullChecks - stage, - // @ts-expect-error StrictNullChecks - topicId: topic_id, - // @ts-expect-error StrictNullChecks - includePinnedThreads, - // @ts-expect-error StrictNullChecks - page, - // @ts-expect-error StrictNullChecks - limit, - // @ts-expect-error StrictNullChecks - orderBy, - // @ts-expect-error StrictNullChecks - fromDate: from_date, - // @ts-expect-error StrictNullChecks - toDate: to_date, - // @ts-expect-error StrictNullChecks - archived: archived, - // @ts-expect-error StrictNullChecks - contestAddress, - // @ts-expect-error StrictNullChecks - status, + const bulkThreads = await query(FeedQueries.GetUserFeed(), { + actor: { user: { email: '' } }, + payload: { + page, + limit, + community_id, + stage, + topic_id, + includePinnedThreads, + order_by: orderBy as z.infer, + from_date, + to_date, + archived, + contestAddress, + status: status as z.infer, + }, }); const community = await models.Community.findOne({ @@ -116,7 +117,7 @@ export const getFeedHandler = async ( id: community_id, }, }); - const updated = computeUpdated(bulkThreads); + const updated = computeUpdated(bulkThreads!); // const self = `${req.protocol}://${req.get('host')}${req.originalUrl}`; const feed = new Feed({ @@ -136,7 +137,7 @@ export const getFeedHandler = async ( }, }); - bulkThreads.threads.forEach((thread) => { + bulkThreads!.threads.forEach((thread) => { const title = getDecodedString(thread.title); const slug = slugify(title); feed.addItem({ diff --git a/packages/commonwealth/server/routes/threads/get_threads_handler.ts b/packages/commonwealth/server/routes/threads/get_threads_handler.ts index ac711c70161..0a535d7f16a 100644 --- a/packages/commonwealth/server/routes/threads/get_threads_handler.ts +++ b/packages/commonwealth/server/routes/threads/get_threads_handler.ts @@ -1,5 +1,7 @@ -import { AppError } from '@hicommonwealth/core'; -import { Thread } from '@hicommonwealth/model'; +import { AppError, query } from '@hicommonwealth/core'; +import { Feed, Thread } from '@hicommonwealth/model'; +import { GetUserFeedOrderBy, GetUserFeedStatus } from '@hicommonwealth/schemas'; +import { z } from 'zod'; import { ALL_COMMUNITIES } from '../../middleware/databaseValidationService'; import { ServerControllers } from '../../routing/router'; import { @@ -116,31 +118,25 @@ export const getThreadsHandler = async ( withXRecentComments, } = bulkQueryValidationResult.data; - const bulkThreads = await controllers.threads.getBulkThreads({ - communityId: community_id, - // @ts-expect-error StrictNullChecks - stage, - // @ts-expect-error StrictNullChecks - topicId: topic_id, - // @ts-expect-error StrictNullChecks - includePinnedThreads, - // @ts-expect-error StrictNullChecks - page, - // @ts-expect-error StrictNullChecks - limit, - // @ts-expect-error StrictNullChecks - orderBy, - // @ts-expect-error StrictNullChecks - fromDate: from_date, - // @ts-expect-error StrictNullChecks - toDate: to_date, - // @ts-expect-error StrictNullChecks - archived: archived, - // @ts-expect-error StrictNullChecks - contestAddress, - // @ts-expect-error StrictNullChecks - status, - withXRecentComments, + const bulkThreads = await query(Feed.GetUserFeed(), { + actor: { + user: { email: '' }, + }, + payload: { + page, + limit, + community_id, + stage, + topic_id, + includePinnedThreads, + order_by: orderBy as z.infer, + from_date, + to_date, + archived: archived, + contestAddress, + status: status as z.infer, + withXRecentComments, + }, }); return success(res, bulkThreads); } From abd1584f41720c6f1925ccf83a4ffb57aab178ed Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 10 Oct 2024 21:40:14 +0500 Subject: [PATCH 105/425] Added logic to show group gated topic level permissions --- .../GroupsSection/GroupCard/GroupCard.scss | 24 ++++++++-- .../GroupsSection/GroupCard/GroupCard.tsx | 45 +++++++++---------- .../Members/GroupsSection/GroupCard/types.ts | 24 ++++++++++ .../Members/GroupsSection/GroupsSection.tsx | 3 ++ .../server_groups_methods/get_groups.ts | 27 +++++++++-- 5 files changed, 92 insertions(+), 31 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.scss b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.scss index bc01ce00a87..e38570fc430 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.scss +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.scss @@ -35,18 +35,36 @@ color: $neutral-500; font-size: 18px; } + .caption { color: $neutral-500; } } } - .gating-tags { + .gating-topics { display: flex; - flex-wrap: wrap; + flex-direction: column; gap: 8px; - align-items: center; width: 100%; + + .row { + padding: 8px 0; + width: 100%; + display: grid; + grid-template-columns: 1fr 1fr; + + .Tag { + height: auto; + + @include extraSmall { + .Text { + word-wrap: break-word; + white-space: normal; + } + } + } + } } .allowlist-table { diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.tsx index 7d3d878c732..31aa6c2a5d7 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.tsx @@ -1,5 +1,4 @@ import useBrowserWindow from 'hooks/useBrowserWindow'; -import MinimumProfile from 'models/MinimumProfile'; import React, { useState } from 'react'; import { Link } from 'react-router-dom'; import { Avatar } from 'views/components/Avatar'; @@ -9,32 +8,13 @@ import { CWText } from 'views/components/component_kit/cw_text'; import { CWTag } from 'views/components/component_kit/new_designs/CWTag'; import { formatAddressShort } from '../../../../../../helpers'; import CWPagination from '../../../../../components/component_kit/new_designs/CWPagination/CWPagination'; +import { TOPIC_PERMISSIONS } from '../../../Groups/common/GroupForm/constants'; import './GroupCard.scss'; import RequirementCard from './RequirementCard/RequirementCard'; - -type RequirementCardProps = { - requirementType: string; - requirementChain: string; - requirementContractAddress?: string; - requirementCondition: string; - requirementAmount: string; - requirementTokenId?: string; -}; - -type GroupCardProps = { - isJoined?: boolean; - groupName: string; - groupDescription?: string; - requirements?: RequirementCardProps[]; // This represents erc requirements - requirementsToFulfill: 'ALL' | number; - allowLists?: string[]; - topics: { id: number; name: string }[]; - canEdit?: boolean; - onEditClick?: () => any; - profiles?: Map; -}; +import { GroupCardProps } from './types'; const ALLOWLIST_MEMBERS_PER_PAGE = 7; + const GroupCard = ({ isJoined, groupName, @@ -163,9 +143,24 @@ const GroupCard = ({ {topics.length > 0 && ( <> Gated Topics -
+
+
+ Topic + Permission +
{topics.map((t, index) => ( - +
+ +
+ {t.name} + + +
+ +
))}
diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts new file mode 100644 index 00000000000..5066de8776c --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts @@ -0,0 +1,24 @@ +import MinimumProfile from 'models/MinimumProfile'; +import { TopicPermissions } from '../../../Groups/common/GroupForm/index.types'; + +export type RequirementCardProps = { + requirementType: string; + requirementChain: string; + requirementContractAddress?: string; + requirementCondition: string; + requirementAmount: string; + requirementTokenId?: string; +}; + +export type GroupCardProps = { + isJoined?: boolean; + groupName: string; + groupDescription?: string; + requirements?: RequirementCardProps[]; // This represents erc requirements + requirementsToFulfill: 'ALL' | number; + allowLists?: string[]; + topics: { id: number; name: string; permission?: TopicPermissions }[]; + canEdit?: boolean; + onEditClick?: () => any; + profiles?: Map; +}; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx index efebb54f3ea..a6717a709b7 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx @@ -40,6 +40,8 @@ const GroupsSection = ({ profiles?.map((p) => [p.address, p]), ); + console.log('filteredGroups => ', filteredGroups); + return (
{hasNoGroups && } @@ -92,6 +94,7 @@ const GroupsSection = ({ topics={(group?.topics || []).map((x) => ({ id: x.id, name: x.name, + permission: x.permission, }))} canEdit={canManageGroups} onEditClick={() => navigate(`/members/groups/${group.id}/update`)} diff --git a/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts b/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts index aa7fb05078f..2ec088d4bb1 100644 --- a/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts +++ b/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts @@ -3,6 +3,7 @@ import { MembershipAttributes, TopicAttributes, } from '@hicommonwealth/model'; +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { Op, WhereOptions } from 'sequelize'; import { ServerGroupsController } from '../server_groups_controller'; @@ -12,9 +13,13 @@ export type GetGroupsOptions = { includeTopics?: boolean; }; +export type TopicAttributesWithPermission = TopicAttributes & { + permission: GroupTopicPermissionEnum; +}; + type GroupWithExtras = GroupAttributes & { memberships?: MembershipAttributes[]; - topics?: TopicAttributes[]; + topics?: TopicAttributesWithPermission[]; }; export type GetGroupsResult = GroupWithExtras[]; @@ -26,6 +31,12 @@ export async function __getGroups( where: { community_id: communityId, }, + include: [ + { + model: this.models.GroupTopicPermission, + attributes: ['topic_id', 'allowed_actions'], + }, + ], }); let groupsResult = groups.map((group) => group.toJSON() as GroupWithExtras); @@ -68,11 +79,21 @@ export async function __getGroups( }, }, }); + groupsResult = groupsResult.map((group) => ({ ...group, topics: topics - .map((t) => t.toJSON()) - .filter((t) => t.group_ids!.includes(group.id!)), + .filter((t) => t.group_ids!.includes(group.id!)) + .map((t) => { + const temp: TopicAttributesWithPermission = { ...t.toJSON() }; + temp.permission = + ((group as any).GroupTopicPermissions || []).find( + (gtp) => gtp.topic_id === t.id, + )?.allowed_actions || + // TODO: this fallback should be via a migration for existing communities + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST; + return temp; + }), })); } From f83830290f045200fc05d98b0c587c18ff6dc205 Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Thu, 10 Oct 2024 21:40:48 +0500 Subject: [PATCH 106/425] make CWSingleSelectItem conditional --- .../new_designs/CWSelectList/CWSelectList.tsx | 24 ++++++++++++------- .../CWSingleSelectItem/CWSingleSelectItem.tsx | 2 -- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx index eee12789db4..2f89b431ed6 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSelectList/CWSelectList.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react'; import { useFormContext } from 'react-hook-form'; -import type { GroupBase, Props } from 'react-select'; +import type { GroupBase, Props, SingleValueProps } from 'react-select'; import Select from 'react-select'; import { getClasses } from '../../helpers'; import { ComponentType } from '../../types'; @@ -23,6 +23,10 @@ type CustomCWSelectListProps = { showCopyIcon?: boolean; }; +type OptionProps = { + value: string; + label: string; +}; export const CWSelectList = < Option, IsMulti extends boolean = false, @@ -133,14 +137,16 @@ export const CWSelectList = < DropdownIndicator, MultiValueRemove, Option: components?.Option || Option, - // eslint-disable-next-line react/no-multi-comp - SingleValue: (singleValueProps) => ( - - ), + ...(showCopyIcon && { + // eslint-disable-next-line react/no-multi-comp + SingleValue: (singleValueProps: SingleValueProps) => ( + + ), + }), }} className={getClasses<{ className?: string; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx index b63d324589e..8891d24c7e0 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWSingleSelectItem/CWSingleSelectItem.tsx @@ -42,8 +42,6 @@ export const CWSingleSelectItem = ( {formatAddressShort(data.label, 6)}
)} - {!showCopyIcon && {data.label}} - {showCopyIcon && ( Date: Thu, 10 Oct 2024 22:11:05 +0500 Subject: [PATCH 107/425] Updated `/refresh-memberships` response to include topic level permissioning --- .../state/api/groups/refreshMembership.ts | 5 +++-- .../NewThreadFormLegacy/NewThreadForm.tsx | 6 +++--- .../NewThreadFormModern/NewThreadForm.tsx | 4 ++-- .../CWContentPage/CWContentPage.tsx | 7 +++---- .../client/scripts/views/components/feed.tsx | 5 +++-- .../Members/GroupsSection/GroupsSection.tsx | 2 -- .../pages/discussions/DiscussionsPage.tsx | 4 ++-- .../views/pages/overview/TopicSummaryRow.tsx | 4 ++-- .../pages/view_thread/ViewThreadPage.tsx | 7 +++---- .../server_groups_methods/get_groups.ts | 15 ++++++++++--- .../refresh_membership.ts | 21 +++++++++++++++++-- 11 files changed, 52 insertions(+), 28 deletions(-) diff --git a/packages/commonwealth/client/scripts/state/api/groups/refreshMembership.ts b/packages/commonwealth/client/scripts/state/api/groups/refreshMembership.ts index d35d70ee31f..2f38f036e3b 100644 --- a/packages/commonwealth/client/scripts/state/api/groups/refreshMembership.ts +++ b/packages/commonwealth/client/scripts/state/api/groups/refreshMembership.ts @@ -1,3 +1,4 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; import { ApiEndpoints, SERVER_URL } from 'state/api/config'; @@ -14,7 +15,7 @@ interface RefreshMembershipProps { export interface Memberships { groupId: number; - topicIds: number[]; + topics: { id: number; permission: GroupTopicPermissionEnum }[]; isAllowed: boolean; rejectReason?: string; } @@ -34,7 +35,7 @@ const refreshMembership = async ({ return response?.data?.result?.map((r) => ({ groupId: r.groupId, - topicIds: r.topicIds, + topics: r.topics, isAllowed: r.allowed, rejectReason: r.rejectReason, })); diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index 907a8e3dca9..9cf98d969d8 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -141,13 +141,13 @@ export const NewThreadForm = () => { const isTopicGated = !!(memberships || []).find( (membership) => - threadTopic?.id && membership.topicIds.includes(threadTopic.id), + threadTopic?.id && membership.topics.find((t) => t.id === threadTopic.id), ); const isActionAllowedInGatedTopic = !!(memberships || []).find( (membership) => - threadTopic.id && + threadTopic && threadTopic?.id && - membership.topicIds.includes(threadTopic?.id) && + membership.topics.find((t) => t.id === threadTopic?.id) && membership.isAllowed, ); const gatedGroupNames = groups diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index a49282fa545..c566845a28e 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -134,13 +134,13 @@ export const NewThreadForm = () => { const isTopicGated = !!(memberships || []).find( (membership) => - threadTopic?.id && membership.topicIds.includes(threadTopic.id), + threadTopic?.id && membership.topics.find((t) => t.id === threadTopic.id), ); const isActionAllowedInGatedTopic = !!(memberships || []).find( (membership) => threadTopic.id && threadTopic?.id && - membership.topicIds.includes(threadTopic?.id) && + membership.topics.find((t) => t.id === threadTopic?.id) && membership.isAllowed, ); const gatedGroupNames = groups diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx index ea04b676a9e..fcd1b7355de 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx @@ -132,14 +132,13 @@ export const CWContentPage = ({ }); const isTopicGated = !!(memberships || []).find((membership) => - // @ts-expect-error - membership.topicIds.includes(thread?.topic?.id), + membership.topics.find((t) => t.id === thread?.topic?.id), ); const isActionAllowedInGatedTopic = !!(memberships || []).find( (membership) => - // @ts-expect-error - membership.topicIds.includes(thread?.topic?.id) && membership.isAllowed, + membership.topics.find((t) => t.id === thread?.topic?.id) && + membership.isAllowed, ); const isAdmin = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(); diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 43416e4208e..4cb11b14f71 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -66,13 +66,14 @@ const FeedThread = ({ thread }: { thread: Thread }) => { const isTopicGated = !!(memberships || []).find( (membership) => - thread?.topic?.id && membership.topicIds.includes(thread.topic.id), + thread?.topic?.id && + membership.topics.find((t) => t.id === thread.topic.id), ); const isActionAllowedInGatedTopic = !!(memberships || []).find( (membership) => thread?.topic?.id && - membership.topicIds.includes(thread.topic.id) && + membership.topics.find((t) => t.id === thread.topic.id) && membership.isAllowed, ); diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx index a6717a709b7..585b836a54b 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx @@ -40,8 +40,6 @@ const GroupsSection = ({ profiles?.map((p) => [p.address, p]), ); - console.log('filteredGroups => ', filteredGroups); - return (
{hasNoGroups && } diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index 126aa48bf7b..008bb76acdf 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -209,13 +209,13 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { const isTopicGated = !!(memberships || []).find( (membership) => thread?.topic?.id && - membership.topicIds.includes(thread.topic.id), + membership.topics.find((t) => t.id === thread.topic.id), ); const isActionAllowedInGatedTopic = !!(memberships || []).find( (membership) => thread?.topic?.id && - membership.topicIds.includes(thread.topic.id) && + membership.topics.find((t) => t.id === thread.topic.id) && membership.isAllowed, ); diff --git a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx index bc402155416..6494c8684c0 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx @@ -92,13 +92,13 @@ export const TopicSummaryRow = ({ const isTopicGated = !!(memberships || []).find( (membership) => thread?.topic?.id && - membership.topicIds.includes(thread.topic.id), + membership.topics.find((t) => t.id === thread.topic.id), ); const isActionAllowedInGatedTopic = !!(memberships || []).find( (membership) => thread?.topic?.id && - membership.topicIds.includes(thread.topic.id) && + membership.topics.find((t) => t.id === thread.topic.id) && membership.isAllowed, ); diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index 807e5f859ac..5e019d3af55 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -155,14 +155,13 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { }); const isTopicGated = !!(memberships || []).find((membership) => - // @ts-expect-error - membership.topicIds.includes(thread?.topic?.id), + membership.topics.find((t) => t.id === thread?.topic?.id), ); const isActionAllowedInGatedTopic = !!(memberships || []).find( (membership) => - // @ts-expect-error - membership.topicIds.includes(thread?.topic?.id) && membership.isAllowed, + membership.topics.find((t) => t.id === thread?.topic?.id) && + membership.isAllowed, ); const isRestrictedMembership = diff --git a/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts b/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts index 2ec088d4bb1..0a56395bbd1 100644 --- a/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts +++ b/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts @@ -1,5 +1,6 @@ import { GroupAttributes, + GroupInstance, MembershipAttributes, TopicAttributes, } from '@hicommonwealth/model'; @@ -23,6 +24,13 @@ type GroupWithExtras = GroupAttributes & { }; export type GetGroupsResult = GroupWithExtras[]; +export type GroupInstanceWithTopicPermissions = GroupInstance & { + GroupTopicPermissions: { + topic_id: number; + allowed_actions: GroupTopicPermissionEnum; + }[]; +}; + export async function __getGroups( this: ServerGroupsController, { communityId, includeMembers, includeTopics }: GetGroupsOptions, @@ -87,9 +95,10 @@ export async function __getGroups( .map((t) => { const temp: TopicAttributesWithPermission = { ...t.toJSON() }; temp.permission = - ((group as any).GroupTopicPermissions || []).find( - (gtp) => gtp.topic_id === t.id, - )?.allowed_actions || + ( + (group as GroupInstanceWithTopicPermissions) + .GroupTopicPermissions || [] + ).find((gtp) => gtp.topic_id === t.id)?.allowed_actions || // TODO: this fallback should be via a migration for existing communities GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST; return temp; diff --git a/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts b/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts index c59552b43c6..2c33f527a93 100644 --- a/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts +++ b/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts @@ -4,9 +4,11 @@ import { MembershipRejectReason, UserInstance, } from '@hicommonwealth/model'; +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { Op } from 'sequelize'; import { refreshMembershipsForAddress } from '../../util/requirementsModule/refreshMembershipsForAddress'; import { ServerGroupsController } from '../server_groups_controller'; +import { GroupInstanceWithTopicPermissions } from './get_groups'; const Errors = { TopicNotFound: 'Topic not found', @@ -32,6 +34,12 @@ export async function __refreshMembership( where: { community_id: address.community_id, }, + include: [ + { + model: this.models.GroupTopicPermission, + attributes: ['topic_id', 'allowed_actions'], + }, + ], }); // optionally filter to only groups associated with topic @@ -63,9 +71,18 @@ export async function __refreshMembership( // transform memberships to result shape const results = memberships.map((membership) => ({ groupId: membership.group_id, - topicIds: topics + topics: topics .filter((t) => t.group_ids!.includes(membership.group_id)) - .map((t) => t.id), + .map((t) => ({ + id: t.id, + permission: + (groups as GroupInstanceWithTopicPermissions[]) + .find((g) => g.id === membership.group_id) + ?.GroupTopicPermissions?.find((gtp) => gtp.topic_id === t.id) + ?.allowed_actions || + // TODO: this fallback should be via a migration for existing communities + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + })), allowed: !membership.reject_reason, rejectReason: membership.reject_reason, })); From 161bae88214bc563e28a3351d6f69a2d1e176469 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 10 Oct 2024 22:53:35 +0500 Subject: [PATCH 108/425] Block specific thread/comment actions if required conditions are not met by gated topic members --- .../src/comment/CreateComment.command.ts | 5 +- .../comment/CreateCommentReaction.command.ts | 5 +- libs/model/src/middleware/authorization.ts | 52 ++++++++++++++----- libs/model/src/thread/CreateThread.command.ts | 6 ++- .../thread/CreateThreadReaction.command.ts | 1 + 5 files changed, 53 insertions(+), 16 deletions(-) diff --git a/libs/model/src/comment/CreateComment.command.ts b/libs/model/src/comment/CreateComment.command.ts index 2afb1ec5dda..a517d635594 100644 --- a/libs/model/src/comment/CreateComment.command.ts +++ b/libs/model/src/comment/CreateComment.command.ts @@ -33,7 +33,10 @@ export function CreateComment(): Command< return { ...schemas.CreateComment, auth: [ - isAuthorized({ action: schemas.PermissionEnum.CREATE_COMMENT }), + isAuthorized({ + action: schemas.PermissionEnum.CREATE_COMMENT, + topicPermission: schemas.GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, + }), verifyCommentSignature, ], body: async ({ actor, payload, auth }) => { diff --git a/libs/model/src/comment/CreateCommentReaction.command.ts b/libs/model/src/comment/CreateCommentReaction.command.ts index 412e87a0b3f..a23a1dedaad 100644 --- a/libs/model/src/comment/CreateCommentReaction.command.ts +++ b/libs/model/src/comment/CreateCommentReaction.command.ts @@ -13,7 +13,10 @@ export function CreateCommentReaction(): Command< return { ...schemas.CreateCommentReaction, auth: [ - isAuthorized({ action: schemas.PermissionEnum.CREATE_COMMENT_REACTION }), + isAuthorized({ + action: schemas.PermissionEnum.CREATE_COMMENT_REACTION, + topicPermission: schemas.GroupTopicPermissionEnum.UPVOTE, + }), verifyReactionSignature, ], body: async ({ payload, actor, auth }) => { diff --git a/libs/model/src/middleware/authorization.ts b/libs/model/src/middleware/authorization.ts index 2bd482c8378..53991a1b097 100644 --- a/libs/model/src/middleware/authorization.ts +++ b/libs/model/src/middleware/authorization.ts @@ -6,7 +6,11 @@ import { type Context, type Handler, } from '@hicommonwealth/core'; -import { Group, GroupPermissionAction } from '@hicommonwealth/schemas'; +import { + Group, + GroupPermissionAction, + GroupTopicPermissionEnum, +} from '@hicommonwealth/schemas'; import { Role } from '@hicommonwealth/shared'; import { Op, QueryTypes } from 'sequelize'; import { ZodSchema, z } from 'zod'; @@ -49,7 +53,7 @@ export class NonMember extends InvalidActor { constructor( public actor: Actor, public topic: string, - public action: GroupPermissionAction, + public action: GroupPermissionAction | GroupTopicPermissionEnum, ) { super( actor, @@ -182,10 +186,11 @@ async function buildAuth( /** * Checks if actor passes a set of requirements and grants access for all groups of the given topic */ -async function isTopicMember( +async function hasTopicInteractionPermissions( actor: Actor, auth: AuthContext, action: GroupPermissionAction, + topicPermission: GroupTopicPermissionEnum, ): Promise { if (!auth.topic_id) throw new InvalidInput('Must provide a topic id'); @@ -196,13 +201,18 @@ async function isTopicMember( const groups = await models.sequelize.query< z.infer & { - allowed_actions?: GroupPermissionAction[]; + group_allowed_actions?: GroupPermissionAction[]; + topic_allowed_actions?: GroupTopicPermissionEnum; } >( ` - SELECT g.*, gp.allowed_actions + SELECT + g.*, + gp.allowed_actions as group_allowed_actions, + gtp.allowed_actions as topic_allowed_actions FROM "Groups" as g LEFT JOIN "GroupPermissions" gp ON g.id = gp.group_id + LEFT JOIN "GroupTopicPermissions" gtp ON g.id = gtp.group_id AND gtp.topic_id = :topic_id WHERE g.community_id = :community_id AND g.id IN (:group_ids); `, { @@ -211,22 +221,31 @@ async function isTopicMember( replacements: { community_id: auth.topic.community_id, group_ids: auth.topic.group_ids, + topic_id: auth.topic.id, }, }, ); // There are 2 cases here. We either have the old group permission system where the group doesn't have - // any allowed_actions, or we have the new fine-grained permission system where the action must be in - // the allowed_actions list. - const allowed = groups.filter( - (g) => !g.allowed_actions || g.allowed_actions.includes(action), + // any group_allowed_actions, or we have the new fine-grained permission system where the action must be in + // the group_allowed_actions list. + const allowedGroupActions = groups.filter( + (g) => !g.group_allowed_actions || g.group_allowed_actions.includes(action), + ); + if (!allowedGroupActions.length!) + throw new NonMember(actor, auth.topic.name, action); + + // The user must have `topicPermission` matching `topic_allowed_actions` for this topic + const allowedTopicActions = groups.filter((g) => + g.topic_allowed_actions?.includes(topicPermission), ); - if (!allowed.length!) throw new NonMember(actor, auth.topic.name, action); + if (!allowedTopicActions.length!) + throw new NonMember(actor, auth.topic.name, topicPermission); // check membership for all groups of topic const memberships = await models.Membership.findAll({ where: { - group_id: { [Op.in]: allowed.map((g) => g.id!) }, + group_id: { [Op.in]: allowedGroupActions.map((g) => g.id!) }, address_id: auth.address!.id, }, include: [ @@ -272,11 +291,13 @@ export const isSuperAdmin: AuthHandler = async (ctx) => { export function isAuthorized({ roles = ['admin', 'moderator', 'member'], action, + topicPermission, author = false, collaborators = false, }: { roles?: Role[]; action?: GroupPermissionAction; + topicPermission?: GroupTopicPermissionEnum; author?: boolean; collaborators?: boolean; }): AuthHandler { @@ -293,9 +314,14 @@ export function isAuthorized({ if (auth.address!.is_banned) throw new BannedActor(ctx.actor); - if (action) { + if (action && topicPermission) { // waterfall stops here after validating the action - await isTopicMember(ctx.actor, auth, action); + await hasTopicInteractionPermissions( + ctx.actor, + auth, + action, + topicPermission, + ); return; } diff --git a/libs/model/src/thread/CreateThread.command.ts b/libs/model/src/thread/CreateThread.command.ts index 228a55fda7a..d69f611706f 100644 --- a/libs/model/src/thread/CreateThread.command.ts +++ b/libs/model/src/thread/CreateThread.command.ts @@ -89,7 +89,11 @@ export function CreateThread(): Command< return { ...schemas.CreateThread, auth: [ - isAuthorized({ action: schemas.PermissionEnum.CREATE_THREAD }), + isAuthorized({ + action: schemas.PermissionEnum.CREATE_THREAD, + topicPermission: + schemas.GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + }), verifyThreadSignature, ], body: async ({ actor, payload, auth }) => { diff --git a/libs/model/src/thread/CreateThreadReaction.command.ts b/libs/model/src/thread/CreateThreadReaction.command.ts index 935360ce7ae..8dc4e33d5e5 100644 --- a/libs/model/src/thread/CreateThreadReaction.command.ts +++ b/libs/model/src/thread/CreateThreadReaction.command.ts @@ -19,6 +19,7 @@ export function CreateThreadReaction(): Command< auth: [ isAuthorized({ action: schemas.PermissionEnum.CREATE_THREAD_REACTION, + topicPermission: schemas.GroupTopicPermissionEnum.UPVOTE, }), verifyReactionSignature, ], From 82db2495fff6accc801747ba2ae463ccac893dc0 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 10 Oct 2024 23:27:34 +0500 Subject: [PATCH 109/425] Abstracted topic gating membership logic into global hook --- .../client/scripts/hooks/useTopicGating.ts | 50 +++++++++++++++++++ .../NewThreadFormLegacy/NewThreadForm.tsx | 26 ++-------- .../NewThreadFormModern/NewThreadForm.tsx | 26 ++-------- .../CWContentPage/CWContentPage.tsx | 23 ++------- .../client/scripts/views/components/feed.tsx | 27 ++-------- .../common/GroupForm/Allowlist/Allowlist.tsx | 6 +-- .../Members/CommunityMembersPage.tsx | 10 ++-- .../pages/discussions/DiscussionsPage.tsx | 6 +-- .../views/pages/overview/TopicSummaryRow.tsx | 7 +-- .../pages/view_thread/ViewThreadPage.tsx | 24 ++------- 10 files changed, 88 insertions(+), 117 deletions(-) create mode 100644 packages/commonwealth/client/scripts/hooks/useTopicGating.ts diff --git a/packages/commonwealth/client/scripts/hooks/useTopicGating.ts b/packages/commonwealth/client/scripts/hooks/useTopicGating.ts new file mode 100644 index 00000000000..78910c052d7 --- /dev/null +++ b/packages/commonwealth/client/scripts/hooks/useTopicGating.ts @@ -0,0 +1,50 @@ +import { useRefreshMembershipQuery } from 'state/api/groups'; +import Permissions from '../utils/Permissions'; + +type IuseTopicGating = { + communityId: string; + apiEnabled: boolean; + userAddress: string; + topicId?: number; +}; + +const useTopicGating = ({ + apiEnabled, + communityId, + userAddress, + topicId, +}: IuseTopicGating) => { + const { data: memberships = [], isLoading: isLoadingMemberships } = + useRefreshMembershipQuery({ + communityId, + address: userAddress, + apiEnabled, + }); + + const isTopicGated = !!(memberships || []).find((membership) => + membership.topics.find((t) => t.id === topicId), + ); + + const isActionAllowedInGatedTopic = !!(memberships || []).find( + (membership) => + membership.topics.find((t) => t.id === topicId) && membership.isAllowed, + ); + + const isAdmin = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(); + + const isRestrictedMembership = + !isAdmin && isTopicGated && !isActionAllowedInGatedTopic; + + return { + memberships, + isLoadingMemberships, + ...(topicId && { + // only return these fields if `topicId` is present, otherwise these values will be inaccurate + isTopicGated, + isActionAllowedInGatedTopic, + isRestrictedMembership, + }), + }; +}; + +export default useTopicGating; diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index 9cf98d969d8..d061e135868 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -6,15 +6,13 @@ import { parseCustomStages } from 'helpers'; import { detectURL, getThreadActionTooltipText } from 'helpers/threads'; import { useFlag } from 'hooks/useFlag'; import useJoinCommunityBanner from 'hooks/useJoinCommunityBanner'; +import useTopicGating from 'hooks/useTopicGating'; import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useMemo, useState } from 'react'; import { useLocation } from 'react-router-dom'; import app from 'state'; import { useGetUserEthBalanceQuery } from 'state/api/communityStake'; -import { - useFetchGroupsQuery, - useRefreshMembershipQuery, -} from 'state/api/groups'; +import { useFetchGroupsQuery } from 'state/api/groups'; import { useCreateThreadMutation } from 'state/api/threads'; import { useFetchTopicsQuery } from 'state/api/topics'; import useUserStore from 'state/ui/user'; @@ -29,7 +27,6 @@ import { MessageRow } from 'views/components/component_kit/new_designs/CWTextInp import useCommunityContests from 'views/pages/CommunityManagement/Contests/useCommunityContests'; import useAppStatus from '../../../hooks/useAppStatus'; import { ThreadKind, ThreadStage } from '../../../models/types'; -import Permissions from '../../../utils/Permissions'; import { CWText } from '../../components/component_kit/cw_text'; import { CWGatedTopicBanner } from '../component_kit/CWGatedTopicBanner'; import { CWSelectList } from '../component_kit/new_designs/CWSelectList'; @@ -66,7 +63,6 @@ export const NewThreadForm = () => { const sortedTopics = [...topics].sort((a, b) => a.name.localeCompare(b.name)); const hasTopics = sortedTopics?.length; - const isAdmin = Permissions.isCommunityAdmin() || Permissions.isSiteAdmin(); const topicsForSelector = hasTopics ? sortedTopics : []; const { @@ -110,10 +106,11 @@ export const NewThreadForm = () => { includeTopics: true, enabled: !!communityId, }); - const { data: memberships = [] } = useRefreshMembershipQuery({ + const { isRestrictedMembership } = useTopicGating({ communityId, - address: user.activeAccount?.address || '', + userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address && !!communityId, + topicId: threadTopic?.id || 0, }); const { mutateAsync: createThread } = useCreateThreadMutation({ @@ -139,24 +136,11 @@ export const NewThreadForm = () => { return threadTitle || getTextFromDelta(threadContentDelta).length > 0; }, [threadContentDelta, threadTitle]); - const isTopicGated = !!(memberships || []).find( - (membership) => - threadTopic?.id && membership.topics.find((t) => t.id === threadTopic.id), - ); - const isActionAllowedInGatedTopic = !!(memberships || []).find( - (membership) => - threadTopic && - threadTopic?.id && - membership.topics.find((t) => t.id === threadTopic?.id) && - membership.isAllowed, - ); const gatedGroupNames = groups .filter((group) => group.topics.find((topic) => topic.id === threadTopic?.id), ) .map((group) => group.name); - const isRestrictedMembership = - !isAdmin && isTopicGated && !isActionAllowedInGatedTopic; const handleNewThreadCreation = async () => { if (isRestrictedMembership) { diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index c566845a28e..f8507a21666 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -6,15 +6,13 @@ import { parseCustomStages } from 'helpers'; import { detectURL, getThreadActionTooltipText } from 'helpers/threads'; import { useFlag } from 'hooks/useFlag'; import useJoinCommunityBanner from 'hooks/useJoinCommunityBanner'; +import useTopicGating from 'hooks/useTopicGating'; import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useRef, useState } from 'react'; import { useLocation } from 'react-router-dom'; import app from 'state'; import { useGetUserEthBalanceQuery } from 'state/api/communityStake'; -import { - useFetchGroupsQuery, - useRefreshMembershipQuery, -} from 'state/api/groups'; +import { useFetchGroupsQuery } from 'state/api/groups'; import { useCreateThreadMutation } from 'state/api/threads'; import { useFetchTopicsQuery } from 'state/api/topics'; import useUserStore from 'state/ui/user'; @@ -31,7 +29,6 @@ import { MessageRow } from 'views/components/component_kit/new_designs/CWTextInp import useCommunityContests from 'views/pages/CommunityManagement/Contests/useCommunityContests'; import useAppStatus from '../../../hooks/useAppStatus'; import { ThreadKind, ThreadStage } from '../../../models/types'; -import Permissions from '../../../utils/Permissions'; import { CWText } from '../../components/component_kit/cw_text'; import { CWGatedTopicBanner } from '../component_kit/CWGatedTopicBanner'; import { CWSelectList } from '../component_kit/new_designs/CWSelectList'; @@ -64,7 +61,6 @@ export const NewThreadForm = () => { const sortedTopics = [...topics].sort((a, b) => a.name.localeCompare(b.name)); const hasTopics = sortedTopics?.length; - const isAdmin = Permissions.isCommunityAdmin() || Permissions.isSiteAdmin(); const topicsForSelector = hasTopics ? sortedTopics : []; const { @@ -107,10 +103,11 @@ export const NewThreadForm = () => { includeTopics: true, enabled: !!communityId, }); - const { data: memberships = [] } = useRefreshMembershipQuery({ + const { isRestrictedMembership } = useTopicGating({ communityId, - address: user.activeAccount?.address || '', + userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address && !!communityId, + topicId: threadTopic?.id || 0, }); const { mutateAsync: createThread } = useCreateThreadMutation({ @@ -132,24 +129,11 @@ export const NewThreadForm = () => { const isDiscussion = threadKind === ThreadKind.Discussion; - const isTopicGated = !!(memberships || []).find( - (membership) => - threadTopic?.id && membership.topics.find((t) => t.id === threadTopic.id), - ); - const isActionAllowedInGatedTopic = !!(memberships || []).find( - (membership) => - threadTopic.id && - threadTopic?.id && - membership.topics.find((t) => t.id === threadTopic?.id) && - membership.isAllowed, - ); const gatedGroupNames = groups .filter((group) => group.topics.find((topic) => topic.id === threadTopic?.id), ) .map((group) => group.name); - const isRestrictedMembership = - !isAdmin && isTopicGated && !isActionAllowedInGatedTopic; const handleNewThreadCreation = async () => { const body = markdownEditorMethodsRef.current!.getMarkdown(); diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx index fcd1b7355de..4df91a19cf7 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx @@ -1,14 +1,13 @@ import { getThreadActionTooltipText } from 'helpers/threads'; import { truncate } from 'helpers/truncate'; +import useTopicGating from 'hooks/useTopicGating'; import { IThreadCollaborator } from 'models/Thread'; import moment from 'moment'; import React, { ReactNode, useMemo, useState } from 'react'; import { useNavigate } from 'react-router'; import { useSearchParams } from 'react-router-dom'; import app from 'state'; -import { useRefreshMembershipQuery } from 'state/api/groups'; import useUserStore from 'state/ui/user'; -import Permissions from 'utils/Permissions'; import { ThreadContestTagContainer } from 'views/components/ThreadContestTag'; import { isHot } from 'views/pages/discussions/helpers'; import Account from '../../../../models/Account'; @@ -125,26 +124,14 @@ export const CWContentPage = ({ const [isUpvoteDrawerOpen, setIsUpvoteDrawerOpen] = useState(false); const communityId = app.activeChainId() || ''; - const { data: memberships = [] } = useRefreshMembershipQuery({ + + const { isRestrictedMembership } = useTopicGating({ communityId, - address: user.activeAccount?.address || '', + userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address && !!communityId, + topicId: thread?.topic?.id || 0, }); - const isTopicGated = !!(memberships || []).find((membership) => - membership.topics.find((t) => t.id === thread?.topic?.id), - ); - - const isActionAllowedInGatedTopic = !!(memberships || []).find( - (membership) => - membership.topics.find((t) => t.id === thread?.topic?.id) && - membership.isAllowed, - ); - - const isAdmin = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(); - const isRestrictedMembership = - !isAdmin && isTopicGated && !isActionAllowedInGatedTopic; - const tabSelected = useMemo(() => { const tab = Object.fromEntries(urlQueryParams.entries())?.tab; if (!tab) { diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 4cb11b14f71..acd1d9af37e 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -8,6 +8,7 @@ import { UserDashboardRowSkeleton } from '../pages/user_dashboard/user_dashboard import { slugify } from '@hicommonwealth/shared'; import { getThreadActionTooltipText } from 'helpers/threads'; +import useTopicGating from 'hooks/useTopicGating'; import { getProposalUrlPath } from 'identifiers'; import Thread from 'models/Thread'; import { useCommonNavigate } from 'navigation/helpers'; @@ -17,7 +18,6 @@ import { useFetchGlobalActivityQuery, useFetchUserActivityQuery, } from 'state/api/feeds'; -import { useRefreshMembershipQuery } from 'state/api/groups'; import useUserStore from 'state/ui/user'; import Permissions from 'utils/Permissions'; import { DashboardViews } from 'views/pages/user_dashboard'; @@ -50,36 +50,17 @@ const FeedThread = ({ thread }: { thread: Thread }) => { enabled: !!thread.communityId, }); - const isAdmin = - Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(community); - const account = user.addresses?.find( (a) => a?.community?.id === thread?.communityId, ); - const { data: memberships = [] } = useRefreshMembershipQuery({ + const { isRestrictedMembership } = useTopicGating({ communityId: thread.communityId, - // @ts-expect-error - address: account?.address, + userAddress: account?.address || '', apiEnabled: !!account?.address && !!thread.communityId, + topicId: thread?.topic?.id || 0, }); - const isTopicGated = !!(memberships || []).find( - (membership) => - thread?.topic?.id && - membership.topics.find((t) => t.id === thread.topic.id), - ); - - const isActionAllowedInGatedTopic = !!(memberships || []).find( - (membership) => - thread?.topic?.id && - membership.topics.find((t) => t.id === thread.topic.id) && - membership.isAllowed, - ); - - const isRestrictedMembership = - !isAdmin && isTopicGated && !isActionAllowedInGatedTopic; - const disabledActionsTooltipText = getThreadActionTooltipText({ isCommunityMember: Permissions.isCommunityMember(thread.communityId), isThreadArchived: !!thread?.archivedAt, diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/Allowlist/Allowlist.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/Allowlist/Allowlist.tsx index 555cb7af480..2c90236c6e9 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/Allowlist/Allowlist.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/Allowlist/Allowlist.tsx @@ -2,10 +2,10 @@ import { DEFAULT_NAME } from '@hicommonwealth/shared'; import { MagnifyingGlass } from '@phosphor-icons/react'; import { formatAddressShort } from 'helpers'; import { APIOrderDirection } from 'helpers/constants'; +import useTopicGating from 'hooks/useTopicGating'; import React, { useMemo, useState } from 'react'; import app from 'state'; import { useGetCommunityByIdQuery } from 'state/api/communities'; -import { useRefreshMembershipQuery } from 'state/api/groups'; import useUserStore from 'state/ui/user'; import { useDebounce } from 'usehooks-ts'; import { OptionConfig, Select } from 'views/components/Select'; @@ -85,9 +85,9 @@ const Allowlist = ({ const [currentPage, setCurrentPage] = useState(1); const communityId = app.activeChainId() || ''; - const { data: memberships } = useRefreshMembershipQuery({ + const { memberships } = useTopicGating({ communityId, - address: user.activeAccount?.address || '', + userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address, }); diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/CommunityMembersPage.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/CommunityMembersPage.tsx index 12fc7ea6fdf..549a88a7d5a 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/CommunityMembersPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/CommunityMembersPage.tsx @@ -1,6 +1,7 @@ import { DEFAULT_NAME } from '@hicommonwealth/shared'; import { APIOrderDirection } from 'helpers/constants'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; +import useTopicGating from 'hooks/useTopicGating'; import moment from 'moment'; import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useMemo, useState } from 'react'; @@ -12,10 +13,7 @@ import { import app from 'state'; import { useGetCommunityByIdQuery } from 'state/api/communities'; import { ApiEndpoints, queryClient } from 'state/api/config'; -import { - useFetchGroupsQuery, - useRefreshMembershipQuery, -} from 'state/api/groups'; +import { useFetchGroupsQuery } from 'state/api/groups'; import { SearchProfilesResponse } from 'state/api/profiles/searchProfiles'; import useGroupMutationBannerStore from 'state/ui/group'; import useUserStore from 'state/ui/user'; @@ -81,9 +79,9 @@ const CommunityMembersPage = () => { }); const communityId = app.activeChainId() || ''; - const { data: memberships = null } = useRefreshMembershipQuery({ + const { memberships } = useTopicGating({ communityId, - address: user?.activeAccount?.address || '', + userAddress: user?.activeAccount?.address || '', apiEnabled: !!user?.activeAccount?.address && !!communityId, }); diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index 008bb76acdf..b260723879d 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -24,10 +24,10 @@ import { getThreadActionTooltipText } from 'helpers/threads'; import useBrowserWindow from 'hooks/useBrowserWindow'; import { useFlag } from 'hooks/useFlag'; import useManageDocumentTitle from 'hooks/useManageDocumentTitle'; +import useTopicGating from 'hooks/useTopicGating'; import 'pages/discussions/index.scss'; import { useGetCommunityByIdQuery } from 'state/api/communities'; import { useFetchCustomDomainQuery } from 'state/api/configuration'; -import { useRefreshMembershipQuery } from 'state/api/groups'; import useUserStore from 'state/ui/user'; import Permissions from 'utils/Permissions'; import { checkIsTopicInContest } from 'views/components/NewThreadFormLegacy/helpers'; @@ -91,9 +91,9 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { const user = useUserStore(); - const { data: memberships = [] } = useRefreshMembershipQuery({ + const { memberships } = useTopicGating({ communityId: communityId, - address: user.activeAccount?.address || '', + userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address && !!communityId, }); diff --git a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx index 6494c8684c0..7551611599d 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx @@ -1,11 +1,11 @@ import { slugify } from '@hicommonwealth/shared'; import { getThreadActionTooltipText } from 'helpers/threads'; +import useTopicGating from 'hooks/useTopicGating'; import { getProposalUrlPath } from 'identifiers'; import { useCommonNavigate } from 'navigation/helpers'; import 'pages/overview/TopicSummaryRow.scss'; import React from 'react'; import app from 'state'; -import { useRefreshMembershipQuery } from 'state/api/groups'; import useUserStore from 'state/ui/user'; import Permissions from 'utils/Permissions'; import type Thread from '../../../models/Thread'; @@ -31,9 +31,10 @@ export const TopicSummaryRow = ({ const user = useUserStore(); const communityId = app.activeChainId() || ''; - const { data: memberships = [] } = useRefreshMembershipQuery({ + + const { memberships } = useTopicGating({ communityId, - address: user.activeAccount?.address || '', + userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address || !!communityId, }); diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index 5e019d3af55..b0330aabbdc 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -6,6 +6,7 @@ import { filterLinks, getThreadActionTooltipText } from 'helpers/threads'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; import useBrowserWindow from 'hooks/useBrowserWindow'; import useJoinCommunityBanner from 'hooks/useJoinCommunityBanner'; +import useTopicGating from 'hooks/useTopicGating'; import moment from 'moment'; import { useCommonNavigate } from 'navigation/helpers'; import 'pages/view_thread/index.scss'; @@ -14,10 +15,7 @@ import { Helmet } from 'react-helmet-async'; import app from 'state'; import { useFetchCommentsQuery } from 'state/api/comments'; import useGetViewCountByObjectIdQuery from 'state/api/general/getViewCountByObjectId'; -import { - useFetchGroupsQuery, - useRefreshMembershipQuery, -} from 'state/api/groups'; +import { useFetchGroupsQuery } from 'state/api/groups'; import { useAddThreadLinksMutation, useGetThreadPollsQuery, @@ -142,10 +140,11 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { threadId: parseInt(threadId), }); - const { data: memberships = [] } = useRefreshMembershipQuery({ + const { isRestrictedMembership } = useTopicGating({ communityId, - address: user?.activeAccount?.address || '', apiEnabled: !!user?.activeAccount?.address && !!communityId, + userAddress: user?.activeAccount?.address || '', + topicId: thread?.topic?.id || 0, }); const { data: viewCount = 0 } = useGetViewCountByObjectIdQuery({ @@ -154,19 +153,6 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { apiCallEnabled: !!thread?.id && !!communityId, }); - const isTopicGated = !!(memberships || []).find((membership) => - membership.topics.find((t) => t.id === thread?.topic?.id), - ); - - const isActionAllowedInGatedTopic = !!(memberships || []).find( - (membership) => - membership.topics.find((t) => t.id === thread?.topic?.id) && - membership.isAllowed, - ); - - const isRestrictedMembership = - !isAdmin && isTopicGated && !isActionAllowedInGatedTopic; - useEffect(() => { if (fetchCommentsError) notifyError('Failed to load comments'); }, [fetchCommentsError]); From 72c3aeedfea5a5d616116233fbc943234e5cfdf7 Mon Sep 17 00:00:00 2001 From: ianrowan Date: Thu, 10 Oct 2024 14:33:04 -0500 Subject: [PATCH 110/425] add erc20 contest deployment helper --- .../Abi/NamespaceFactoryAbi.ts | 14 +++++++ .../helpers/ContractHelpers/Contest.ts | 37 +++++++++++++++++++ .../ContractHelpers/NamespaceFactory.ts | 36 ++++++++++++++++++ 3 files changed, 87 insertions(+) diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/NamespaceFactoryAbi.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/NamespaceFactoryAbi.ts index 4314661c8d0..1504b0e381f 100644 --- a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/NamespaceFactoryAbi.ts +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/NamespaceFactoryAbi.ts @@ -1,4 +1,18 @@ export const namespaceFactoryAbi = [ + { + type: 'function', + name: 'newSingleERC20Contest', + inputs: [ + { name: 'name', type: 'string', internalType: 'string' }, + { name: 'length', type: 'uint256', internalType: 'uint256' }, + { name: 'winnerShares', type: 'uint256[]', internalType: 'uint256[]' }, + { name: 'token', type: 'address', internalType: 'address' }, + { name: 'voterShare', type: 'uint256', internalType: 'uint256' }, + { name: 'exhangeToken', type: 'address', internalType: 'address' }, + ], + outputs: [{ name: '', type: 'address', internalType: 'address' }], + stateMutability: 'nonpayable', + }, { inputs: [], stateMutability: 'view', diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts index e8dbde5dd8f..b147405b80e 100644 --- a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts @@ -130,6 +130,43 @@ class Contest extends ContractBase { } } + async newSingleERC20Contest( + namespaceName: string, + contestInterval: number, + winnerShares: number[], + voteToken: string, + voterShare: number, + walletAddress: string, + exchangeToken: string, + ): Promise { + if (!this.initialized || !this.walletEnabled) { + await this.initialize(true); + } + + try { + const txReceipt = await this.namespaceFactory.newERC20Contest( + namespaceName, + contestInterval, + winnerShares, + voteToken, + voterShare, + walletAddress, + exchangeToken, + ); + // @ts-expect-error StrictNullChecks + const eventLog = txReceipt.logs.find((log) => log.topics[0] == TOPIC_LOG); + const newContestAddress = this.web3.eth.abi.decodeParameters( + ['address', 'address', 'uint256', 'bool'], + // @ts-expect-error StrictNullChecks + eventLog.data.toString(), + )['0'] as string; + this.contractAddress = newContestAddress; + return newContestAddress; + } catch (error) { + throw new Error('Failed to initialize contest ' + error); + } + } + /** * Allows for deposit of contest token(ETH or ERC20) to contest * @param amount amount in ether to send to contest diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/NamespaceFactory.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/NamespaceFactory.ts index b42006c9949..8b1ae39aa8f 100644 --- a/packages/commonwealth/client/scripts/helpers/ContractHelpers/NamespaceFactory.ts +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/NamespaceFactory.ts @@ -218,6 +218,42 @@ class NamespaceFactory extends ContractBase { return txReceipt; } + async newERC20Contest( + namespaceName: string, + contestInterval: number, + winnerShares: number[], + voteToken: string, + voterShare: number, + walletAddress: string, + exchangeToken: string, + ): Promise { + if (!this.initialized || !this.walletEnabled) { + await this.initialize(true); + } + const maxFeePerGasEst = await this.estimateGas(); + let txReceipt; + try { + txReceipt = await this.contract.methods + .newSingleERC20Contest( + namespaceName, + contestInterval, + winnerShares, + voteToken, + voterShare, + exchangeToken, + ) + .send({ + from: walletAddress, + type: '0x2', + maxFeePerGas: maxFeePerGasEst?.toString(), + maxPriorityFeePerGas: this.web3.utils.toWei('0.001', 'gwei'), + }); + } catch { + throw new Error('Transaction failed'); + } + return txReceipt; + } + async getFeeManagerBalance( namespace: string, token?: string, From 98e510312a86ee21610575eb3926ae41bf765503 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 11 Oct 2024 00:49:26 +0500 Subject: [PATCH 111/425] Updated UI to show blocked action status on thread/comment actions if required conditions are not met by gated topic members --- .../client/scripts/helpers/threads.ts | 7 +++ .../client/scripts/hooks/useTopicGating.ts | 24 ++++++++ .../NewThreadFormLegacy/NewThreadForm.tsx | 35 ++++++++++- .../helpers/useNewThreadForm.ts | 4 ++ .../NewThreadFormModern/NewThreadForm.tsx | 32 +++++++++- .../helpers/useNewThreadForm.ts | 4 ++ .../CWContentPage/CWContentPage.tsx | 42 +++++++++++-- .../CWGatedTopicPermissionLevelBanner.tsx | 60 +++++++++++++++++++ .../index.ts | 3 + .../client/scripts/views/components/feed.tsx | 9 ++- .../pages/discussions/DiscussionsPage.tsx | 58 ++++++++++++++++-- .../views/pages/overview/TopicSummaryRow.tsx | 13 +++- .../pages/view_thread/ViewThreadPage.tsx | 16 ++++- 13 files changed, 288 insertions(+), 19 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/CWGatedTopicPermissionLevelBanner.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/index.ts diff --git a/packages/commonwealth/client/scripts/helpers/threads.ts b/packages/commonwealth/client/scripts/helpers/threads.ts index c12c00c6014..374c245b5ad 100644 --- a/packages/commonwealth/client/scripts/helpers/threads.ts +++ b/packages/commonwealth/client/scripts/helpers/threads.ts @@ -1,5 +1,7 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { re_weburl } from 'lib/url-validation'; import { Link, LinkSource } from 'models/Thread'; +import { TOPIC_PERMISSIONS } from '../views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants'; export function detectURL(str: string) { if (str.slice(0, 4) !== 'http') str = `http://${str}`; // no https required because this is only used for regex match @@ -55,11 +57,13 @@ export const getThreadActionTooltipText = ({ isThreadArchived = false, isThreadLocked = false, isThreadTopicGated = false, + threadTopicInteractionRestriction, }: { isCommunityMember?: boolean; isThreadArchived?: boolean; isThreadLocked?: boolean; isThreadTopicGated?: boolean; + threadTopicInteractionRestriction?: GroupTopicPermissionEnum; }): GetThreadActionTooltipTextResponse => { if (!isCommunityMember) { return getActionTooltipForNonCommunityMember; @@ -67,5 +71,8 @@ export const getThreadActionTooltipText = ({ if (isThreadArchived) return 'Thread is archived'; if (isThreadLocked) return 'Thread is locked'; if (isThreadTopicGated) return 'Topic is gated'; + if (threadTopicInteractionRestriction) { + return `Topic members are only allowed to ${TOPIC_PERMISSIONS[threadTopicInteractionRestriction]}`; + } return ''; }; diff --git a/packages/commonwealth/client/scripts/hooks/useTopicGating.ts b/packages/commonwealth/client/scripts/hooks/useTopicGating.ts index 78910c052d7..fa94050c3e1 100644 --- a/packages/commonwealth/client/scripts/hooks/useTopicGating.ts +++ b/packages/commonwealth/client/scripts/hooks/useTopicGating.ts @@ -1,6 +1,9 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { useRefreshMembershipQuery } from 'state/api/groups'; import Permissions from '../utils/Permissions'; +type TopicPermission = { id: number; permission: GroupTopicPermissionEnum }; + type IuseTopicGating = { communityId: string; apiEnabled: boolean; @@ -21,6 +24,21 @@ const useTopicGating = ({ apiEnabled, }); + const topicPermissions = memberships + .map((m) => m.topics) + .flat() + .reduce((acc, current) => { + const existing = acc.find((item) => item.id === current.id); + if (!existing) { + acc.push(current); + } else if (current.permission.length > existing.permission.length) { + // Replace with the current item if it has a longer permission string + const index = acc.indexOf(existing); + acc[index] = current; + } + return acc; + }, []); + const isTopicGated = !!(memberships || []).find((membership) => membership.topics.find((t) => t.id === topicId), ); @@ -35,14 +53,20 @@ const useTopicGating = ({ const isRestrictedMembership = !isAdmin && isTopicGated && !isActionAllowedInGatedTopic; + const foundTopicPermissions = topicPermissions.find( + (tp) => tp.id === topicId, + ); + return { memberships, isLoadingMemberships, + topicPermissions, ...(topicId && { // only return these fields if `topicId` is present, otherwise these values will be inaccurate isTopicGated, isActionAllowedInGatedTopic, isRestrictedMembership, + foundTopicPermissions, }), }; }; diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index d061e135868..3a1fe756e90 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -1,3 +1,4 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { buildCreateThreadInput } from 'client/scripts/state/api/threads/createThread'; import { useAuthModalStore } from 'client/scripts/state/ui/modals'; import { notifyError } from 'controllers/app/notifications'; @@ -29,6 +30,7 @@ import useAppStatus from '../../../hooks/useAppStatus'; import { ThreadKind, ThreadStage } from '../../../models/types'; import { CWText } from '../../components/component_kit/cw_text'; import { CWGatedTopicBanner } from '../component_kit/CWGatedTopicBanner'; +import { CWGatedTopicPermissionLevelBanner } from '../component_kit/CWGatedTopicPermissionLevelBanner'; import { CWSelectList } from '../component_kit/new_designs/CWSelectList'; import { ReactQuillEditor } from '../react_quill_editor'; import { @@ -80,6 +82,8 @@ export const NewThreadForm = () => { clearDraft, canShowGatingBanner, setCanShowGatingBanner, + canShowTopicPermissionBanner, + setCanShowTopicPermissionBanner, } = useNewThreadForm(communityId, topicsForSelector); const hasTopicOngoingContest = threadTopic?.activeContestManagers?.length > 0; @@ -106,7 +110,7 @@ export const NewThreadForm = () => { includeTopics: true, enabled: !!communityId, }); - const { isRestrictedMembership } = useTopicGating({ + const { isRestrictedMembership, foundTopicPermissions } = useTopicGating({ communityId, userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address && !!communityId, @@ -215,6 +219,12 @@ export const NewThreadForm = () => { const disabledActionsTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, isThreadTopicGated: isRestrictedMembership, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + ) + ? foundTopicPermissions?.permission + : undefined, }); const contestThreadBannerVisible = @@ -297,6 +307,7 @@ export const NewThreadForm = () => { } onChange={(topic) => { setCanShowGatingBanner(true); + setCanShowTopicPermissionBanner(true); setThreadTopic( // @ts-expect-error topicsForSelector.find((t) => `${t.id}` === topic.value), @@ -333,7 +344,11 @@ export const NewThreadForm = () => { { !user.activeAccount || isDisabledBecauseOfContestsConsent || walletBalanceError || - contestTopicError + contestTopicError || + !!disabledActionsTooltipText } // eslint-disable-next-line @typescript-eslint/no-misused-promises onClick={handleNewThreadCreation} @@ -398,6 +414,19 @@ export const NewThreadForm = () => { />
)} + + {canShowTopicPermissionBanner && + foundTopicPermissions && + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + ) && ( + setCanShowTopicPermissionBanner(false)} + /> + )}
diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/helpers/useNewThreadForm.ts b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/helpers/useNewThreadForm.ts index c1784d23d2c..5911f7035b4 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/helpers/useNewThreadForm.ts +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/helpers/useNewThreadForm.ts @@ -21,6 +21,8 @@ const useNewThreadForm = (communityId: string, topicsForSelector: Topic[]) => { `new-thread-${communityId}-info`, ); const [canShowGatingBanner, setCanShowGatingBanner] = useState(true); + const [canShowTopicPermissionBanner, setCanShowTopicPermissionBanner] = + useState(true); // get restored draft on init const restoredDraft: NewThreadDraft | null = useMemo(() => { @@ -116,6 +118,8 @@ const useNewThreadForm = (communityId: string, topicsForSelector: Topic[]) => { clearDraft, canShowGatingBanner, setCanShowGatingBanner, + canShowTopicPermissionBanner, + setCanShowTopicPermissionBanner, }; }; diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index f8507a21666..334b3fcf230 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -1,3 +1,4 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { buildCreateThreadInput } from 'client/scripts/state/api/threads/createThread'; import { useAuthModalStore } from 'client/scripts/state/ui/modals'; import { notifyError } from 'controllers/app/notifications'; @@ -31,6 +32,7 @@ import useAppStatus from '../../../hooks/useAppStatus'; import { ThreadKind, ThreadStage } from '../../../models/types'; import { CWText } from '../../components/component_kit/cw_text'; import { CWGatedTopicBanner } from '../component_kit/CWGatedTopicBanner'; +import { CWGatedTopicPermissionLevelBanner } from '../component_kit/CWGatedTopicPermissionLevelBanner'; import { CWSelectList } from '../component_kit/new_designs/CWSelectList'; import ContestThreadBanner from './ContestThreadBanner'; import ContestTopicBanner from './ContestTopicBanner'; @@ -77,6 +79,8 @@ export const NewThreadForm = () => { clearDraft, canShowGatingBanner, setCanShowGatingBanner, + canShowTopicPermissionBanner, + setCanShowTopicPermissionBanner, } = useNewThreadForm(communityId, topicsForSelector); const hasTopicOngoingContest = threadTopic?.activeContestManagers?.length > 0; @@ -103,7 +107,7 @@ export const NewThreadForm = () => { includeTopics: true, enabled: !!communityId, }); - const { isRestrictedMembership } = useTopicGating({ + const { isRestrictedMembership, foundTopicPermissions } = useTopicGating({ communityId, userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address && !!communityId, @@ -199,6 +203,12 @@ export const NewThreadForm = () => { const disabledActionsTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, isThreadTopicGated: isRestrictedMembership, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + ) + ? foundTopicPermissions?.permission + : undefined, }); const contestThreadBannerVisible = @@ -319,7 +329,11 @@ export const NewThreadForm = () => { (markdownEditorMethodsRef.current = methods) } onChange={(markdown) => setEditorText(markdown)} - disabled={isRestrictedMembership || !user.activeAccount} + disabled={ + isRestrictedMembership || + !!disabledActionsTooltipText || + !user.activeAccount + } tooltip={ typeof disabledActionsTooltipText === 'function' ? disabledActionsTooltipText?.('submit') @@ -332,6 +346,7 @@ export const NewThreadForm = () => { disabled={ isDisabled || !user.activeAccount || + !!disabledActionsTooltipText || isDisabledBecauseOfContestsConsent || walletBalanceError || contestTopicError @@ -373,6 +388,19 @@ export const NewThreadForm = () => { />
)} + + {canShowTopicPermissionBanner && + foundTopicPermissions && + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + ) && ( + setCanShowTopicPermissionBanner(false)} + /> + )}
diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts index 7bef182947f..8931bfd4d10 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts @@ -20,6 +20,8 @@ const useNewThreadForm = (communityId: string, topicsForSelector: Topic[]) => { { keyVersion: 'v3' }, ); const [canShowGatingBanner, setCanShowGatingBanner] = useState(true); + const [canShowTopicPermissionBanner, setCanShowTopicPermissionBanner] = + useState(true); // get restored draft on init const restoredDraft: NewThreadDraft | null = useMemo(() => { @@ -113,6 +115,8 @@ const useNewThreadForm = (communityId: string, topicsForSelector: Topic[]) => { clearDraft, canShowGatingBanner, setCanShowGatingBanner, + canShowTopicPermissionBanner, + setCanShowTopicPermissionBanner, }; }; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx index 4df91a19cf7..45bd2e76b73 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx @@ -1,3 +1,4 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { getThreadActionTooltipText } from 'helpers/threads'; import { truncate } from 'helpers/truncate'; import useTopicGating from 'hooks/useTopicGating'; @@ -125,7 +126,7 @@ export const CWContentPage = ({ const communityId = app.activeChainId() || ''; - const { isRestrictedMembership } = useTopicGating({ + const { isRestrictedMembership, foundTopicPermissions } = useTopicGating({ communityId, userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address && !!communityId, @@ -209,6 +210,27 @@ export const CWContentPage = ({ isThreadTopicGated: isRestrictedMembership, }); + const disabledReactPermissionTooltipText = getThreadActionTooltipText({ + isCommunityMember: !!user.activeAccount, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE, + ) + ? foundTopicPermissions?.permission + : undefined, + }); + + const disabledCommentPermissionTooltipText = getThreadActionTooltipText({ + isCommunityMember: !!user.activeAccount, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, + ) + ? foundTopicPermissions?.permission + : undefined, + }); + console.log('disabledActionsTooltipText => ', disabledActionsTooltipText); + const mainBody = (
@@ -245,10 +267,22 @@ export const CWContentPage = ({ onEditStart={onEditStart} canUpdateThread={canUpdateThread} hasPendingEdits={hasPendingEdits} - canReact={!disabledActionsTooltipText} - canComment={!disabledActionsTooltipText} + canReact={ + disabledReactPermissionTooltipText + ? !disabledReactPermissionTooltipText + : !disabledActionsTooltipText + } + canComment={ + disabledCommentPermissionTooltipText + ? !disabledCommentPermissionTooltipText + : !disabledActionsTooltipText + } onProposalStageChange={onProposalStageChange} - disabledActionsTooltipText={disabledActionsTooltipText} + disabledActionsTooltipText={ + disabledReactPermissionTooltipText || + disabledCommentPermissionTooltipText || + disabledActionsTooltipText + } onSnapshotProposalFromThread={onSnapshotProposalFromThread} setIsUpvoteDrawerOpen={setIsUpvoteDrawerOpen} shareEndpoint={`${window.location.origin}${window.location.pathname}`} diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/CWGatedTopicPermissionLevelBanner.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/CWGatedTopicPermissionLevelBanner.tsx new file mode 100644 index 00000000000..9ecdce4349c --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/CWGatedTopicPermissionLevelBanner.tsx @@ -0,0 +1,60 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; +import { useCommonNavigate } from 'navigation/helpers'; +import React from 'react'; +import { TOPIC_PERMISSIONS } from 'views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants'; +import { + MixpanelClickthroughEvent, + MixpanelClickthroughPayload, +} from '../../../../../../shared/analytics/types'; +import useAppStatus from '../../../../hooks/useAppStatus'; +import CWBanner from '../new_designs/CWBanner'; + +interface CWGatedTopicPermissionLevelBannerProps { + onClose: () => void; + topicPermission: GroupTopicPermissionEnum; +} + +const CWGatedTopicPermissionLevelBanner = ({ + onClose = () => {}, + topicPermission, +}: CWGatedTopicPermissionLevelBannerProps) => { + const navigate = useCommonNavigate(); + + const { isAddedToHomeScreen } = useAppStatus(); + + const { trackAnalytics } = + useBrowserAnalyticsTrack({ + onAction: true, + }); + + return ( + { + trackAnalytics({ + event: MixpanelClickthroughEvent.VIEW_THREAD_TO_MEMBERS_PAGE, + isPWA: isAddedToHomeScreen, + }); + navigate('/members?tab=groups'); + }, + }, + { + label: 'Learn more about gating', + onClick: () => + window.open( + `https://blog.commonwealth.im/introducing-common-groups/`, + ), + }, + ]} + onClose={onClose} + /> + ); +}; + +export default CWGatedTopicPermissionLevelBanner; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/index.ts b/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/index.ts new file mode 100644 index 00000000000..d3b7f6d1cbb --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/index.ts @@ -0,0 +1,3 @@ +import CWGatedTopicPermissionLevelBanner from './CWGatedTopicPermissionLevelBanner'; + +export { CWGatedTopicPermissionLevelBanner }; diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index acd1d9af37e..e047e63a98d 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -6,6 +6,7 @@ import 'components/feed.scss'; import { PageNotFound } from '../pages/404'; import { UserDashboardRowSkeleton } from '../pages/user_dashboard/user_dashboard_row'; +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { slugify } from '@hicommonwealth/shared'; import { getThreadActionTooltipText } from 'helpers/threads'; import useTopicGating from 'hooks/useTopicGating'; @@ -54,7 +55,7 @@ const FeedThread = ({ thread }: { thread: Thread }) => { (a) => a?.community?.id === thread?.communityId, ); - const { isRestrictedMembership } = useTopicGating({ + const { isRestrictedMembership, foundTopicPermissions } = useTopicGating({ communityId: thread.communityId, userAddress: account?.address || '', apiEnabled: !!account?.address && !!thread.communityId, @@ -66,6 +67,12 @@ const FeedThread = ({ thread }: { thread: Thread }) => { isThreadArchived: !!thread?.archivedAt, isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, // on this page we only show comment option + ) + ? foundTopicPermissions?.permission + : undefined, }); // edge case for deleted communities with orphaned posts diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index b260723879d..598e0018772 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -1,4 +1,7 @@ -import { TopicWeightedVoting } from '@hicommonwealth/schemas'; +import { + GroupTopicPermissionEnum, + TopicWeightedVoting, +} from '@hicommonwealth/schemas'; import { getProposalUrlPath } from 'identifiers'; import { getScopePrefix, useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useRef, useState } from 'react'; @@ -91,7 +94,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { const user = useUserStore(); - const { memberships } = useTopicGating({ + const { memberships, topicPermissions } = useTopicGating({ communityId: communityId, userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address && !!communityId, @@ -222,13 +225,46 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { const isRestrictedMembership = !isAdmin && isTopicGated && !isActionAllowedInGatedTopic; + const foundTopicPermissions = topicPermissions.find( + (tp) => tp.id === thread.topic.id, + ); + const disabledActionsTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, isThreadArchived: !!thread?.archivedAt, isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE, + ) + ? foundTopicPermissions?.permission + : undefined, }); + const disabledReactPermissionTooltipText = getThreadActionTooltipText( + { + isCommunityMember: !!user.activeAccount, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE, + ) + ? foundTopicPermissions?.permission + : undefined, + }, + ); + + const disabledCommentPermissionTooltipText = + getThreadActionTooltipText({ + isCommunityMember: !!user.activeAccount, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, + ) + ? foundTopicPermissions?.permission + : undefined, + }); + const isThreadTopicInContest = checkIsTopicInContest( contestsData, thread?.topic?.id, @@ -238,8 +274,16 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { navigate(`${discussionLink}`)} onStageTagClick={() => { navigate(`/discussions?stage=${thread.stage}`); @@ -254,7 +298,11 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { onCommentBtnClick={() => navigate(`${discussionLink}?focusComments=true`) } - disabledActionsTooltipText={disabledActionsTooltipText} + disabledActionsTooltipText={ + disabledCommentPermissionTooltipText || + disabledReactPermissionTooltipText || + disabledActionsTooltipText + } hideRecentComments editingDisabled={isThreadTopicInContest} /> diff --git a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx index 7551611599d..815ee7f2508 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx @@ -1,3 +1,4 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { slugify } from '@hicommonwealth/shared'; import { getThreadActionTooltipText } from 'helpers/threads'; import useTopicGating from 'hooks/useTopicGating'; @@ -32,7 +33,7 @@ export const TopicSummaryRow = ({ const communityId = app.activeChainId() || ''; - const { memberships } = useTopicGating({ + const { memberships, topicPermissions } = useTopicGating({ communityId, userAddress: user.activeAccount?.address || '', apiEnabled: !!user.activeAccount?.address || !!communityId, @@ -106,6 +107,10 @@ export const TopicSummaryRow = ({ const isRestrictedMembership = !isAdmin && isTopicGated && !isActionAllowedInGatedTopic; + const foundTopicPermissions = topicPermissions.find( + (tp) => tp.id === thread.topic.id, + ); + const disabledActionsTooltipText = getThreadActionTooltipText({ isCommunityMember: Permissions.isCommunityMember( thread.communityId, @@ -113,6 +118,12 @@ export const TopicSummaryRow = ({ isThreadArchived: !!thread?.archivedAt, isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, // on this page we only show comment option + ) + ? foundTopicPermissions?.permission + : undefined, }); return ( diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index b0330aabbdc..e36cf0f454d 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -1,3 +1,4 @@ +import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; import { ContentType, getThreadUrl } from '@hicommonwealth/shared'; import { notifyError } from 'controllers/app/notifications'; import { extractDomain, isDefaultStage } from 'helpers'; @@ -140,7 +141,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { threadId: parseInt(threadId), }); - const { isRestrictedMembership } = useTopicGating({ + const { isRestrictedMembership, foundTopicPermissions } = useTopicGating({ communityId, apiEnabled: !!user?.activeAccount?.address && !!communityId, userAddress: user?.activeAccount?.address || '', @@ -256,8 +257,6 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { // @ts-expect-error const hasWebLinks = thread.links.find((x) => x.source === 'web'); - const canComment = !!user.activeAccount && !isRestrictedMembership; - const handleNewSnapshotChange = async ({ id, snapshot_title, @@ -332,8 +331,19 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { isThreadArchived: !!thread?.archivedAt, isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, + threadTopicInteractionRestriction: + !foundTopicPermissions?.permission?.includes( + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, + ) + ? foundTopicPermissions?.permission + : undefined, }); + const canComment = + !!user.activeAccount && + !isRestrictedMembership && + !disabledActionsTooltipText; + const getMetaDescription = (meta: string) => { try { const parsedMeta = JSON.parse(meta); From a285377a894be8c1467399fc9dddea952e4707ee Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Fri, 11 Oct 2024 01:47:04 +0500 Subject: [PATCH 112/425] made the Discussion clickable and navigate to discussionAll --- .../component_kit/cw_breadcrumbs.tsx | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_breadcrumbs.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/cw_breadcrumbs.tsx index 33fc586ad32..dcda32e35cc 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_breadcrumbs.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_breadcrumbs.tsx @@ -20,6 +20,21 @@ type BreadcrumbsProps = { tooltipStr?: string; }; +const handleNavigation = (label, navigate, isParent) => { + if (label === 'Discussions' && isParent) { + navigate(`/discussions`); + } +}; +const handleMouseInteraction = ( + label: string, + handleInteraction: (event: React.MouseEvent) => void, + event: React.MouseEvent, +) => { + if (label !== 'Discussions') { + handleInteraction(event); + } +}; + export const CWBreadcrumbs = ({ breadcrumbs, tooltipStr, @@ -36,14 +51,19 @@ export const CWBreadcrumbs = ({ placement="bottom" renderTrigger={(handleInteraction) => ( + handleMouseInteraction(label, handleInteraction, event) + } + onMouseLeave={(event) => + handleMouseInteraction(label, handleInteraction, event) + } type="caption" className={clsx({ 'disable-active-cursor': index === 0, 'current-text': isCurrent, 'parent-text': !isCurrent, })} + onClick={() => handleNavigation(label, navigate, isParent)} > {truncateText(label)} From 5c30a685cd8ff8b4d6bb00deddd59f9694c8cc33 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 10 Oct 2024 16:49:05 -0400 Subject: [PATCH 113/425] add activity queries --- common_knowledge/Caching.md | 4 +- common_knowledge/Performance-Benchmarks.md | 2 +- .../model/src/feed/GetGlobalActivity.query.ts | 7 +- libs/model/src/feed/GetUserActivity.query.ts | 12 ++ libs/model/src/feed/index.ts | 2 +- libs/model/src/globalActivityCache.ts | 43 +++---- .../GetThreads.query.ts} | 32 ++--- libs/model/src/thread/index.ts | 1 + libs/schemas/src/queries/feed.schemas.ts | 117 +++++++----------- libs/schemas/src/queries/thread.schemas.ts | 49 ++++++++ .../client/scripts/models/Thread.ts | 2 +- .../client/scripts/state/api/config.ts | 2 - .../state/api/feeds/fetchGlobalActivity.ts | 18 +-- .../state/api/feeds/fetchUserActivity.ts | 22 +--- .../client/scripts/views/components/feed.tsx | 91 ++++++++++++-- packages/commonwealth/main.ts | 2 +- .../server/api/external-router.ts | 7 +- packages/commonwealth/server/api/feed.ts | 1 + packages/commonwealth/server/api/threads.ts | 9 +- packages/commonwealth/server/routes/feed.ts | 16 +-- .../routes/threads/get_threads_handler.ts | 10 +- .../server/routes/viewUserActivity.ts | 22 ---- .../commonwealth/server/routing/router.ts | 8 -- .../integration/api/userDashboard.spec.ts | 14 ++- packages/load-testing/test/api/feed.spec.ts | 10 +- .../test/util/apiRequests/feed.ts | 8 +- 26 files changed, 275 insertions(+), 236 deletions(-) create mode 100644 libs/model/src/feed/GetUserActivity.query.ts rename libs/model/src/{feed/GetUserFeed.query.ts => thread/GetThreads.query.ts} (94%) delete mode 100644 packages/commonwealth/server/routes/viewUserActivity.ts diff --git a/common_knowledge/Caching.md b/common_knowledge/Caching.md index e30472dbb1b..24a92a08553 100644 --- a/common_knowledge/Caching.md +++ b/common_knowledge/Caching.md @@ -40,8 +40,8 @@ _"There are only two hard things in Computer Science: cache invalidation and nam - Choosing a right TTL could be very important, as app data is highly transactional - **Caching Namespace:** - - Global - eg. /api/viewGlobalActivity - - User Specific - eg. /api/viewUserActivity or /api/status + - Global - eg. /api/internal/trpc/feed.GetGlobalActivity + - User Specific - eg. /api/internal/trpc/feed.GetUserActivity or /api/status - **Hybrid Request Handler** -> Fetch followed by tracking of user activity eg. get chain data & record current chain selected by user - these kind of request handler can only utilize sequelize result caching diff --git a/common_knowledge/Performance-Benchmarks.md b/common_knowledge/Performance-Benchmarks.md index 6af6d3ace8a..2034fa3378b 100644 --- a/common_knowledge/Performance-Benchmarks.md +++ b/common_knowledge/Performance-Benchmarks.md @@ -39,7 +39,7 @@ _See also full [Datadog](./Datadog.md) entry._ We've implemented two new performance dashboards to monitor and track improvements in latency and call volume over time. -These dashboards serve a key role in prioritizing improvements by highlighting high call volume and slow endpoints. They are instrumental in monitoring the effect of improvements over time, as shown by specific examples corresponding to PRs like `getAddressProfile` larger batches and performance enhancements in backend API calls such as `/viewUserActivity` and `/status`. Additionally, they can effectively detect abnormal spikes in latency and call volume through real-time metrics reported to Datadog. +These dashboards serve a key role in prioritizing improvements by highlighting high call volume and slow endpoints. They are instrumental in monitoring the effect of improvements over time, as shown by specific examples corresponding to PRs like `getAddressProfile` larger batches and performance enhancements in backend API calls such as `/feed.GetUserActivity` and `/status`. Additionally, they can effectively detect abnormal spikes in latency and call volume through real-time metrics reported to Datadog. ## Change Log diff --git a/libs/model/src/feed/GetGlobalActivity.query.ts b/libs/model/src/feed/GetGlobalActivity.query.ts index 9e544059483..d31859dfad3 100644 --- a/libs/model/src/feed/GetGlobalActivity.query.ts +++ b/libs/model/src/feed/GetGlobalActivity.query.ts @@ -1,15 +1,14 @@ import { Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { models } from '../database'; import { GlobalActivityCache } from '../globalActivityCache'; -export function GetGlobalActivity(): Query { +export function GetGlobalActivity(): Query { return { - ...schemas.ThreadFeed, + ...schemas.ActivityFeed, auth: [], secure: false, body: async () => { - return await GlobalActivityCache.getInstance(models).getGlobalActivity(); + return await GlobalActivityCache.getInstance().getGlobalActivity(); }, }; } diff --git a/libs/model/src/feed/GetUserActivity.query.ts b/libs/model/src/feed/GetUserActivity.query.ts new file mode 100644 index 00000000000..ca6eb09abc0 --- /dev/null +++ b/libs/model/src/feed/GetUserActivity.query.ts @@ -0,0 +1,12 @@ +import { Query } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { getUserActivityFeed } from '../globalActivityCache'; + +export function GetUserActivity(): Query { + return { + ...schemas.ActivityFeed, + auth: [], + secure: false, + body: async ({ actor }) => await getUserActivityFeed(actor.user.id), + }; +} diff --git a/libs/model/src/feed/index.ts b/libs/model/src/feed/index.ts index 0479874ed96..609ae5a4e53 100644 --- a/libs/model/src/feed/index.ts +++ b/libs/model/src/feed/index.ts @@ -1,2 +1,2 @@ export * from './GetGlobalActivity.query'; -export * from './GetUserFeed.query'; +export * from './GetUserActivity.query'; diff --git a/libs/model/src/globalActivityCache.ts b/libs/model/src/globalActivityCache.ts index 9fcd3b13854..13c23594b51 100644 --- a/libs/model/src/globalActivityCache.ts +++ b/libs/model/src/globalActivityCache.ts @@ -1,20 +1,22 @@ import { CacheNamespaces, cache, logger } from '@hicommonwealth/core'; +import { ActivityFeedRecord } from '@hicommonwealth/schemas'; import { QueryTypes } from 'sequelize'; import { v4 as uuidv4 } from 'uuid'; -import { DB } from './models/index'; +import { z } from 'zod'; +import { models } from './database'; -export async function getActivityFeed(models: DB, id = 0) { +export async function getUserActivityFeed(user_id?: number) { /** * Last 50 updated threads and their comments */ const query = ` WITH - user_communities AS (SELECT DISTINCT community_id FROM "Addresses" WHERE user_id = :id), + user_communities AS (SELECT DISTINCT community_id FROM "Addresses" WHERE user_id = :user_id), top_threads AS ( SELECT T.* FROM "Threads" T ${ - id > 0 + user_id ? 'JOIN user_communities UC ON UC.community_id = T.community_id' : '' } @@ -54,7 +56,7 @@ export async function getActivityFeed(models: DB, id = 0) { JOIN "Addresses" A ON A.id = T.address_id AND A.community_id = T.community_id JOIN "Users" U ON U.id = A.user_id JOIN "Topics" Tp ON Tp.id = T.topic_id - ${id > 0 ? 'WHERE U.id != :id' : ''}), + ${user_id ? 'WHERE U.id != :user_id' : ''}), recent_comments AS ( -- get the recent comments data associated with the thread SELECT C.thread_id as thread_id, @@ -70,7 +72,7 @@ export async function getActivityFeed(models: DB, id = 0) { 'profile_name', U.profile->>'name', 'profile_avatar_url', U.profile->>'avatar_url', 'user_id', U.id - ))) as "recentComments" + ))) as recent_comments FROM ( Select tempC.* FROM "Comments" tempC @@ -84,8 +86,8 @@ export async function getActivityFeed(models: DB, id = 0) { GROUP BY C.thread_id ) SELECT - RTS."thread" as thread, - RC."recentComments" as recentComments + RTS.thread, + RC.recent_comments FROM ranked_threads RTS LEFT JOIN recent_comments RC ON RTS.thread_id = RC.thread_id @@ -93,14 +95,14 @@ export async function getActivityFeed(models: DB, id = 0) { RTS.activity_rank_date DESC NULLS LAST; `; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const threads: any = await models.sequelize.query(query, { - type: QueryTypes.SELECT, - raw: true, - replacements: { id }, - }); - - return threads; + return await models.sequelize.query>( + query, + { + type: QueryTypes.SELECT, + raw: true, + replacements: { user_id }, + }, + ); } const log = logger(import.meta); @@ -111,13 +113,12 @@ export class GlobalActivityCache { private static _instance: GlobalActivityCache; constructor( - private _models: DB, private _cacheTTL: number = 60 * 5, // cache TTL in seconds ) {} - static getInstance(models: DB, cacheTTL?: number): GlobalActivityCache { + static getInstance(cacheTTL?: number): GlobalActivityCache { if (!GlobalActivityCache._instance) { - GlobalActivityCache._instance = new GlobalActivityCache(models, cacheTTL); + GlobalActivityCache._instance = new GlobalActivityCache(cacheTTL); } return GlobalActivityCache._instance; } @@ -139,7 +140,7 @@ export class GlobalActivityCache { const msg = 'Failed to fetch global activity from Redis'; log.error(msg); } - return await getActivityFeed(this._models); + return await getUserActivityFeed(); } return JSON.parse(activity); } @@ -193,7 +194,7 @@ export class GlobalActivityCache { return; } - const activity = await getActivityFeed(this._models); + const activity = await getUserActivityFeed(); const result = await cache().setKey( CacheNamespaces.Activity_Cache, this._cacheKey, diff --git a/libs/model/src/feed/GetUserFeed.query.ts b/libs/model/src/thread/GetThreads.query.ts similarity index 94% rename from libs/model/src/feed/GetUserFeed.query.ts rename to libs/model/src/thread/GetThreads.query.ts index 9f5416a9bf9..4dec6a5e434 100644 --- a/libs/model/src/feed/GetUserFeed.query.ts +++ b/libs/model/src/thread/GetThreads.query.ts @@ -1,13 +1,13 @@ -import { InvalidInput, Query, ServerError } from '@hicommonwealth/core'; +import { InvalidInput, Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; import moment from 'moment'; import { QueryTypes } from 'sequelize'; import { z } from 'zod'; import { models } from '../database'; -export function GetUserFeed(): Query { +export function GetThreads(): Query { return { - ...schemas.GetUserFeed, + ...schemas.GetThreads, auth: [], secure: false, body: async ({ payload }) => { @@ -250,23 +250,17 @@ export function GetUserFeed(): Query { }, }); - try { - const [threads, numVotingThreads] = await Promise.all([ - responseThreadsQuery, - numVotingThreadsQuery, - ]); - console.log(threads); + const [threads, numVotingThreads] = await Promise.all([ + responseThreadsQuery, + numVotingThreadsQuery, + ]); - return { - limit: replacements.limit, - page: replacements.page, - // data params - threads, - numVotingThreads, - }; - } catch (e) { - throw new ServerError('Could not fetch threads', e as Error); - } + return { + limit: replacements.limit, + page: replacements.page, + threads, + numVotingThreads, + }; }, }; } diff --git a/libs/model/src/thread/index.ts b/libs/model/src/thread/index.ts index 12dce0fb2fd..b29d9c54a60 100644 --- a/libs/model/src/thread/index.ts +++ b/libs/model/src/thread/index.ts @@ -2,4 +2,5 @@ export * from './CreateThread.command'; export * from './CreateThreadReaction.command'; export * from './DeleteThread.command'; export * from './GetThread.query'; +export * from './GetThreads.query'; export * from './UpdateThread.command'; diff --git a/libs/schemas/src/queries/feed.schemas.ts b/libs/schemas/src/queries/feed.schemas.ts index 2a206406c99..96e7c406ca3 100644 --- a/libs/schemas/src/queries/feed.schemas.ts +++ b/libs/schemas/src/queries/feed.schemas.ts @@ -1,29 +1,56 @@ import { z } from 'zod'; -import { Thread } from '../entities'; -import { PG_INT } from '../utils'; +import { DiscordMetaSchema, PG_INT } from '../utils'; -export const ThreadFeedRecord = z.object({ - thread_id: PG_INT, - last_activity: z.coerce.string(), - notification_data: z.string(), - category_id: z.string(), - comment_count: PG_INT, - commenters: z.array( - z.object({ - Addresses: z.array( - z.object({ - id: PG_INT, - address: z.string(), - community_id: z.string(), - }), - ), - }), - ), +export const ActivityThread = z.object({ + id: PG_INT, + community_id: z.string(), + body: z.string(), + title: z.string(), + numberOfComments: PG_INT, + created_at: z.string().nullish(), + updated_at: z.string().nullish(), + deleted_at: z.string().nullish(), + locked_at: z.string().nullish(), + kind: z.string(), + stage: z.string(), + archived_at: z.string().nullish(), + read_only: z.boolean(), + has_poll: z.boolean().nullish(), + marked_as_spam_at: z.string().nullish(), + discord_meta: DiscordMetaSchema.nullish(), + profile_name: z.string().nullish(), + profile_avatar: z.string().nullish(), + user_id: PG_INT, + user_address: z.string(), + topic: z.object({ + id: PG_INT, + name: z.string(), + description: z.string(), + }), +}); + +export const ActivityComment = z.object({ + id: PG_INT, + address: z.string(), + text: z.string(), + created_at: z.string(), + updated_at: z.string().nullish(), + deleted_at: z.string().nullish(), + marked_as_spam_at: z.string().nullish(), + discord_meta: DiscordMetaSchema.nullish(), + profile_name: z.string().nullish(), + profile_avatar_url: z.string().nullish(), + user_id: z.number().nullish(), }); -export const ThreadFeed = { +export const ActivityFeedRecord = z.object({ + thread: ActivityThread, + recent_comments: z.array(ActivityComment).nullish(), +}); + +export const ActivityFeed = { input: z.object({}), - output: z.array(ThreadFeedRecord), + output: z.array(ActivityFeedRecord), }; export const ChainFeedRecord = z.object({ @@ -40,51 +67,3 @@ export const ChainFeed = { input: z.object({}), output: z.array(ChainFeedRecord), }; - -export const MappedReaction = z.object({ - id: z.number(), - type: z.literal('like'), - address: z.string(), - updated_at: z.date(), - voting_weight: z.number(), - profile_name: z.string().optional(), - avatar_url: z.string().optional(), - last_active: z.date().optional(), -}); - -export const MappedThread = Thread.extend({ - associatedReactions: z.array(MappedReaction), -}); - -export const GetUserFeedStatus = z.enum(['active', 'pastWinners', 'all']); -export const GetUserFeedOrderBy = z.enum([ - 'newest', - 'oldest', - 'mostLikes', - 'mostComments', - 'latestActivity', -]); - -export const GetUserFeed = { - input: z.object({ - community_id: z.string(), - page: z.number().optional(), - limit: z.number().optional(), - stage: z.string().optional(), - topic_id: PG_INT.optional(), - includePinnedThreads: z.boolean().optional(), - order_by: GetUserFeedOrderBy.optional(), - from_date: z.string().optional(), - to_date: z.string().optional(), - archived: z.boolean().optional(), - contestAddress: z.string().optional(), - status: GetUserFeedStatus.optional(), - withXRecentComments: z.number().optional(), - }), - output: z.object({ - page: z.number(), - limit: z.number(), - numVotingThreads: z.number(), - threads: z.array(MappedThread), - }), -}; diff --git a/libs/schemas/src/queries/thread.schemas.ts b/libs/schemas/src/queries/thread.schemas.ts index 2fa4e3c6880..c67d3defff4 100644 --- a/libs/schemas/src/queries/thread.schemas.ts +++ b/libs/schemas/src/queries/thread.schemas.ts @@ -1,4 +1,5 @@ import { z } from 'zod'; +import { Thread } from '../entities'; import { DiscordMetaSchema, linksSchema, @@ -90,3 +91,51 @@ export const GetBulkThreads = { threads: z.array(BulkThread), }), }; + +export const MappedReaction = z.object({ + id: z.number(), + type: z.literal('like'), + address: z.string(), + updated_at: z.date(), + voting_weight: z.number(), + profile_name: z.string().optional(), + avatar_url: z.string().optional(), + last_active: z.date().optional(), +}); + +export const MappedThread = Thread.extend({ + associatedReactions: z.array(MappedReaction), +}); + +export const GetThreadsStatus = z.enum(['active', 'pastWinners', 'all']); +export const GetThreadsOrderBy = z.enum([ + 'newest', + 'oldest', + 'mostLikes', + 'mostComments', + 'latestActivity', +]); + +export const GetThreads = { + input: z.object({ + community_id: z.string(), + page: z.number().optional(), + limit: z.number().optional(), + stage: z.string().optional(), + topic_id: PG_INT.optional(), + includePinnedThreads: z.boolean().optional(), + order_by: GetThreadsOrderBy.optional(), + from_date: z.string().optional(), + to_date: z.string().optional(), + archived: z.boolean().optional(), + contestAddress: z.string().optional(), + status: GetThreadsStatus.optional(), + withXRecentComments: z.number().optional(), + }), + output: z.object({ + page: z.number(), + limit: z.number(), + numVotingThreads: z.number(), + threads: z.array(MappedThread), + }), +}; diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index f71aae713b4..7fa32425107 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -191,7 +191,7 @@ export type AssociatedContest = { contest_interval: number; }; -type RecentComment = { +export type RecentComment = { id: number; address: string; text: string; diff --git a/packages/commonwealth/client/scripts/state/api/config.ts b/packages/commonwealth/client/scripts/state/api/config.ts index e5f90d699a1..40e91f003dd 100644 --- a/packages/commonwealth/client/scripts/state/api/config.ts +++ b/packages/commonwealth/client/scripts/state/api/config.ts @@ -36,8 +36,6 @@ export const ApiEndpoints = { searchProfiles: (searchTerm: string) => `/profiles?search=${searchTerm}`, searchChains: (searchTerm: string) => `/communities?search=${searchTerm}`, VIEW_COUNT: '/viewCount', - FETCH_USER_ACTIVITY: '/viewUserActivity', - FETCH_GLOBAL_ACTIVITY: '/viewGlobalActivity', }; export const ContractMethods = { diff --git a/packages/commonwealth/client/scripts/state/api/feeds/fetchGlobalActivity.ts b/packages/commonwealth/client/scripts/state/api/feeds/fetchGlobalActivity.ts index 1a56800b5de..c77dc7b80dd 100644 --- a/packages/commonwealth/client/scripts/state/api/feeds/fetchGlobalActivity.ts +++ b/packages/commonwealth/client/scripts/state/api/feeds/fetchGlobalActivity.ts @@ -1,28 +1,14 @@ -import { useQuery } from '@tanstack/react-query'; -import axios from 'axios'; -import Thread from 'models/Thread'; -import { ApiEndpoints, SERVER_URL } from 'state/api/config'; -import { formatActivityResponse } from './util'; +import { trpc } from 'client/scripts/utils/trpcClient'; const USER_ACTIVITY_STALE_TIME = 5 * 60 * 1_000; // 5 minutes (backend caches for 5 minutes as well) const USER_ACTIVITY_CACHE_TIME = 5 * 60 * 1_000; // 5 minutes -const fetchGlobalActivity = async (): Promise => { - const response = await axios.post( - `${SERVER_URL}/${ApiEndpoints.FETCH_GLOBAL_ACTIVITY}`, - ); - - return formatActivityResponse(response); -}; - const useFetchGlobalActivityQuery = ({ apiEnabled, }: { apiEnabled: boolean; }) => { - return useQuery({ - queryKey: [ApiEndpoints.FETCH_GLOBAL_ACTIVITY], - queryFn: () => fetchGlobalActivity(), + return trpc.feed.getGlobalActivity.useQuery({ staleTime: USER_ACTIVITY_STALE_TIME, cacheTime: USER_ACTIVITY_CACHE_TIME, enabled: apiEnabled, diff --git a/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts b/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts index d3ee5af7edd..11c93173530 100644 --- a/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts +++ b/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts @@ -1,28 +1,10 @@ -import { useQuery } from '@tanstack/react-query'; -import axios from 'axios'; -import Thread from 'models/Thread'; -import { ApiEndpoints, SERVER_URL } from 'state/api/config'; -import { userStore } from 'state/ui/user'; -import { formatActivityResponse } from './util'; +import { trpc } from 'client/scripts/utils/trpcClient'; const USER_ACTIVITY_STALE_TIME = 60 * 1_000; // 1 minute const USER_ACTIVITY_CACHE_TIME = 5 * 60 * 1_000; // 5 minutes -const fetchUserActivity = async (): Promise => { - const response = await axios.post( - `${SERVER_URL}/${ApiEndpoints.FETCH_USER_ACTIVITY}`, - { - jwt: userStore.getState().jwt, - }, - ); - - return formatActivityResponse(response); -}; - const useFetchUserActivityQuery = ({ apiEnabled }: { apiEnabled: boolean }) => { - return useQuery({ - queryKey: [ApiEndpoints.FETCH_USER_ACTIVITY], - queryFn: () => fetchUserActivity(), + return trpc.feed.getUserActivity.useQuery({ staleTime: USER_ACTIVITY_STALE_TIME, cacheTime: USER_ACTIVITY_CACHE_TIME, enabled: apiEnabled, diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 43416e4208e..a846b6bcb25 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -3,13 +3,13 @@ import { Virtuoso } from 'react-virtuoso'; import 'components/feed.scss'; -import { PageNotFound } from '../pages/404'; -import { UserDashboardRowSkeleton } from '../pages/user_dashboard/user_dashboard_row'; - +import { ActivityComment, ActivityFeedRecord } from '@hicommonwealth/schemas'; import { slugify } from '@hicommonwealth/shared'; +import { Thread, type RecentComment } from 'client/scripts/models/Thread'; +import Topic from 'client/scripts/models/Topic'; +import { ThreadKind, ThreadStage } from 'client/scripts/models/types'; import { getThreadActionTooltipText } from 'helpers/threads'; import { getProposalUrlPath } from 'identifiers'; -import Thread from 'models/Thread'; import { useCommonNavigate } from 'navigation/helpers'; import { useGetCommunityByIdQuery } from 'state/api/communities'; import { useFetchCustomDomainQuery } from 'state/api/configuration'; @@ -21,7 +21,10 @@ import { useRefreshMembershipQuery } from 'state/api/groups'; import useUserStore from 'state/ui/user'; import Permissions from 'utils/Permissions'; import { DashboardViews } from 'views/pages/user_dashboard'; +import { z } from 'zod'; +import { PageNotFound } from '../pages/404'; import { ThreadCard } from '../pages/discussions/ThreadCard'; +import { UserDashboardRowSkeleton } from '../pages/user_dashboard/user_dashboard_row'; type FeedProps = { dashboardView: DashboardViews; @@ -117,6 +120,68 @@ const FeedThread = ({ thread }: { thread: Thread }) => { ); }; +function mapThread({ + thread, + recent_comments, +}: z.infer): Thread { + return new Thread({ + Address: { + address: thread.user_address, + community_id: thread.community_id, + }, + title: thread.title, + id: thread.id, + created_at: thread.created_at ?? '', + updated_at: thread.updated_at ?? thread.created_at ?? '', + topic: new Topic({ + community_id: thread.community_id, + id: thread.topic.id, + name: thread.topic.name, + description: thread.topic.description, + featured_in_sidebar: false, + featured_in_new_post: false, + group_ids: [], + active_contest_managers: [], + total_threads: 0, + }), + kind: thread.kind as ThreadKind, + stage: thread.stage as ThreadStage, + ThreadVersionHistories: [], + community_id: thread.community_id, + read_only: thread.read_only, + body: thread.body, + locked_at: thread.locked_at ?? '', + archived_at: thread.archived_at ?? '', + has_poll: thread.has_poll ?? false, + marked_as_spam_at: thread.marked_as_spam_at ?? '', + discord_meta: thread.discord_meta, + profile_name: thread.profile_name ?? '', + avatar_url: thread.profile_avatar ?? '', + user_id: thread.user_id, + userId: thread.user_id, + last_edited: thread.updated_at ?? '', + last_commented_on: '', + reaction_weights_sum: 0, + address_last_active: '', + ContestActions: [], + numberOfComments: thread.numberOfComments, + recentComments: + recent_comments?.map( + (c: z.infer) => + ({ + id: c.id, + address: c.address, + user_id: c.user_id ?? '', + created_at: c.created_at, + updated_at: c.updated_at, + profile_avatar_url: c.profile_avatar_url, + profile_name: c.profile_name, + text: c.text, + }) as RecentComment, + ) ?? [], + }); +} + // eslint-disable-next-line react/no-multi-comp export const Feed = ({ dashboardView, @@ -131,12 +196,12 @@ export const Feed = ({ apiEnabled: DashboardViews.Global === dashboardView, }); - const queryData = (() => { - if (DashboardViews.Global === dashboardView) return globalActivityRes; - else return userActivityRes; - })(); + const feed = + DashboardViews.Global === dashboardView + ? globalActivityRes + : userActivityRes; - if (queryData?.isLoading) { + if (feed.isLoading) { return (
; } - if (queryData?.data?.length === 0) { + if (feed.data.length === 0) { return (
{noFeedMessage}
@@ -165,10 +230,10 @@ export const Feed = ({
( - + )} />
diff --git a/packages/commonwealth/main.ts b/packages/commonwealth/main.ts index 9161d2afdc2..0aacd89bcfb 100644 --- a/packages/commonwealth/main.ts +++ b/packages/commonwealth/main.ts @@ -154,7 +154,7 @@ export async function main( setupPassport(db); // TODO: decouple as global singleton - const globalActivityCache = GlobalActivityCache.getInstance(db); + const globalActivityCache = GlobalActivityCache.getInstance(); // initialize async to avoid blocking startup if (!noGlobalActivityCache) globalActivityCache.start(); diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index fd7f70cf862..2d8b6f552fe 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -1,5 +1,5 @@ import { express, trpc } from '@hicommonwealth/adapters'; -import { Comment, Community } from '@hicommonwealth/model'; +import { Comment, Community, Feed } from '@hicommonwealth/model'; import cors from 'cors'; import { Router } from 'express'; import passport from 'passport'; @@ -11,6 +11,7 @@ import { apiKeyAuthMiddleware, } from './external-router-middleware'; import * as thread from './threads'; +import * as user from './user'; const { createCommunity, @@ -32,8 +33,12 @@ const { } = thread.trpcRouter; const { createComment, updateComment, deleteComment, createCommentReaction } = comment.trpcRouter; +const { getNewContent } = user.trpcRouter; const api = { + getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User, true), + getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User, true), + getNewContent, getCommunities: trpc.query( Community.GetCommunities, trpc.Tag.Community, diff --git a/packages/commonwealth/server/api/feed.ts b/packages/commonwealth/server/api/feed.ts index 00abd584221..f97c222894e 100644 --- a/packages/commonwealth/server/api/feed.ts +++ b/packages/commonwealth/server/api/feed.ts @@ -3,4 +3,5 @@ import { Feed } from '@hicommonwealth/model'; export const trpcRouter = trpc.router({ getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User), + getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User), }); diff --git a/packages/commonwealth/server/api/threads.ts b/packages/commonwealth/server/api/threads.ts index b6446979c78..db78c142144 100644 --- a/packages/commonwealth/server/api/threads.ts +++ b/packages/commonwealth/server/api/threads.ts @@ -1,10 +1,5 @@ import { trpc } from '@hicommonwealth/adapters'; -import { - GlobalActivityCache, - Reaction, - Thread, - models, -} from '@hicommonwealth/model'; +import { GlobalActivityCache, Reaction, Thread } from '@hicommonwealth/model'; import { MixpanelCommunityInteractionEvent } from '../../shared/analytics/types'; import { applyCanvasSignedDataMiddleware } from '../federation'; @@ -44,7 +39,7 @@ export const trpcRouter = trpc.router({ async (_, output) => { // Using track output middleware to invalidate gac // TODO: Generalize output middleware to cover (analytics, gac invalidation, canvas, etc) - const gac = GlobalActivityCache.getInstance(models); + const gac = GlobalActivityCache.getInstance(); gac && (await gac.deleteActivityFromCache(output.thread_id)); return undefined; }, diff --git a/packages/commonwealth/server/routes/feed.ts b/packages/commonwealth/server/routes/feed.ts index 02388bea060..37e624aa1a2 100644 --- a/packages/commonwealth/server/routes/feed.ts +++ b/packages/commonwealth/server/routes/feed.ts @@ -1,9 +1,9 @@ import { AppError, query } from '@hicommonwealth/core'; -import { Feed as FeedQueries, Thread, type DB } from '@hicommonwealth/model'; +import { Thread, type DB } from '@hicommonwealth/model'; import { - GetUserFeed, - GetUserFeedOrderBy, - GetUserFeedStatus, + GetThreads, + GetThreadsOrderBy, + GetThreadsStatus, Thread as ThreadSchema, } from '@hicommonwealth/schemas'; import { getDecodedString, slugify } from '@hicommonwealth/shared'; @@ -31,7 +31,7 @@ function sortByDateDesc( return toDate(b).getTime() - toDate(a).getTime(); } -function computeUpdated(bulkThreads: z.infer) { +function computeUpdated(bulkThreads: z.infer) { if (bulkThreads.threads.length === 0) { // there are no threads return new Date(); @@ -94,7 +94,7 @@ export const getFeedHandler = async ( status, } = bulkQueryValidationResult.data; - const bulkThreads = await query(FeedQueries.GetUserFeed(), { + const bulkThreads = await query(Thread.GetThreads(), { actor: { user: { email: '' } }, payload: { page, @@ -103,12 +103,12 @@ export const getFeedHandler = async ( stage, topic_id, includePinnedThreads, - order_by: orderBy as z.infer, + order_by: orderBy as z.infer, from_date, to_date, archived, contestAddress, - status: status as z.infer, + status: status as z.infer, }, }); diff --git a/packages/commonwealth/server/routes/threads/get_threads_handler.ts b/packages/commonwealth/server/routes/threads/get_threads_handler.ts index 0a535d7f16a..abe14184546 100644 --- a/packages/commonwealth/server/routes/threads/get_threads_handler.ts +++ b/packages/commonwealth/server/routes/threads/get_threads_handler.ts @@ -1,6 +1,6 @@ import { AppError, query } from '@hicommonwealth/core'; -import { Feed, Thread } from '@hicommonwealth/model'; -import { GetUserFeedOrderBy, GetUserFeedStatus } from '@hicommonwealth/schemas'; +import { Thread } from '@hicommonwealth/model'; +import { GetThreadsOrderBy, GetThreadsStatus } from '@hicommonwealth/schemas'; import { z } from 'zod'; import { ALL_COMMUNITIES } from '../../middleware/databaseValidationService'; import { ServerControllers } from '../../routing/router'; @@ -118,7 +118,7 @@ export const getThreadsHandler = async ( withXRecentComments, } = bulkQueryValidationResult.data; - const bulkThreads = await query(Feed.GetUserFeed(), { + const bulkThreads = await query(Thread.GetThreads(), { actor: { user: { email: '' }, }, @@ -129,12 +129,12 @@ export const getThreadsHandler = async ( stage, topic_id, includePinnedThreads, - order_by: orderBy as z.infer, + order_by: orderBy as z.infer, from_date, to_date, archived: archived, contestAddress, - status: status as z.infer, + status: status as z.infer, withXRecentComments, }, }); diff --git a/packages/commonwealth/server/routes/viewUserActivity.ts b/packages/commonwealth/server/routes/viewUserActivity.ts deleted file mode 100644 index 3d896f2220f..00000000000 --- a/packages/commonwealth/server/routes/viewUserActivity.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AppError } from '@hicommonwealth/core'; -import type { DB } from '@hicommonwealth/model'; -import { getActivityFeed } from '@hicommonwealth/model'; -import type { NextFunction, Request, Response } from 'express'; - -export const Errors = { - NotLoggedIn: 'Must be signed in to view user dashboard', -}; - -export default async ( - models: DB, - req: Request, - res: Response, - next: NextFunction, -) => { - if (!req.user) { - return next(new AppError(Errors.NotLoggedIn)); - } - const { id } = req.user; - const notificationsWithActivity = await getActivityFeed(models, id); - return res.json({ status: 'Success', result: notificationsWithActivity }); -}; diff --git a/packages/commonwealth/server/routing/router.ts b/packages/commonwealth/server/routing/router.ts index a477b746265..4117cdc2b62 100644 --- a/packages/commonwealth/server/routing/router.ts +++ b/packages/commonwealth/server/routing/router.ts @@ -40,7 +40,6 @@ import upgradeMember, { upgradeMemberValidation, } from '../routes/upgradeMember'; import viewGlobalActivity from '../routes/viewGlobalActivity'; -import viewUserActivity from '../routes/viewUserActivity'; import getUploadSignature from '../routes/getUploadSignature'; @@ -492,13 +491,6 @@ function setupRouter( getUploadSignature.bind(this, models), ); - registerRoute( - router, - 'post', - '/viewUserActivity', - passport.authenticate('jwt', { session: false }), - viewUserActivity.bind(this, models), - ); registerRoute( router, 'post', diff --git a/packages/commonwealth/test/integration/api/userDashboard.spec.ts b/packages/commonwealth/test/integration/api/userDashboard.spec.ts index 0b2ac57b5e6..c9e343326d1 100644 --- a/packages/commonwealth/test/integration/api/userDashboard.spec.ts +++ b/packages/commonwealth/test/integration/api/userDashboard.spec.ts @@ -161,11 +161,13 @@ describe('User Dashboard API', () => { await dispose()(); }); - describe('/viewUserActivity', () => { + describe('/GetUserActivity', () => { + const apiUrl = '/api/internal/feed.GetUserActivity'; + test('should fail without JWT', async () => { const res = await chai.request .agent(server.app) - .post('/api/viewUserActivity') + .get(apiUrl) .set('Accept', 'application/json') .send({ chain }); expect(res).to.not.be.null; @@ -175,7 +177,7 @@ describe('User Dashboard API', () => { test('should return user activity for joined communities only', async () => { const res = await chai.request .agent(server.app) - .post('/api/viewUserActivity') + .get(apiUrl) .set('Accept', 'application/json') .send({ chain, jwt: userJWT }); @@ -209,7 +211,7 @@ describe('User Dashboard API', () => { const res = await chai.request .agent(server.app) - .post('/api/viewUserActivity') + .get(apiUrl) .set('Accept', 'application/json') .send({ chain, jwt: userJWT }); @@ -257,7 +259,7 @@ describe('User Dashboard API', () => { const res = await chai.request .agent(server.app) - .post('/api/viewUserActivity') + .get(apiUrl) .set('Accept', 'application/json') .send({ chain, jwt: userJWT }); @@ -282,5 +284,5 @@ describe('User Dashboard API', () => { }); }); - describe.todo('/viewGlobalActivity', () => {}); + describe.todo('/GetGlobalActivity', () => {}); }); diff --git a/packages/load-testing/test/api/feed.spec.ts b/packages/load-testing/test/api/feed.spec.ts index e8dd6cf3ee6..11bbcdcf46f 100644 --- a/packages/load-testing/test/api/feed.spec.ts +++ b/packages/load-testing/test/api/feed.spec.ts @@ -1,9 +1,9 @@ import { - viewGlobalActivity, - viewUserActivity, + getGlobalActivity, + getUserActivity, } from '../util/apiRequests/feed.ts'; import { createJwts } from '../util/apiRequests/utility.ts'; -import { LEGACY_API_URL, TRPC_API_URL } from '../util/config.ts'; +import { TRPC_API_URL } from '../util/config.ts'; import { createScenario } from '../util/scenarios.ts'; import { IgnoreLifecycleMetrics } from '../util/utils.ts'; @@ -35,10 +35,10 @@ export function setup(): string[] { } export async function globalActivity() { - viewGlobalActivity(LEGACY_API_URL); + getGlobalActivity(TRPC_API_URL); } export async function userActivity(jwts: string) { const jwt = jwts[Math.floor(Math.random() * jwts.length)]; - viewUserActivity(LEGACY_API_URL, jwt); + getUserActivity(TRPC_API_URL, jwt); } diff --git a/packages/load-testing/test/util/apiRequests/feed.ts b/packages/load-testing/test/util/apiRequests/feed.ts index 03d9033f787..ce8777d6f80 100644 --- a/packages/load-testing/test/util/apiRequests/feed.ts +++ b/packages/load-testing/test/util/apiRequests/feed.ts @@ -2,15 +2,15 @@ import http from 'k6/http'; import { checkResStatus } from '../utils.ts'; // TODO: refactor to get requests in API -export function viewGlobalActivity(apiUrl: string): boolean { - return checkResStatus(http.post(`${apiUrl}/viewGlobalActivity`), 200); +export function getGlobalActivity(apiUrl: string): boolean { + return checkResStatus(http.post(`${apiUrl}/feed.GetGlobalActivity`), 200); } // TODO: refactor to get requests in API -export function viewUserActivity(apiUrl: string, jwt: string): boolean { +export function getUserActivity(apiUrl: string, jwt: string): boolean { return checkResStatus( http.post( - `${apiUrl}/viewUserActivity`, + `${apiUrl}/feed.GetUserActivity`, JSON.stringify({ jwt, }), From 9a75d7ef5b54e910244180f810cf60186faf1f73 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 10 Oct 2024 18:34:08 -0400 Subject: [PATCH 114/425] fix tests --- libs/model/src/feed/GetGlobalActivity.query.ts | 5 ++--- .../commonwealth/test/integration/api/userDashboard.spec.ts | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/libs/model/src/feed/GetGlobalActivity.query.ts b/libs/model/src/feed/GetGlobalActivity.query.ts index d31859dfad3..f0f8deeec99 100644 --- a/libs/model/src/feed/GetGlobalActivity.query.ts +++ b/libs/model/src/feed/GetGlobalActivity.query.ts @@ -7,8 +7,7 @@ export function GetGlobalActivity(): Query { ...schemas.ActivityFeed, auth: [], secure: false, - body: async () => { - return await GlobalActivityCache.getInstance().getGlobalActivity(); - }, + body: async () => + await GlobalActivityCache.getInstance().getGlobalActivity(), }; } diff --git a/packages/commonwealth/test/integration/api/userDashboard.spec.ts b/packages/commonwealth/test/integration/api/userDashboard.spec.ts index c9e343326d1..a1feeb11f0d 100644 --- a/packages/commonwealth/test/integration/api/userDashboard.spec.ts +++ b/packages/commonwealth/test/integration/api/userDashboard.spec.ts @@ -162,7 +162,7 @@ describe('User Dashboard API', () => { }); describe('/GetUserActivity', () => { - const apiUrl = '/api/internal/feed.GetUserActivity'; + const apiUrl = '/api/internal/trpc/feed.GetUserActivity'; test('should fail without JWT', async () => { const res = await chai.request From 5e654398f79ce6855d8a66e26c05834579645c2e Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 10 Oct 2024 18:51:16 -0400 Subject: [PATCH 115/425] gen api 0.0.4 --- libs/api-client/fern/openapi/openapi.yml | 434 +++++++++++++++++- libs/api-client/package.json | 2 +- libs/api-client/src/Client.d.ts | 3 + libs/api-client/src/Client.js | 7 + libs/api-client/src/api/resources/index.d.ts | 2 + libs/api-client/src/api/resources/index.js | 2 + .../src/api/resources/user/client/Client.d.ts | 58 +++ .../src/api/resources/user/client/Client.js | 286 ++++++++++++ .../src/api/resources/user/client/index.d.ts | 1 + .../src/api/resources/user/client/index.js | 1 + .../src/api/resources/user/index.d.ts | 2 + .../src/api/resources/user/index.js | 2 + .../types/GetGlobalActivityResponseItem.d.ts | 8 + .../types/GetGlobalActivityResponseItem.js | 4 + ...ctivityResponseItemRecentCommentsItem.d.ts | 17 + ...lActivityResponseItemRecentCommentsItem.js | 4 + ...onseItemRecentCommentsItemDiscordMeta.d.ts | 9 + ...sponseItemRecentCommentsItemDiscordMeta.js | 4 + ...ItemRecentCommentsItemDiscordMetaUser.d.ts | 7 + ...seItemRecentCommentsItemDiscordMetaUser.js | 4 + .../GetGlobalActivityResponseItemThread.d.ts | 27 ++ .../GetGlobalActivityResponseItemThread.js | 4 + ...ActivityResponseItemThreadDiscordMeta.d.ts | 9 + ...alActivityResponseItemThreadDiscordMeta.js | 4 + ...vityResponseItemThreadDiscordMetaUser.d.ts | 7 + ...tivityResponseItemThreadDiscordMetaUser.js | 4 + ...GlobalActivityResponseItemThreadTopic.d.ts | 8 + ...etGlobalActivityResponseItemThreadTopic.js | 4 + .../user/types/GetNewContentResponse.d.ts | 6 + .../user/types/GetNewContentResponse.js | 4 + .../types/GetUserActivityResponseItem.d.ts | 8 + .../user/types/GetUserActivityResponseItem.js | 4 + ...ctivityResponseItemRecentCommentsItem.d.ts | 17 + ...rActivityResponseItemRecentCommentsItem.js | 4 + ...onseItemRecentCommentsItemDiscordMeta.d.ts | 9 + ...sponseItemRecentCommentsItemDiscordMeta.js | 4 + ...ItemRecentCommentsItemDiscordMetaUser.d.ts | 7 + ...seItemRecentCommentsItemDiscordMetaUser.js | 4 + .../GetUserActivityResponseItemThread.d.ts | 27 ++ .../GetUserActivityResponseItemThread.js | 4 + ...ActivityResponseItemThreadDiscordMeta.d.ts | 9 + ...erActivityResponseItemThreadDiscordMeta.js | 4 + ...vityResponseItemThreadDiscordMetaUser.d.ts | 7 + ...tivityResponseItemThreadDiscordMetaUser.js | 4 + ...etUserActivityResponseItemThreadTopic.d.ts | 8 + .../GetUserActivityResponseItemThreadTopic.js | 4 + .../src/api/resources/user/types/index.d.ts | 17 + .../src/api/resources/user/types/index.js | 17 + .../src/serialization/resources/index.d.ts | 2 + .../src/serialization/resources/index.js | 2 + .../user/client/getGlobalActivity.d.ts | 14 + .../user/client/getGlobalActivity.js | 6 + .../user/client/getUserActivity.d.ts | 14 + .../resources/user/client/getUserActivity.js | 6 + .../resources/user/client/index.d.ts | 2 + .../resources/user/client/index.js | 2 + .../serialization/resources/user/index.d.ts | 2 + .../src/serialization/resources/user/index.js | 2 + .../types/GetGlobalActivityResponseItem.d.ts | 20 + .../types/GetGlobalActivityResponseItem.js | 15 + ...ctivityResponseItemRecentCommentsItem.d.ts | 26 ++ ...lActivityResponseItemRecentCommentsItem.js | 43 ++ ...onseItemRecentCommentsItemDiscordMeta.d.ts | 18 + ...sponseItemRecentCommentsItemDiscordMeta.js | 17 + ...ItemRecentCommentsItemDiscordMetaUser.d.ts | 16 + ...seItemRecentCommentsItemDiscordMetaUser.js | 9 + .../GetGlobalActivityResponseItemThread.d.ts | 37 ++ .../GetGlobalActivityResponseItemThread.js | 68 +++ ...ActivityResponseItemThreadDiscordMeta.d.ts | 18 + ...alActivityResponseItemThreadDiscordMeta.js | 17 + ...vityResponseItemThreadDiscordMetaUser.d.ts | 16 + ...tivityResponseItemThreadDiscordMetaUser.js | 9 + ...GlobalActivityResponseItemThreadTopic.d.ts | 17 + ...etGlobalActivityResponseItemThreadTopic.js | 10 + .../user/types/GetNewContentResponse.d.ts | 15 + .../user/types/GetNewContentResponse.js | 9 + .../types/GetUserActivityResponseItem.d.ts | 20 + .../user/types/GetUserActivityResponseItem.js | 15 + ...ctivityResponseItemRecentCommentsItem.d.ts | 26 ++ ...rActivityResponseItemRecentCommentsItem.js | 43 ++ ...onseItemRecentCommentsItemDiscordMeta.d.ts | 18 + ...sponseItemRecentCommentsItemDiscordMeta.js | 17 + ...ItemRecentCommentsItemDiscordMetaUser.d.ts | 16 + ...seItemRecentCommentsItemDiscordMetaUser.js | 9 + .../GetUserActivityResponseItemThread.d.ts | 37 ++ .../GetUserActivityResponseItemThread.js | 68 +++ ...ActivityResponseItemThreadDiscordMeta.d.ts | 18 + ...erActivityResponseItemThreadDiscordMeta.js | 17 + ...vityResponseItemThreadDiscordMetaUser.d.ts | 16 + ...tivityResponseItemThreadDiscordMetaUser.js | 9 + ...etUserActivityResponseItemThreadTopic.d.ts | 17 + .../GetUserActivityResponseItemThreadTopic.js | 11 + .../resources/user/types/index.d.ts | 17 + .../resources/user/types/index.js | 17 + .../integration/api/userDashboard.spec.ts | 2 +- 95 files changed, 1914 insertions(+), 3 deletions(-) create mode 100644 libs/api-client/src/api/resources/user/client/Client.d.ts create mode 100644 libs/api-client/src/api/resources/user/client/Client.js create mode 100644 libs/api-client/src/api/resources/user/client/index.d.ts create mode 100644 libs/api-client/src/api/resources/user/client/index.js create mode 100644 libs/api-client/src/api/resources/user/index.d.ts create mode 100644 libs/api-client/src/api/resources/user/index.js create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.js create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.js create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js create mode 100644 libs/api-client/src/api/resources/user/types/GetNewContentResponse.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetNewContentResponse.js create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.js create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.js create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.js create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.js create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.js create mode 100644 libs/api-client/src/api/resources/user/types/index.d.ts create mode 100644 libs/api-client/src/api/resources/user/types/index.js create mode 100644 libs/api-client/src/serialization/resources/user/client/getGlobalActivity.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/client/getGlobalActivity.js create mode 100644 libs/api-client/src/serialization/resources/user/client/getUserActivity.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/client/getUserActivity.js create mode 100644 libs/api-client/src/serialization/resources/user/client/index.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/client/index.js create mode 100644 libs/api-client/src/serialization/resources/user/index.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/index.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetNewContentResponse.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetNewContentResponse.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.js create mode 100644 libs/api-client/src/serialization/resources/user/types/index.d.ts create mode 100644 libs/api-client/src/serialization/resources/user/types/index.js diff --git a/libs/api-client/fern/openapi/openapi.yml b/libs/api-client/fern/openapi/openapi.yml index 6206f4e4e04..30c98a012f2 100644 --- a/libs/api-client/fern/openapi/openapi.yml +++ b/libs/api-client/fern/openapi/openapi.yml @@ -1,10 +1,442 @@ openapi: 3.0.3 info: title: Common API - version: 0.0.1 + version: 0.0.4 servers: - url: http://localhost:3000/api/v1 paths: + /GetGlobalActivity: + get: + operationId: getGlobalActivity + tags: + - User + security: + - apiKey: [] + parameters: + - in: header + name: address + required: false + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + type: object + properties: + thread: + type: object + properties: + id: + type: integer + minimum: 0 + maximum: 2147483647 + community_id: + type: string + body: + type: string + title: + type: string + numberOfComments: + type: integer + minimum: 0 + maximum: 2147483647 + created_at: + type: string + nullable: true + updated_at: + type: string + nullable: true + deleted_at: + type: string + nullable: true + locked_at: + type: string + nullable: true + kind: + type: string + stage: + type: string + archived_at: + type: string + nullable: true + read_only: + type: boolean + has_poll: + type: boolean + nullable: true + marked_as_spam_at: + type: string + nullable: true + discord_meta: + type: object + properties: + user: + type: object + properties: + id: + type: string + username: + type: string + required: + - id + - username + additionalProperties: false + channel_id: + type: string + message_id: + type: string + required: + - user + - channel_id + - message_id + additionalProperties: false + nullable: true + profile_name: + type: string + nullable: true + profile_avatar: + type: string + nullable: true + user_id: + type: integer + minimum: 0 + maximum: 2147483647 + user_address: + type: string + topic: + type: object + properties: + id: + type: integer + minimum: 0 + maximum: 2147483647 + name: + type: string + description: + type: string + required: + - id + - name + - description + additionalProperties: false + required: + - id + - community_id + - body + - title + - numberOfComments + - kind + - stage + - read_only + - user_id + - user_address + - topic + additionalProperties: false + recent_comments: + type: array + items: + type: object + properties: + id: + type: integer + minimum: 0 + maximum: 2147483647 + address: + type: string + text: + type: string + created_at: + type: string + updated_at: + type: string + nullable: true + deleted_at: + type: string + nullable: true + marked_as_spam_at: + type: string + nullable: true + discord_meta: + type: object + properties: + user: + type: object + properties: + id: + type: string + username: + type: string + required: + - id + - username + additionalProperties: false + channel_id: + type: string + message_id: + type: string + required: + - user + - channel_id + - message_id + additionalProperties: false + nullable: true + profile_name: + type: string + nullable: true + profile_avatar_url: + type: string + nullable: true + user_id: + type: number + nullable: true + required: + - id + - address + - text + - created_at + additionalProperties: false + nullable: true + required: + - thread + additionalProperties: false + default: + $ref: '#/components/responses/error' + /GetUserActivity: + get: + operationId: getUserActivity + tags: + - User + security: + - apiKey: [] + parameters: + - in: header + name: address + required: false + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + type: object + properties: + thread: + type: object + properties: + id: + type: integer + minimum: 0 + maximum: 2147483647 + community_id: + type: string + body: + type: string + title: + type: string + numberOfComments: + type: integer + minimum: 0 + maximum: 2147483647 + created_at: + type: string + nullable: true + updated_at: + type: string + nullable: true + deleted_at: + type: string + nullable: true + locked_at: + type: string + nullable: true + kind: + type: string + stage: + type: string + archived_at: + type: string + nullable: true + read_only: + type: boolean + has_poll: + type: boolean + nullable: true + marked_as_spam_at: + type: string + nullable: true + discord_meta: + type: object + properties: + user: + type: object + properties: + id: + type: string + username: + type: string + required: + - id + - username + additionalProperties: false + channel_id: + type: string + message_id: + type: string + required: + - user + - channel_id + - message_id + additionalProperties: false + nullable: true + profile_name: + type: string + nullable: true + profile_avatar: + type: string + nullable: true + user_id: + type: integer + minimum: 0 + maximum: 2147483647 + user_address: + type: string + topic: + type: object + properties: + id: + type: integer + minimum: 0 + maximum: 2147483647 + name: + type: string + description: + type: string + required: + - id + - name + - description + additionalProperties: false + required: + - id + - community_id + - body + - title + - numberOfComments + - kind + - stage + - read_only + - user_id + - user_address + - topic + additionalProperties: false + recent_comments: + type: array + items: + type: object + properties: + id: + type: integer + minimum: 0 + maximum: 2147483647 + address: + type: string + text: + type: string + created_at: + type: string + updated_at: + type: string + nullable: true + deleted_at: + type: string + nullable: true + marked_as_spam_at: + type: string + nullable: true + discord_meta: + type: object + properties: + user: + type: object + properties: + id: + type: string + username: + type: string + required: + - id + - username + additionalProperties: false + channel_id: + type: string + message_id: + type: string + required: + - user + - channel_id + - message_id + additionalProperties: false + nullable: true + profile_name: + type: string + nullable: true + profile_avatar_url: + type: string + nullable: true + user_id: + type: number + nullable: true + required: + - id + - address + - text + - created_at + additionalProperties: false + nullable: true + required: + - thread + additionalProperties: false + default: + $ref: '#/components/responses/error' + /GetNewContent: + get: + operationId: getNewContent + tags: + - User + security: + - apiKey: [] + parameters: + - in: header + name: address + required: false + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + joinedCommunityIdsWithNewContent: + type: array + items: + type: string + required: + - joinedCommunityIdsWithNewContent + additionalProperties: false + default: + $ref: '#/components/responses/error' /GetCommunities: get: operationId: getCommunities diff --git a/libs/api-client/package.json b/libs/api-client/package.json index e48ee69d29b..3436f732c05 100644 --- a/libs/api-client/package.json +++ b/libs/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@commonxyz/api-client", - "version": "0.0.3", + "version": "0.0.4", "type": "module", "description": "Common Client Proxy", "repository": { diff --git a/libs/api-client/src/Client.d.ts b/libs/api-client/src/Client.d.ts index dc817d86658..d7b4ba3b811 100644 --- a/libs/api-client/src/Client.d.ts +++ b/libs/api-client/src/Client.d.ts @@ -5,6 +5,7 @@ import { Comment } from './api/resources/comment/client/Client'; import { Community } from './api/resources/community/client/Client'; import { Reaction } from './api/resources/reaction/client/Client'; import { Thread } from './api/resources/thread/client/Client'; +import { User } from './api/resources/user/client/Client'; import * as core from './core'; import * as environments from './environments'; export declare namespace CommonApiClient { @@ -28,6 +29,8 @@ export declare namespace CommonApiClient { export declare class CommonApiClient { protected readonly _options: CommonApiClient.Options; constructor(_options: CommonApiClient.Options); + protected _user: User | undefined; + get user(): User; protected _community: Community | undefined; get community(): Community; protected _comment: Comment | undefined; diff --git a/libs/api-client/src/Client.js b/libs/api-client/src/Client.js index 470296dcf92..ec485ec57aa 100644 --- a/libs/api-client/src/Client.js +++ b/libs/api-client/src/Client.js @@ -5,10 +5,17 @@ import { Comment } from './api/resources/comment/client/Client'; import { Community } from './api/resources/community/client/Client'; import { Reaction } from './api/resources/reaction/client/Client'; import { Thread } from './api/resources/thread/client/Client'; +import { User } from './api/resources/user/client/Client'; export class CommonApiClient { constructor(_options) { this._options = _options; } + get user() { + var _a; + return (_a = this._user) !== null && _a !== void 0 + ? _a + : (this._user = new User(this._options)); + } get community() { var _a; return (_a = this._community) !== null && _a !== void 0 diff --git a/libs/api-client/src/api/resources/index.d.ts b/libs/api-client/src/api/resources/index.d.ts index 9d93375d2da..4301125bdc3 100644 --- a/libs/api-client/src/api/resources/index.d.ts +++ b/libs/api-client/src/api/resources/index.d.ts @@ -10,3 +10,5 @@ export * from './reaction/types'; export * as thread from './thread'; export * from './thread/client/requests'; export * from './thread/types'; +export * as user from './user'; +export * from './user/types'; diff --git a/libs/api-client/src/api/resources/index.js b/libs/api-client/src/api/resources/index.js index 9d93375d2da..4301125bdc3 100644 --- a/libs/api-client/src/api/resources/index.js +++ b/libs/api-client/src/api/resources/index.js @@ -10,3 +10,5 @@ export * from './reaction/types'; export * as thread from './thread'; export * from './thread/client/requests'; export * from './thread/types'; +export * as user from './user'; +export * from './user/types'; diff --git a/libs/api-client/src/api/resources/user/client/Client.d.ts b/libs/api-client/src/api/resources/user/client/Client.d.ts new file mode 100644 index 00000000000..defa3155358 --- /dev/null +++ b/libs/api-client/src/api/resources/user/client/Client.d.ts @@ -0,0 +1,58 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import * as environments from '../../../../environments'; +import * as CommonApi from '../../../index'; +export declare namespace User { + interface Options { + environment?: core.Supplier; + apiKey: core.Supplier; + /** Override the address header */ + address?: core.Supplier; + } + interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Override the address header */ + address?: string | undefined; + } +} +export declare class User { + protected readonly _options: User.Options; + constructor(_options: User.Options); + /** + * @param {User.RequestOptions} requestOptions - Request-specific configuration. + * + * @example + * await client.user.getGlobalActivity() + */ + getGlobalActivity( + requestOptions?: User.RequestOptions, + ): Promise; + /** + * @param {User.RequestOptions} requestOptions - Request-specific configuration. + * + * @example + * await client.user.getUserActivity() + */ + getUserActivity( + requestOptions?: User.RequestOptions, + ): Promise; + /** + * @param {User.RequestOptions} requestOptions - Request-specific configuration. + * + * @example + * await client.user.getNewContent() + */ + getNewContent( + requestOptions?: User.RequestOptions, + ): Promise; + protected _getCustomAuthorizationHeaders(): Promise<{ + 'x-api-key': string; + }>; +} diff --git a/libs/api-client/src/api/resources/user/client/Client.js b/libs/api-client/src/api/resources/user/client/Client.js new file mode 100644 index 00000000000..824c9a68217 --- /dev/null +++ b/libs/api-client/src/api/resources/user/client/Client.js @@ -0,0 +1,286 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +var __awaiter = + (this && this.__awaiter) || + function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator['throw'](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done + ? resolve(result.value) + : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; +import urlJoin from 'url-join'; +import * as core from '../../../../core'; +import * as environments from '../../../../environments'; +import * as errors from '../../../../errors/index'; +import * as serializers from '../../../../serialization/index'; +export class User { + constructor(_options) { + this._options = _options; + } + /** + * @param {User.RequestOptions} requestOptions - Request-specific configuration. + * + * @example + * await client.user.getGlobalActivity() + */ + getGlobalActivity(requestOptions) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const _response = yield core.fetcher({ + url: urlJoin( + (_a = yield core.Supplier.get(this._options.environment)) !== null && + _a !== void 0 + ? _a + : environments.CommonApiEnvironment.Default, + 'GetGlobalActivity', + ), + method: 'GET', + headers: Object.assign( + { + address: + (yield core.Supplier.get(this._options.address)) != null + ? yield core.Supplier.get(this._options.address) + : undefined, + 'X-Fern-Language': 'JavaScript', + 'X-Fern-Runtime': core.RUNTIME.type, + 'X-Fern-Runtime-Version': core.RUNTIME.version, + }, + yield this._getCustomAuthorizationHeaders(), + ), + contentType: 'application/json', + requestType: 'json', + timeoutMs: + (requestOptions === null || requestOptions === void 0 + ? void 0 + : requestOptions.timeoutInSeconds) != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: + requestOptions === null || requestOptions === void 0 + ? void 0 + : requestOptions.maxRetries, + abortSignal: + requestOptions === null || requestOptions === void 0 + ? void 0 + : requestOptions.abortSignal, + }); + if (_response.ok) { + return serializers.user.getGlobalActivity.Response.parseOrThrow( + _response.body, + { + unrecognizedObjectKeys: 'passthrough', + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + breadcrumbsPrefix: ['response'], + }, + ); + } + if (_response.error.reason === 'status-code') { + throw new errors.CommonApiError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + }); + } + switch (_response.error.reason) { + case 'non-json': + throw new errors.CommonApiError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + }); + case 'timeout': + throw new errors.CommonApiTimeoutError(); + case 'unknown': + throw new errors.CommonApiError({ + message: _response.error.errorMessage, + }); + } + }); + } + /** + * @param {User.RequestOptions} requestOptions - Request-specific configuration. + * + * @example + * await client.user.getUserActivity() + */ + getUserActivity(requestOptions) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const _response = yield core.fetcher({ + url: urlJoin( + (_a = yield core.Supplier.get(this._options.environment)) !== null && + _a !== void 0 + ? _a + : environments.CommonApiEnvironment.Default, + 'GetUserActivity', + ), + method: 'GET', + headers: Object.assign( + { + address: + (yield core.Supplier.get(this._options.address)) != null + ? yield core.Supplier.get(this._options.address) + : undefined, + 'X-Fern-Language': 'JavaScript', + 'X-Fern-Runtime': core.RUNTIME.type, + 'X-Fern-Runtime-Version': core.RUNTIME.version, + }, + yield this._getCustomAuthorizationHeaders(), + ), + contentType: 'application/json', + requestType: 'json', + timeoutMs: + (requestOptions === null || requestOptions === void 0 + ? void 0 + : requestOptions.timeoutInSeconds) != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: + requestOptions === null || requestOptions === void 0 + ? void 0 + : requestOptions.maxRetries, + abortSignal: + requestOptions === null || requestOptions === void 0 + ? void 0 + : requestOptions.abortSignal, + }); + if (_response.ok) { + return serializers.user.getUserActivity.Response.parseOrThrow( + _response.body, + { + unrecognizedObjectKeys: 'passthrough', + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + breadcrumbsPrefix: ['response'], + }, + ); + } + if (_response.error.reason === 'status-code') { + throw new errors.CommonApiError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + }); + } + switch (_response.error.reason) { + case 'non-json': + throw new errors.CommonApiError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + }); + case 'timeout': + throw new errors.CommonApiTimeoutError(); + case 'unknown': + throw new errors.CommonApiError({ + message: _response.error.errorMessage, + }); + } + }); + } + /** + * @param {User.RequestOptions} requestOptions - Request-specific configuration. + * + * @example + * await client.user.getNewContent() + */ + getNewContent(requestOptions) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const _response = yield core.fetcher({ + url: urlJoin( + (_a = yield core.Supplier.get(this._options.environment)) !== null && + _a !== void 0 + ? _a + : environments.CommonApiEnvironment.Default, + 'GetNewContent', + ), + method: 'GET', + headers: Object.assign( + { + address: + (yield core.Supplier.get(this._options.address)) != null + ? yield core.Supplier.get(this._options.address) + : undefined, + 'X-Fern-Language': 'JavaScript', + 'X-Fern-Runtime': core.RUNTIME.type, + 'X-Fern-Runtime-Version': core.RUNTIME.version, + }, + yield this._getCustomAuthorizationHeaders(), + ), + contentType: 'application/json', + requestType: 'json', + timeoutMs: + (requestOptions === null || requestOptions === void 0 + ? void 0 + : requestOptions.timeoutInSeconds) != null + ? requestOptions.timeoutInSeconds * 1000 + : 60000, + maxRetries: + requestOptions === null || requestOptions === void 0 + ? void 0 + : requestOptions.maxRetries, + abortSignal: + requestOptions === null || requestOptions === void 0 + ? void 0 + : requestOptions.abortSignal, + }); + if (_response.ok) { + return serializers.GetNewContentResponse.parseOrThrow(_response.body, { + unrecognizedObjectKeys: 'passthrough', + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + breadcrumbsPrefix: ['response'], + }); + } + if (_response.error.reason === 'status-code') { + throw new errors.CommonApiError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + }); + } + switch (_response.error.reason) { + case 'non-json': + throw new errors.CommonApiError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + }); + case 'timeout': + throw new errors.CommonApiTimeoutError(); + case 'unknown': + throw new errors.CommonApiError({ + message: _response.error.errorMessage, + }); + } + }); + } + _getCustomAuthorizationHeaders() { + return __awaiter(this, void 0, void 0, function* () { + const apiKeyValue = yield core.Supplier.get(this._options.apiKey); + return { 'x-api-key': apiKeyValue }; + }); + } +} diff --git a/libs/api-client/src/api/resources/user/client/index.d.ts b/libs/api-client/src/api/resources/user/client/index.d.ts new file mode 100644 index 00000000000..cb0ff5c3b54 --- /dev/null +++ b/libs/api-client/src/api/resources/user/client/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/libs/api-client/src/api/resources/user/client/index.js b/libs/api-client/src/api/resources/user/client/index.js new file mode 100644 index 00000000000..cb0ff5c3b54 --- /dev/null +++ b/libs/api-client/src/api/resources/user/client/index.js @@ -0,0 +1 @@ +export {}; diff --git a/libs/api-client/src/api/resources/user/index.d.ts b/libs/api-client/src/api/resources/user/index.d.ts new file mode 100644 index 00000000000..d860d0670db --- /dev/null +++ b/libs/api-client/src/api/resources/user/index.d.ts @@ -0,0 +1,2 @@ +export * from './client'; +export * from './types'; diff --git a/libs/api-client/src/api/resources/user/index.js b/libs/api-client/src/api/resources/user/index.js new file mode 100644 index 00000000000..d860d0670db --- /dev/null +++ b/libs/api-client/src/api/resources/user/index.js @@ -0,0 +1,2 @@ +export * from './client'; +export * from './types'; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.d.ts new file mode 100644 index 00000000000..a497928fed6 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.d.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetGlobalActivityResponseItem { + thread: CommonApi.GetGlobalActivityResponseItemThread; + recentComments?: CommonApi.GetGlobalActivityResponseItemRecentCommentsItem[]; +} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts new file mode 100644 index 00000000000..265cb5e3015 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetGlobalActivityResponseItemRecentCommentsItem { + id: number; + address: string; + text: string; + createdAt: string; + updatedAt?: string; + deletedAt?: string; + markedAsSpamAt?: string; + discordMeta?: CommonApi.GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta; + profileName?: string; + profileAvatarUrl?: string; + userId?: number; +} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts new file mode 100644 index 00000000000..becb16cdfe2 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta { + user: CommonApi.GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser; + channelId: string; + messageId: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts new file mode 100644 index 00000000000..74d99cab9e3 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser { + id: string; + username: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.d.ts new file mode 100644 index 00000000000..d993bcaf523 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.d.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetGlobalActivityResponseItemThread { + id: number; + communityId: string; + body: string; + title: string; + numberOfComments: number; + createdAt?: string; + updatedAt?: string; + deletedAt?: string; + lockedAt?: string; + kind: string; + stage: string; + archivedAt?: string; + readOnly: boolean; + hasPoll?: boolean; + markedAsSpamAt?: string; + discordMeta?: CommonApi.GetGlobalActivityResponseItemThreadDiscordMeta; + profileName?: string; + profileAvatar?: string; + userId: number; + userAddress: string; + topic: CommonApi.GetGlobalActivityResponseItemThreadTopic; +} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts new file mode 100644 index 00000000000..d3d08ba481f --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetGlobalActivityResponseItemThreadDiscordMeta { + user: CommonApi.GetGlobalActivityResponseItemThreadDiscordMetaUser; + channelId: string; + messageId: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts new file mode 100644 index 00000000000..c0bbb62efe8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetGlobalActivityResponseItemThreadDiscordMetaUser { + id: string; + username: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts new file mode 100644 index 00000000000..e9d54923e27 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetGlobalActivityResponseItemThreadTopic { + id: number; + name: string; + description: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetNewContentResponse.d.ts b/libs/api-client/src/api/resources/user/types/GetNewContentResponse.d.ts new file mode 100644 index 00000000000..bff3be0dd4b --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetNewContentResponse.d.ts @@ -0,0 +1,6 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetNewContentResponse { + joinedCommunityIdsWithNewContent: string[]; +} diff --git a/libs/api-client/src/api/resources/user/types/GetNewContentResponse.js b/libs/api-client/src/api/resources/user/types/GetNewContentResponse.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetNewContentResponse.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.d.ts new file mode 100644 index 00000000000..7a414f9d956 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.d.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetUserActivityResponseItem { + thread: CommonApi.GetUserActivityResponseItemThread; + recentComments?: CommonApi.GetUserActivityResponseItemRecentCommentsItem[]; +} diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts new file mode 100644 index 00000000000..d2b11e577c1 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetUserActivityResponseItemRecentCommentsItem { + id: number; + address: string; + text: string; + createdAt: string; + updatedAt?: string; + deletedAt?: string; + markedAsSpamAt?: string; + discordMeta?: CommonApi.GetUserActivityResponseItemRecentCommentsItemDiscordMeta; + profileName?: string; + profileAvatarUrl?: string; + userId?: number; +} diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.d.ts new file mode 100644 index 00000000000..616a432e90b --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.d.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetUserActivityResponseItemRecentCommentsItemDiscordMeta { + user: CommonApi.GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser; + channelId: string; + messageId: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts new file mode 100644 index 00000000000..9c306100bf5 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser { + id: string; + username: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.d.ts new file mode 100644 index 00000000000..adbe4972ca3 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.d.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetUserActivityResponseItemThread { + id: number; + communityId: string; + body: string; + title: string; + numberOfComments: number; + createdAt?: string; + updatedAt?: string; + deletedAt?: string; + lockedAt?: string; + kind: string; + stage: string; + archivedAt?: string; + readOnly: boolean; + hasPoll?: boolean; + markedAsSpamAt?: string; + discordMeta?: CommonApi.GetUserActivityResponseItemThreadDiscordMeta; + profileName?: string; + profileAvatar?: string; + userId: number; + userAddress: string; + topic: CommonApi.GetUserActivityResponseItemThreadTopic; +} diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts new file mode 100644 index 00000000000..cf73df444d6 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../index'; +export interface GetUserActivityResponseItemThreadDiscordMeta { + user: CommonApi.GetUserActivityResponseItemThreadDiscordMetaUser; + channelId: string; + messageId: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts new file mode 100644 index 00000000000..80682d6d5dd --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetUserActivityResponseItemThreadDiscordMetaUser { + id: string; + username: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts new file mode 100644 index 00000000000..373650f65db --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface GetUserActivityResponseItemThreadTopic { + id: number; + name: string; + description: string; +} diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.js new file mode 100644 index 00000000000..0b46289f5b8 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/index.d.ts b/libs/api-client/src/api/resources/user/types/index.d.ts new file mode 100644 index 00000000000..8af3cf3d4d1 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/index.d.ts @@ -0,0 +1,17 @@ +export * from './GetGlobalActivityResponseItem'; +export * from './GetGlobalActivityResponseItemRecentCommentsItem'; +export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; +export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export * from './GetGlobalActivityResponseItemThread'; +export * from './GetGlobalActivityResponseItemThreadDiscordMeta'; +export * from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; +export * from './GetGlobalActivityResponseItemThreadTopic'; +export * from './GetNewContentResponse'; +export * from './GetUserActivityResponseItem'; +export * from './GetUserActivityResponseItemRecentCommentsItem'; +export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; +export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export * from './GetUserActivityResponseItemThread'; +export * from './GetUserActivityResponseItemThreadDiscordMeta'; +export * from './GetUserActivityResponseItemThreadDiscordMetaUser'; +export * from './GetUserActivityResponseItemThreadTopic'; diff --git a/libs/api-client/src/api/resources/user/types/index.js b/libs/api-client/src/api/resources/user/types/index.js new file mode 100644 index 00000000000..8af3cf3d4d1 --- /dev/null +++ b/libs/api-client/src/api/resources/user/types/index.js @@ -0,0 +1,17 @@ +export * from './GetGlobalActivityResponseItem'; +export * from './GetGlobalActivityResponseItemRecentCommentsItem'; +export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; +export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export * from './GetGlobalActivityResponseItemThread'; +export * from './GetGlobalActivityResponseItemThreadDiscordMeta'; +export * from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; +export * from './GetGlobalActivityResponseItemThreadTopic'; +export * from './GetNewContentResponse'; +export * from './GetUserActivityResponseItem'; +export * from './GetUserActivityResponseItemRecentCommentsItem'; +export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; +export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export * from './GetUserActivityResponseItemThread'; +export * from './GetUserActivityResponseItemThreadDiscordMeta'; +export * from './GetUserActivityResponseItemThreadDiscordMetaUser'; +export * from './GetUserActivityResponseItemThreadTopic'; diff --git a/libs/api-client/src/serialization/resources/index.d.ts b/libs/api-client/src/serialization/resources/index.d.ts index 9d93375d2da..4301125bdc3 100644 --- a/libs/api-client/src/serialization/resources/index.d.ts +++ b/libs/api-client/src/serialization/resources/index.d.ts @@ -10,3 +10,5 @@ export * from './reaction/types'; export * as thread from './thread'; export * from './thread/client/requests'; export * from './thread/types'; +export * as user from './user'; +export * from './user/types'; diff --git a/libs/api-client/src/serialization/resources/index.js b/libs/api-client/src/serialization/resources/index.js index 9d93375d2da..4301125bdc3 100644 --- a/libs/api-client/src/serialization/resources/index.js +++ b/libs/api-client/src/serialization/resources/index.js @@ -10,3 +10,5 @@ export * from './reaction/types'; export * as thread from './thread'; export * from './thread/client/requests'; export * from './thread/types'; +export * as user from './user'; +export * from './user/types'; diff --git a/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.d.ts b/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.d.ts new file mode 100644 index 00000000000..7ae7bfdc054 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.d.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetGlobalActivityResponseItem } from '../types/GetGlobalActivityResponseItem'; +export declare const Response: core.serialization.Schema< + serializers.user.getGlobalActivity.Response.Raw, + CommonApi.GetGlobalActivityResponseItem[] +>; +export declare namespace Response { + type Raw = GetGlobalActivityResponseItem.Raw[]; +} diff --git a/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.js b/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.js new file mode 100644 index 00000000000..b47ff2556d8 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.js @@ -0,0 +1,6 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetGlobalActivityResponseItem } from '../types/GetGlobalActivityResponseItem'; +export const Response = core.serialization.list(GetGlobalActivityResponseItem); diff --git a/libs/api-client/src/serialization/resources/user/client/getUserActivity.d.ts b/libs/api-client/src/serialization/resources/user/client/getUserActivity.d.ts new file mode 100644 index 00000000000..a65e96ee731 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/client/getUserActivity.d.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetUserActivityResponseItem } from '../types/GetUserActivityResponseItem'; +export declare const Response: core.serialization.Schema< + serializers.user.getUserActivity.Response.Raw, + CommonApi.GetUserActivityResponseItem[] +>; +export declare namespace Response { + type Raw = GetUserActivityResponseItem.Raw[]; +} diff --git a/libs/api-client/src/serialization/resources/user/client/getUserActivity.js b/libs/api-client/src/serialization/resources/user/client/getUserActivity.js new file mode 100644 index 00000000000..fcf4eda6484 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/client/getUserActivity.js @@ -0,0 +1,6 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetUserActivityResponseItem } from '../types/GetUserActivityResponseItem'; +export const Response = core.serialization.list(GetUserActivityResponseItem); diff --git a/libs/api-client/src/serialization/resources/user/client/index.d.ts b/libs/api-client/src/serialization/resources/user/client/index.d.ts new file mode 100644 index 00000000000..a508bd5297d --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/client/index.d.ts @@ -0,0 +1,2 @@ +export * as getGlobalActivity from './getGlobalActivity'; +export * as getUserActivity from './getUserActivity'; diff --git a/libs/api-client/src/serialization/resources/user/client/index.js b/libs/api-client/src/serialization/resources/user/client/index.js new file mode 100644 index 00000000000..a508bd5297d --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/client/index.js @@ -0,0 +1,2 @@ +export * as getGlobalActivity from './getGlobalActivity'; +export * as getUserActivity from './getUserActivity'; diff --git a/libs/api-client/src/serialization/resources/user/index.d.ts b/libs/api-client/src/serialization/resources/user/index.d.ts new file mode 100644 index 00000000000..d860d0670db --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/index.d.ts @@ -0,0 +1,2 @@ +export * from './client'; +export * from './types'; diff --git a/libs/api-client/src/serialization/resources/user/index.js b/libs/api-client/src/serialization/resources/user/index.js new file mode 100644 index 00000000000..d860d0670db --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/index.js @@ -0,0 +1,2 @@ +export * from './client'; +export * from './types'; diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.d.ts new file mode 100644 index 00000000000..268911f411d --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.d.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetGlobalActivityResponseItemRecentCommentsItem } from './GetGlobalActivityResponseItemRecentCommentsItem'; +import { GetGlobalActivityResponseItemThread } from './GetGlobalActivityResponseItemThread'; +export declare const GetGlobalActivityResponseItem: core.serialization.ObjectSchema< + serializers.GetGlobalActivityResponseItem.Raw, + CommonApi.GetGlobalActivityResponseItem +>; +export declare namespace GetGlobalActivityResponseItem { + interface Raw { + thread: GetGlobalActivityResponseItemThread.Raw; + recent_comments?: + | GetGlobalActivityResponseItemRecentCommentsItem.Raw[] + | null; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.js new file mode 100644 index 00000000000..e2a3ac71f68 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.js @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetGlobalActivityResponseItemRecentCommentsItem } from './GetGlobalActivityResponseItemRecentCommentsItem'; +import { GetGlobalActivityResponseItemThread } from './GetGlobalActivityResponseItemThread'; +export const GetGlobalActivityResponseItem = core.serialization.object({ + thread: GetGlobalActivityResponseItemThread, + recentComments: core.serialization.property( + 'recent_comments', + core.serialization + .list(GetGlobalActivityResponseItemRecentCommentsItem) + .optional(), + ), +}); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts new file mode 100644 index 00000000000..40018770ba6 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta } from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; +export declare const GetGlobalActivityResponseItemRecentCommentsItem: core.serialization.ObjectSchema< + serializers.GetGlobalActivityResponseItemRecentCommentsItem.Raw, + CommonApi.GetGlobalActivityResponseItemRecentCommentsItem +>; +export declare namespace GetGlobalActivityResponseItemRecentCommentsItem { + interface Raw { + id: number; + address: string; + text: string; + created_at: string; + updated_at?: string | null; + deleted_at?: string | null; + marked_as_spam_at?: string | null; + discord_meta?: GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.Raw | null; + profile_name?: string | null; + profile_avatar_url?: string | null; + user_id?: number | null; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js new file mode 100644 index 00000000000..465fc53d23e --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js @@ -0,0 +1,43 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta } from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; +export const GetGlobalActivityResponseItemRecentCommentsItem = + core.serialization.object({ + id: core.serialization.number(), + address: core.serialization.string(), + text: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.string(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.string().optional(), + ), + deletedAt: core.serialization.property( + 'deleted_at', + core.serialization.string().optional(), + ), + markedAsSpamAt: core.serialization.property( + 'marked_as_spam_at', + core.serialization.string().optional(), + ), + discordMeta: core.serialization.property( + 'discord_meta', + GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.optional(), + ), + profileName: core.serialization.property( + 'profile_name', + core.serialization.string().optional(), + ), + profileAvatarUrl: core.serialization.property( + 'profile_avatar_url', + core.serialization.string().optional(), + ), + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts new file mode 100644 index 00000000000..64e969dd8a5 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser } from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export declare const GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta: core.serialization.ObjectSchema< + serializers.GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.Raw, + CommonApi.GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta +>; +export declare namespace GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta { + interface Raw { + user: GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.Raw; + channel_id: string; + message_id: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js new file mode 100644 index 00000000000..6125a4712fd --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser } from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export const GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta = + core.serialization.object({ + user: GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser, + channelId: core.serialization.property( + 'channel_id', + core.serialization.string(), + ), + messageId: core.serialization.property( + 'message_id', + core.serialization.string(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts new file mode 100644 index 00000000000..8c821b738f1 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser: core.serialization.ObjectSchema< + serializers.GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.Raw, + CommonApi.GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser +>; +export declare namespace GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser { + interface Raw { + id: string; + username: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js new file mode 100644 index 00000000000..6c038cfb03e --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser = + core.serialization.object({ + id: core.serialization.string(), + username: core.serialization.string(), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.d.ts new file mode 100644 index 00000000000..e260f78e2b9 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.d.ts @@ -0,0 +1,37 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetGlobalActivityResponseItemThreadDiscordMeta } from './GetGlobalActivityResponseItemThreadDiscordMeta'; +import { GetGlobalActivityResponseItemThreadTopic } from './GetGlobalActivityResponseItemThreadTopic'; +export declare const GetGlobalActivityResponseItemThread: core.serialization.ObjectSchema< + serializers.GetGlobalActivityResponseItemThread.Raw, + CommonApi.GetGlobalActivityResponseItemThread +>; +export declare namespace GetGlobalActivityResponseItemThread { + interface Raw { + id: number; + community_id: string; + body: string; + title: string; + numberOfComments: number; + created_at?: string | null; + updated_at?: string | null; + deleted_at?: string | null; + locked_at?: string | null; + kind: string; + stage: string; + archived_at?: string | null; + read_only: boolean; + has_poll?: boolean | null; + marked_as_spam_at?: string | null; + discord_meta?: GetGlobalActivityResponseItemThreadDiscordMeta.Raw | null; + profile_name?: string | null; + profile_avatar?: string | null; + user_id: number; + user_address: string; + topic: GetGlobalActivityResponseItemThreadTopic.Raw; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.js new file mode 100644 index 00000000000..ed01b35d4a1 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.js @@ -0,0 +1,68 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetGlobalActivityResponseItemThreadDiscordMeta } from './GetGlobalActivityResponseItemThreadDiscordMeta'; +import { GetGlobalActivityResponseItemThreadTopic } from './GetGlobalActivityResponseItemThreadTopic'; +export const GetGlobalActivityResponseItemThread = core.serialization.object({ + id: core.serialization.number(), + communityId: core.serialization.property( + 'community_id', + core.serialization.string(), + ), + body: core.serialization.string(), + title: core.serialization.string(), + numberOfComments: core.serialization.number(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.string().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.string().optional(), + ), + deletedAt: core.serialization.property( + 'deleted_at', + core.serialization.string().optional(), + ), + lockedAt: core.serialization.property( + 'locked_at', + core.serialization.string().optional(), + ), + kind: core.serialization.string(), + stage: core.serialization.string(), + archivedAt: core.serialization.property( + 'archived_at', + core.serialization.string().optional(), + ), + readOnly: core.serialization.property( + 'read_only', + core.serialization.boolean(), + ), + hasPoll: core.serialization.property( + 'has_poll', + core.serialization.boolean().optional(), + ), + markedAsSpamAt: core.serialization.property( + 'marked_as_spam_at', + core.serialization.string().optional(), + ), + discordMeta: core.serialization.property( + 'discord_meta', + GetGlobalActivityResponseItemThreadDiscordMeta.optional(), + ), + profileName: core.serialization.property( + 'profile_name', + core.serialization.string().optional(), + ), + profileAvatar: core.serialization.property( + 'profile_avatar', + core.serialization.string().optional(), + ), + userId: core.serialization.property('user_id', core.serialization.number()), + userAddress: core.serialization.property( + 'user_address', + core.serialization.string(), + ), + topic: GetGlobalActivityResponseItemThreadTopic, +}); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts new file mode 100644 index 00000000000..cc303ef8e8c --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetGlobalActivityResponseItemThreadDiscordMetaUser } from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; +export declare const GetGlobalActivityResponseItemThreadDiscordMeta: core.serialization.ObjectSchema< + serializers.GetGlobalActivityResponseItemThreadDiscordMeta.Raw, + CommonApi.GetGlobalActivityResponseItemThreadDiscordMeta +>; +export declare namespace GetGlobalActivityResponseItemThreadDiscordMeta { + interface Raw { + user: GetGlobalActivityResponseItemThreadDiscordMetaUser.Raw; + channel_id: string; + message_id: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js new file mode 100644 index 00000000000..5bed3d55849 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetGlobalActivityResponseItemThreadDiscordMetaUser } from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; +export const GetGlobalActivityResponseItemThreadDiscordMeta = + core.serialization.object({ + user: GetGlobalActivityResponseItemThreadDiscordMetaUser, + channelId: core.serialization.property( + 'channel_id', + core.serialization.string(), + ), + messageId: core.serialization.property( + 'message_id', + core.serialization.string(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts new file mode 100644 index 00000000000..25f73b5a740 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetGlobalActivityResponseItemThreadDiscordMetaUser: core.serialization.ObjectSchema< + serializers.GetGlobalActivityResponseItemThreadDiscordMetaUser.Raw, + CommonApi.GetGlobalActivityResponseItemThreadDiscordMetaUser +>; +export declare namespace GetGlobalActivityResponseItemThreadDiscordMetaUser { + interface Raw { + id: string; + username: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js new file mode 100644 index 00000000000..8135781f014 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetGlobalActivityResponseItemThreadDiscordMetaUser = + core.serialization.object({ + id: core.serialization.string(), + username: core.serialization.string(), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts new file mode 100644 index 00000000000..d8771177dfd --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetGlobalActivityResponseItemThreadTopic: core.serialization.ObjectSchema< + serializers.GetGlobalActivityResponseItemThreadTopic.Raw, + CommonApi.GetGlobalActivityResponseItemThreadTopic +>; +export declare namespace GetGlobalActivityResponseItemThreadTopic { + interface Raw { + id: number; + name: string; + description: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js new file mode 100644 index 00000000000..2a83dc18f36 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetGlobalActivityResponseItemThreadTopic = + core.serialization.object({ + id: core.serialization.number(), + name: core.serialization.string(), + description: core.serialization.string(), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetNewContentResponse.d.ts b/libs/api-client/src/serialization/resources/user/types/GetNewContentResponse.d.ts new file mode 100644 index 00000000000..c5af9ad29b2 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetNewContentResponse.d.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetNewContentResponse: core.serialization.ObjectSchema< + serializers.GetNewContentResponse.Raw, + CommonApi.GetNewContentResponse +>; +export declare namespace GetNewContentResponse { + interface Raw { + joinedCommunityIdsWithNewContent: string[]; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetNewContentResponse.js b/libs/api-client/src/serialization/resources/user/types/GetNewContentResponse.js new file mode 100644 index 00000000000..95565a916a8 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetNewContentResponse.js @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetNewContentResponse = core.serialization.object({ + joinedCommunityIdsWithNewContent: core.serialization.list( + core.serialization.string(), + ), +}); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.d.ts new file mode 100644 index 00000000000..c45becf5f65 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.d.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetUserActivityResponseItemRecentCommentsItem } from './GetUserActivityResponseItemRecentCommentsItem'; +import { GetUserActivityResponseItemThread } from './GetUserActivityResponseItemThread'; +export declare const GetUserActivityResponseItem: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItem.Raw, + CommonApi.GetUserActivityResponseItem +>; +export declare namespace GetUserActivityResponseItem { + interface Raw { + thread: GetUserActivityResponseItemThread.Raw; + recent_comments?: + | GetUserActivityResponseItemRecentCommentsItem.Raw[] + | null; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.js new file mode 100644 index 00000000000..af90d6c69ba --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.js @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetUserActivityResponseItemRecentCommentsItem } from './GetUserActivityResponseItemRecentCommentsItem'; +import { GetUserActivityResponseItemThread } from './GetUserActivityResponseItemThread'; +export const GetUserActivityResponseItem = core.serialization.object({ + thread: GetUserActivityResponseItemThread, + recentComments: core.serialization.property( + 'recent_comments', + core.serialization + .list(GetUserActivityResponseItemRecentCommentsItem) + .optional(), + ), +}); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts new file mode 100644 index 00000000000..d4ba2d0af59 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetUserActivityResponseItemRecentCommentsItemDiscordMeta } from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; +export declare const GetUserActivityResponseItemRecentCommentsItem: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemRecentCommentsItem.Raw, + CommonApi.GetUserActivityResponseItemRecentCommentsItem +>; +export declare namespace GetUserActivityResponseItemRecentCommentsItem { + interface Raw { + id: number; + address: string; + text: string; + created_at: string; + updated_at?: string | null; + deleted_at?: string | null; + marked_as_spam_at?: string | null; + discord_meta?: GetUserActivityResponseItemRecentCommentsItemDiscordMeta.Raw | null; + profile_name?: string | null; + profile_avatar_url?: string | null; + user_id?: number | null; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js new file mode 100644 index 00000000000..e44389192bc --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js @@ -0,0 +1,43 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetUserActivityResponseItemRecentCommentsItemDiscordMeta } from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; +export const GetUserActivityResponseItemRecentCommentsItem = + core.serialization.object({ + id: core.serialization.number(), + address: core.serialization.string(), + text: core.serialization.string(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.string(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.string().optional(), + ), + deletedAt: core.serialization.property( + 'deleted_at', + core.serialization.string().optional(), + ), + markedAsSpamAt: core.serialization.property( + 'marked_as_spam_at', + core.serialization.string().optional(), + ), + discordMeta: core.serialization.property( + 'discord_meta', + GetUserActivityResponseItemRecentCommentsItemDiscordMeta.optional(), + ), + profileName: core.serialization.property( + 'profile_name', + core.serialization.string().optional(), + ), + profileAvatarUrl: core.serialization.property( + 'profile_avatar_url', + core.serialization.string().optional(), + ), + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.d.ts new file mode 100644 index 00000000000..c777dae173d --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.d.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser } from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export declare const GetUserActivityResponseItemRecentCommentsItemDiscordMeta: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemRecentCommentsItemDiscordMeta.Raw, + CommonApi.GetUserActivityResponseItemRecentCommentsItemDiscordMeta +>; +export declare namespace GetUserActivityResponseItemRecentCommentsItemDiscordMeta { + interface Raw { + user: GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.Raw; + channel_id: string; + message_id: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.js new file mode 100644 index 00000000000..633055d8ed1 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMeta.js @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser } from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export const GetUserActivityResponseItemRecentCommentsItemDiscordMeta = + core.serialization.object({ + user: GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser, + channelId: core.serialization.property( + 'channel_id', + core.serialization.string(), + ), + messageId: core.serialization.property( + 'message_id', + core.serialization.string(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts new file mode 100644 index 00000000000..0112ef98179 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.Raw, + CommonApi.GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser +>; +export declare namespace GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser { + interface Raw { + id: string; + username: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.js new file mode 100644 index 00000000000..90302d4076a --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser.js @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser = + core.serialization.object({ + id: core.serialization.string(), + username: core.serialization.string(), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.d.ts new file mode 100644 index 00000000000..5fd44dea174 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.d.ts @@ -0,0 +1,37 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetUserActivityResponseItemThreadDiscordMeta } from './GetUserActivityResponseItemThreadDiscordMeta'; +import { GetUserActivityResponseItemThreadTopic } from './GetUserActivityResponseItemThreadTopic'; +export declare const GetUserActivityResponseItemThread: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemThread.Raw, + CommonApi.GetUserActivityResponseItemThread +>; +export declare namespace GetUserActivityResponseItemThread { + interface Raw { + id: number; + community_id: string; + body: string; + title: string; + numberOfComments: number; + created_at?: string | null; + updated_at?: string | null; + deleted_at?: string | null; + locked_at?: string | null; + kind: string; + stage: string; + archived_at?: string | null; + read_only: boolean; + has_poll?: boolean | null; + marked_as_spam_at?: string | null; + discord_meta?: GetUserActivityResponseItemThreadDiscordMeta.Raw | null; + profile_name?: string | null; + profile_avatar?: string | null; + user_id: number; + user_address: string; + topic: GetUserActivityResponseItemThreadTopic.Raw; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.js new file mode 100644 index 00000000000..f309826e29c --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.js @@ -0,0 +1,68 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetUserActivityResponseItemThreadDiscordMeta } from './GetUserActivityResponseItemThreadDiscordMeta'; +import { GetUserActivityResponseItemThreadTopic } from './GetUserActivityResponseItemThreadTopic'; +export const GetUserActivityResponseItemThread = core.serialization.object({ + id: core.serialization.number(), + communityId: core.serialization.property( + 'community_id', + core.serialization.string(), + ), + body: core.serialization.string(), + title: core.serialization.string(), + numberOfComments: core.serialization.number(), + createdAt: core.serialization.property( + 'created_at', + core.serialization.string().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.string().optional(), + ), + deletedAt: core.serialization.property( + 'deleted_at', + core.serialization.string().optional(), + ), + lockedAt: core.serialization.property( + 'locked_at', + core.serialization.string().optional(), + ), + kind: core.serialization.string(), + stage: core.serialization.string(), + archivedAt: core.serialization.property( + 'archived_at', + core.serialization.string().optional(), + ), + readOnly: core.serialization.property( + 'read_only', + core.serialization.boolean(), + ), + hasPoll: core.serialization.property( + 'has_poll', + core.serialization.boolean().optional(), + ), + markedAsSpamAt: core.serialization.property( + 'marked_as_spam_at', + core.serialization.string().optional(), + ), + discordMeta: core.serialization.property( + 'discord_meta', + GetUserActivityResponseItemThreadDiscordMeta.optional(), + ), + profileName: core.serialization.property( + 'profile_name', + core.serialization.string().optional(), + ), + profileAvatar: core.serialization.property( + 'profile_avatar', + core.serialization.string().optional(), + ), + userId: core.serialization.property('user_id', core.serialization.number()), + userAddress: core.serialization.property( + 'user_address', + core.serialization.string(), + ), + topic: GetUserActivityResponseItemThreadTopic, +}); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts new file mode 100644 index 00000000000..05d0510a717 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetUserActivityResponseItemThreadDiscordMetaUser } from './GetUserActivityResponseItemThreadDiscordMetaUser'; +export declare const GetUserActivityResponseItemThreadDiscordMeta: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemThreadDiscordMeta.Raw, + CommonApi.GetUserActivityResponseItemThreadDiscordMeta +>; +export declare namespace GetUserActivityResponseItemThreadDiscordMeta { + interface Raw { + user: GetUserActivityResponseItemThreadDiscordMetaUser.Raw; + channel_id: string; + message_id: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js new file mode 100644 index 00000000000..ae53c7f686d --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +import { GetUserActivityResponseItemThreadDiscordMetaUser } from './GetUserActivityResponseItemThreadDiscordMetaUser'; +export const GetUserActivityResponseItemThreadDiscordMeta = + core.serialization.object({ + user: GetUserActivityResponseItemThreadDiscordMetaUser, + channelId: core.serialization.property( + 'channel_id', + core.serialization.string(), + ), + messageId: core.serialization.property( + 'message_id', + core.serialization.string(), + ), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts new file mode 100644 index 00000000000..27d55cc03e9 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetUserActivityResponseItemThreadDiscordMetaUser: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemThreadDiscordMetaUser.Raw, + CommonApi.GetUserActivityResponseItemThreadDiscordMetaUser +>; +export declare namespace GetUserActivityResponseItemThreadDiscordMetaUser { + interface Raw { + id: string; + username: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js new file mode 100644 index 00000000000..35eb77b3aba --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetUserActivityResponseItemThreadDiscordMetaUser = + core.serialization.object({ + id: core.serialization.string(), + username: core.serialization.string(), + }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts new file mode 100644 index 00000000000..9091b6f7425 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetUserActivityResponseItemThreadTopic: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemThreadTopic.Raw, + CommonApi.GetUserActivityResponseItemThreadTopic +>; +export declare namespace GetUserActivityResponseItemThreadTopic { + interface Raw { + id: number; + name: string; + description: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.js new file mode 100644 index 00000000000..ed1d22c098d --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.js @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetUserActivityResponseItemThreadTopic = core.serialization.object( + { + id: core.serialization.number(), + name: core.serialization.string(), + description: core.serialization.string(), + }, +); diff --git a/libs/api-client/src/serialization/resources/user/types/index.d.ts b/libs/api-client/src/serialization/resources/user/types/index.d.ts new file mode 100644 index 00000000000..8af3cf3d4d1 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/index.d.ts @@ -0,0 +1,17 @@ +export * from './GetGlobalActivityResponseItem'; +export * from './GetGlobalActivityResponseItemRecentCommentsItem'; +export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; +export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export * from './GetGlobalActivityResponseItemThread'; +export * from './GetGlobalActivityResponseItemThreadDiscordMeta'; +export * from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; +export * from './GetGlobalActivityResponseItemThreadTopic'; +export * from './GetNewContentResponse'; +export * from './GetUserActivityResponseItem'; +export * from './GetUserActivityResponseItemRecentCommentsItem'; +export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; +export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export * from './GetUserActivityResponseItemThread'; +export * from './GetUserActivityResponseItemThreadDiscordMeta'; +export * from './GetUserActivityResponseItemThreadDiscordMetaUser'; +export * from './GetUserActivityResponseItemThreadTopic'; diff --git a/libs/api-client/src/serialization/resources/user/types/index.js b/libs/api-client/src/serialization/resources/user/types/index.js new file mode 100644 index 00000000000..8af3cf3d4d1 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/index.js @@ -0,0 +1,17 @@ +export * from './GetGlobalActivityResponseItem'; +export * from './GetGlobalActivityResponseItemRecentCommentsItem'; +export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; +export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export * from './GetGlobalActivityResponseItemThread'; +export * from './GetGlobalActivityResponseItemThreadDiscordMeta'; +export * from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; +export * from './GetGlobalActivityResponseItemThreadTopic'; +export * from './GetNewContentResponse'; +export * from './GetUserActivityResponseItem'; +export * from './GetUserActivityResponseItemRecentCommentsItem'; +export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; +export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; +export * from './GetUserActivityResponseItemThread'; +export * from './GetUserActivityResponseItemThreadDiscordMeta'; +export * from './GetUserActivityResponseItemThreadDiscordMetaUser'; +export * from './GetUserActivityResponseItemThreadTopic'; diff --git a/packages/commonwealth/test/integration/api/userDashboard.spec.ts b/packages/commonwealth/test/integration/api/userDashboard.spec.ts index a1feeb11f0d..539a55dc0d2 100644 --- a/packages/commonwealth/test/integration/api/userDashboard.spec.ts +++ b/packages/commonwealth/test/integration/api/userDashboard.spec.ts @@ -162,7 +162,7 @@ describe('User Dashboard API', () => { }); describe('/GetUserActivity', () => { - const apiUrl = '/api/internal/trpc/feed.GetUserActivity'; + const apiUrl = '/api/internal/trpc/feed.getUserActivity'; test('should fail without JWT', async () => { const res = await chai.request From a4f7e7a99204e385da31fd0190415b3d22e0446d Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 11 Oct 2024 10:06:08 +0500 Subject: [PATCH 116/425] Added migration to allows existing groups/topics to have full topic level permissioning --- ...igrate-existing-group-topic-permissions.js | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js diff --git a/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js b/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js new file mode 100644 index 00000000000..3bb8ecd265b --- /dev/null +++ b/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js @@ -0,0 +1,30 @@ +'use strict'; + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.sequelize.transaction(async (t) => { + await queryInterface.sequelize.query( + ` + INSERT INTO "GroupTopicPermissions" + (group_id, topic_id, allowed_actions, created_at, updated_at) + SELECT + unnest(t.group_ids) AS group_id, + t.id AS topic_id, + 'UPVOTE_AND_COMMENT_POST' AS allowed_actions, + NOW() AS created_at, + NOW() AS updated_at + FROM "Topics" t + WHERE + ARRAY_LENGTH(t.group_ids, 1) IS NOT NULL + AND ARRAY_LENGTH(t.group_ids, 1) > 0; + `, + { transaction: t }, + ); + }); + }, + + async down(queryInterface, Sequelize) { + // not really-possible/recommended to rollback since "GroupTopicPermissions" might have more entries + }, +}; From 12ff29cf594a854426f6221773ead968fdceb26a Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 11 Oct 2024 10:14:25 +0500 Subject: [PATCH 117/425] Fix migration --- .../controllers/server_groups_methods/get_groups.ts | 12 +++++------- .../server_groups_methods/refresh_membership.ts | 11 ++++------- ...95545-migrate-existing-group-topic-permissions.js | 2 +- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts b/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts index 0a56395bbd1..fcb5003a829 100644 --- a/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts +++ b/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts @@ -94,13 +94,11 @@ export async function __getGroups( .filter((t) => t.group_ids!.includes(group.id!)) .map((t) => { const temp: TopicAttributesWithPermission = { ...t.toJSON() }; - temp.permission = - ( - (group as GroupInstanceWithTopicPermissions) - .GroupTopicPermissions || [] - ).find((gtp) => gtp.topic_id === t.id)?.allowed_actions || - // TODO: this fallback should be via a migration for existing communities - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST; + temp.permission = ( + (group as GroupInstanceWithTopicPermissions) + .GroupTopicPermissions || [] + ).find((gtp) => gtp.topic_id === t.id) + ?.allowed_actions as GroupTopicPermissionEnum; return temp; }), })); diff --git a/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts b/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts index 2c33f527a93..e7dc20f43ba 100644 --- a/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts +++ b/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts @@ -75,13 +75,10 @@ export async function __refreshMembership( .filter((t) => t.group_ids!.includes(membership.group_id)) .map((t) => ({ id: t.id, - permission: - (groups as GroupInstanceWithTopicPermissions[]) - .find((g) => g.id === membership.group_id) - ?.GroupTopicPermissions?.find((gtp) => gtp.topic_id === t.id) - ?.allowed_actions || - // TODO: this fallback should be via a migration for existing communities - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + permission: (groups as GroupInstanceWithTopicPermissions[]) + .find((g) => g.id === membership.group_id) + ?.GroupTopicPermissions?.find((gtp) => gtp.topic_id === t.id) + ?.allowed_actions as GroupTopicPermissionEnum, })), allowed: !membership.reject_reason, rejectReason: membership.reject_reason, diff --git a/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js b/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js index 3bb8ecd265b..9383d7783e2 100644 --- a/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js +++ b/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js @@ -11,7 +11,7 @@ module.exports = { SELECT unnest(t.group_ids) AS group_id, t.id AS topic_id, - 'UPVOTE_AND_COMMENT_POST' AS allowed_actions, + 'UPVOTE_AND_COMMENT_AND_POST' AS allowed_actions, NOW() AS created_at, NOW() AS updated_at FROM "Topics" t From 74c20f3c01c463e39ddbd2783a81cb8361142c90 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 11 Oct 2024 10:17:46 +0500 Subject: [PATCH 118/425] Fix group card topics styling --- .../Members/GroupsSection/GroupCard/GroupCard.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.scss b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.scss index e38570fc430..aaa2dce4216 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.scss +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.scss @@ -52,11 +52,16 @@ padding: 8px 0; width: 100%; display: grid; + align-items: center; grid-template-columns: 1fr 1fr; .Tag { height: auto; + .Text { + height: fit-content; + } + @include extraSmall { .Text { word-wrap: break-word; From ba6be003d6d7884dd0aae522326f36a0bbda26f9 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 11 Oct 2024 10:31:32 +0500 Subject: [PATCH 119/425] Fix CI --- .../community/community-lifecycle.spec.ts | 25 ++++++++++++++++--- .../CWContentPage/CWContentPage.tsx | 1 - 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/libs/model/test/community/community-lifecycle.spec.ts b/libs/model/test/community/community-lifecycle.spec.ts index 9adb0f9f583..358603b9cf3 100644 --- a/libs/model/test/community/community-lifecycle.spec.ts +++ b/libs/model/test/community/community-lifecycle.spec.ts @@ -7,7 +7,10 @@ import { dispose, query, } from '@hicommonwealth/core'; -import { TopicWeightedVoting } from '@hicommonwealth/schemas'; +import { + GroupTopicPermissionEnum, + TopicWeightedVoting, +} from '@hicommonwealth/schemas'; import { ChainBase, ChainType } from '@hicommonwealth/shared'; import { Chance } from 'chance'; import { CreateTopic } from 'model/src/community/CreateTopic.command'; @@ -38,7 +41,10 @@ import { seed } from '../../src/tester'; const chance = Chance(); -function buildCreateGroupPayload(community_id: string, topics: number[] = []) { +function buildCreateGroupPayload( + community_id: string, + topics: { id: number; permission: GroupTopicPermissionEnum }[] = [], +) { return { community_id, metadata: { @@ -355,7 +361,20 @@ describe('Community lifecycle', () => { await expect( command(CreateGroup(), { actor: ethAdminActor, - payload: buildCreateGroupPayload(community.id, [1, 2, 3]), + payload: buildCreateGroupPayload(community.id, [ + { + id: 1, + permission: GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + }, + { + id: 2, + permission: GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + }, + { + id: 3, + permission: GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + }, + ]), }), ).rejects.toThrow(CreateGroupErrors.InvalidTopics); }); diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx index 45bd2e76b73..4feb33f2e25 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx @@ -229,7 +229,6 @@ export const CWContentPage = ({ ? foundTopicPermissions?.permission : undefined, }); - console.log('disabledActionsTooltipText => ', disabledActionsTooltipText); const mainBody = (
From e8e07799c4dea85790b90c92a2efd76927e0611b Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 11 Oct 2024 10:40:57 +0500 Subject: [PATCH 120/425] Fix lint --- .../Members/GroupsSection/GroupCard/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts index 5066de8776c..954b4c038d5 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts @@ -19,6 +19,6 @@ export type GroupCardProps = { allowLists?: string[]; topics: { id: number; name: string; permission?: TopicPermissions }[]; canEdit?: boolean; - onEditClick?: () => any; + onEditClick?: () => void; profiles?: Map; }; From 77840a1bb57c0cbec343f1934755657ed231890e Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 11 Oct 2024 13:49:48 +0500 Subject: [PATCH 121/425] Allow community admins to bypass topic gating restrictions --- .../components/NewThreadFormLegacy/NewThreadForm.tsx | 9 +++++++-- .../components/NewThreadFormModern/NewThreadForm.tsx | 9 +++++++-- .../component_kit/CWContentPage/CWContentPage.tsx | 5 +++++ .../client/scripts/views/components/feed.tsx | 8 ++++++++ .../scripts/views/pages/discussions/DiscussionsPage.tsx | 3 +++ .../scripts/views/pages/overview/TopicSummaryRow.tsx | 1 + .../scripts/views/pages/view_thread/ViewThreadPage.tsx | 1 + 7 files changed, 32 insertions(+), 4 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index 3a1fe756e90..b638cfd6f06 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -1,6 +1,4 @@ import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; -import { buildCreateThreadInput } from 'client/scripts/state/api/threads/createThread'; -import { useAuthModalStore } from 'client/scripts/state/ui/modals'; import { notifyError } from 'controllers/app/notifications'; import { SessionKeyError } from 'controllers/server/sessions'; import { parseCustomStages } from 'helpers'; @@ -15,8 +13,11 @@ import app from 'state'; import { useGetUserEthBalanceQuery } from 'state/api/communityStake'; import { useFetchGroupsQuery } from 'state/api/groups'; import { useCreateThreadMutation } from 'state/api/threads'; +import { buildCreateThreadInput } from 'state/api/threads/createThread'; import { useFetchTopicsQuery } from 'state/api/topics'; +import { useAuthModalStore } from 'state/ui/modals'; import useUserStore from 'state/ui/user'; +import Permissions from 'utils/Permissions'; import JoinCommunityBanner from 'views/components/JoinCommunityBanner'; import CustomTopicOption from 'views/components/NewThreadFormLegacy/CustomTopicOption'; import useJoinCommunity from 'views/components/SublayoutHeader/useJoinCommunity'; @@ -117,6 +118,8 @@ export const NewThreadForm = () => { topicId: threadTopic?.id || 0, }); + const isAdmin = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(); + const { mutateAsync: createThread } = useCreateThreadMutation({ communityId, }); @@ -220,6 +223,7 @@ export const NewThreadForm = () => { isCommunityMember: !!user.activeAccount, isThreadTopicGated: isRestrictedMembership, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, ) @@ -417,6 +421,7 @@ export const NewThreadForm = () => { {canShowTopicPermissionBanner && foundTopicPermissions && + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, ) && ( diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index 334b3fcf230..9e2a5c0d793 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -1,6 +1,4 @@ import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; -import { buildCreateThreadInput } from 'client/scripts/state/api/threads/createThread'; -import { useAuthModalStore } from 'client/scripts/state/ui/modals'; import { notifyError } from 'controllers/app/notifications'; import { SessionKeyError } from 'controllers/server/sessions'; import { parseCustomStages } from 'helpers'; @@ -15,8 +13,11 @@ import app from 'state'; import { useGetUserEthBalanceQuery } from 'state/api/communityStake'; import { useFetchGroupsQuery } from 'state/api/groups'; import { useCreateThreadMutation } from 'state/api/threads'; +import { buildCreateThreadInput } from 'state/api/threads/createThread'; import { useFetchTopicsQuery } from 'state/api/topics'; +import { useAuthModalStore } from 'state/ui/modals'; import useUserStore from 'state/ui/user'; +import Permissions from 'utils/Permissions'; import JoinCommunityBanner from 'views/components/JoinCommunityBanner'; import MarkdownEditor from 'views/components/MarkdownEditor'; import { MarkdownSubmitButton } from 'views/components/MarkdownEditor/MarkdownSubmitButton'; @@ -114,6 +115,8 @@ export const NewThreadForm = () => { topicId: threadTopic?.id || 0, }); + const isAdmin = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(); + const { mutateAsync: createThread } = useCreateThreadMutation({ communityId, }); @@ -204,6 +207,7 @@ export const NewThreadForm = () => { isCommunityMember: !!user.activeAccount, isThreadTopicGated: isRestrictedMembership, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, ) @@ -391,6 +395,7 @@ export const NewThreadForm = () => { {canShowTopicPermissionBanner && foundTopicPermissions && + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, ) && ( diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx index 4feb33f2e25..df0226e0738 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx @@ -9,6 +9,7 @@ import { useNavigate } from 'react-router'; import { useSearchParams } from 'react-router-dom'; import app from 'state'; import useUserStore from 'state/ui/user'; +import Permissions from 'utils/Permissions'; import { ThreadContestTagContainer } from 'views/components/ThreadContestTag'; import { isHot } from 'views/pages/discussions/helpers'; import Account from '../../../../models/Account'; @@ -133,6 +134,8 @@ export const CWContentPage = ({ topicId: thread?.topic?.id || 0, }); + const isAdmin = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(); + const tabSelected = useMemo(() => { const tab = Object.fromEntries(urlQueryParams.entries())?.tab; if (!tab) { @@ -213,6 +216,7 @@ export const CWContentPage = ({ const disabledReactPermissionTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE, ) @@ -223,6 +227,7 @@ export const CWContentPage = ({ const disabledCommentPermissionTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, ) diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index e047e63a98d..7801126a0ab 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -62,12 +62,20 @@ const FeedThread = ({ thread }: { thread: Thread }) => { topicId: thread?.topic?.id || 0, }); + const isAdmin = + Permissions.isSiteAdmin() || + Permissions.isCommunityAdmin({ + id: community?.id || '', + adminsAndMods: community?.adminsAndMods || [], + }); + const disabledActionsTooltipText = getThreadActionTooltipText({ isCommunityMember: Permissions.isCommunityMember(thread.communityId), isThreadArchived: !!thread?.archivedAt, isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, // on this page we only show comment option ) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index 3e6af844801..9a552caf48c 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -235,6 +235,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE, ) @@ -246,6 +247,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { { isCommunityMember: !!user.activeAccount, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE, ) @@ -258,6 +260,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, ) diff --git a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx index 815ee7f2508..21f6cd9ba02 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx @@ -119,6 +119,7 @@ export const TopicSummaryRow = ({ isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, // on this page we only show comment option ) diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index e36cf0f454d..8fc60f0cbee 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -332,6 +332,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, threadTopicInteractionRestriction: + !isAdmin && !foundTopicPermissions?.permission?.includes( GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, ) From 1f42e8ce43bb50238e70878a3aeda6c5c078f9d3 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 11 Oct 2024 14:12:12 +0500 Subject: [PATCH 122/425] Fixed failing unit tests --- libs/model/test/thread/thread-lifecycle.spec.ts | 6 ++++++ libs/schemas/src/index.ts | 1 + 2 files changed, 7 insertions(+) diff --git a/libs/model/test/thread/thread-lifecycle.spec.ts b/libs/model/test/thread/thread-lifecycle.spec.ts index 866dc4c2ff7..4d04763e4df 100644 --- a/libs/model/test/thread/thread-lifecycle.spec.ts +++ b/libs/model/test/thread/thread-lifecycle.spec.ts @@ -173,6 +173,12 @@ describe('Thread lifecycle', () => { group_id: commentGroupId, allowed_actions: [schemas.PermissionEnum.CREATE_COMMENT], }); + await seed('GroupTopicPermission', { + group_id: threadGroupId, + topic_id: _community?.topics?.[0]?.id || 0, + allowed_actions: + schemas.GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + }); community = _community!; roles.forEach((role) => { diff --git a/libs/schemas/src/index.ts b/libs/schemas/src/index.ts index d5c6785c811..fbdfcd5d0d9 100644 --- a/libs/schemas/src/index.ts +++ b/libs/schemas/src/index.ts @@ -24,6 +24,7 @@ export type Aggregates = Extract< | 'GroupPermission' | 'Tags' | 'CommunityTags' + | 'GroupTopicPermission' >; export * from './commands'; From c425b264b46c3fc35a98b478d9d1d6e01ea9a919 Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 11 Oct 2024 13:11:07 +0200 Subject: [PATCH 123/425] Remove contest flag --- .../client/scripts/helpers/feature-flags.ts | 1 - .../scripts/navigation/CommonDomainRoutes.tsx | 75 +++++++++---------- .../scripts/navigation/CustomDomainRoutes.tsx | 75 +++++++++---------- .../client/scripts/navigation/Router.tsx | 3 - .../scripts/state/api/contests/getContests.ts | 7 +- .../AdminOnboardingSlider.tsx | 6 +- .../NewThreadFormLegacy/NewThreadForm.tsx | 8 +- .../NewThreadFormModern/NewThreadForm.tsx | 8 +- .../ThreadContestTagContainer.tsx | 5 +- .../sidebar/AdminSection/AdminSection.tsx | 48 ++++++------ .../components/sidebar/discussion_section.tsx | 9 +-- .../Contests/useCommunityContests.ts | 8 +- .../HeaderWithFilters/HeaderWithFilters.tsx | 8 +- packages/commonwealth/client/vite.config.ts | 1 - 14 files changed, 110 insertions(+), 152 deletions(-) diff --git a/packages/commonwealth/client/scripts/helpers/feature-flags.ts b/packages/commonwealth/client/scripts/helpers/feature-flags.ts index 0e3d0900634..48c8a18d281 100644 --- a/packages/commonwealth/client/scripts/helpers/feature-flags.ts +++ b/packages/commonwealth/client/scripts/helpers/feature-flags.ts @@ -21,7 +21,6 @@ const buildFlag = (env: string | undefined) => { // WARN: for frontend work you MUST define these feature flags in // vite.config.ts (locally) or in Unleash (remote apps) or they won't be passed to the frontend. const featureFlags = { - contest: buildFlag(process.env.FLAG_CONTEST), contestDev: buildFlag(process.env.FLAG_CONTEST_DEV), weightedTopics: buildFlag(process.env.FLAG_WEIGHTED_TOPICS), knockPushNotifications: buildFlag( diff --git a/packages/commonwealth/client/scripts/navigation/CommonDomainRoutes.tsx b/packages/commonwealth/client/scripts/navigation/CommonDomainRoutes.tsx index 3e218fa3a19..25f4c48a5eb 100644 --- a/packages/commonwealth/client/scripts/navigation/CommonDomainRoutes.tsx +++ b/packages/commonwealth/client/scripts/navigation/CommonDomainRoutes.tsx @@ -117,7 +117,6 @@ const CommunityNotFoundPage = lazy( ); const CommonDomainRoutes = ({ - contestEnabled, weightedTopicsEnabled, tokenizedCommunityEnabled, }: RouteFeatureFlags) => [ @@ -420,45 +419,41 @@ const CommonDomainRoutes = ({ scoped: true, })} />, - ...(contestEnabled - ? [ - , - , - , - , - , - ] - : []), + , + , + , + , + , import('views/pages/edit_new_profile')); const ProfilePageRedirect = lazy(() => import('views/pages/profile_redirect')); const CustomDomainRoutes = ({ - contestEnabled, weightedTopicsEnabled, tokenizedCommunityEnabled, }: RouteFeatureFlags) => { @@ -320,45 +319,41 @@ const CustomDomainRoutes = ({ scoped: true, })} />, - ...(contestEnabled - ? [ - , - , - , - , - , - ] - : []), + , + , + , + , + , { const client = OpenFeature.getClient(); - const contestEnabled = client.getBooleanValue('contest', false); const weightedTopicsEnabled = client.getBooleanValue('weightedTopics', false); @@ -30,7 +28,6 @@ const Router = () => { ); const flags = { - contestEnabled, weightedTopicsEnabled, tokenizedCommunityEnabled, }; diff --git a/packages/commonwealth/client/scripts/state/api/contests/getContests.ts b/packages/commonwealth/client/scripts/state/api/contests/getContests.ts index ed43005ca3a..eeaa6dd9d2d 100644 --- a/packages/commonwealth/client/scripts/state/api/contests/getContests.ts +++ b/packages/commonwealth/client/scripts/state/api/contests/getContests.ts @@ -3,9 +3,7 @@ import { z } from 'zod'; import { GetAllContests } from '@hicommonwealth/schemas'; import { trpc } from 'utils/trpcClient'; -type UseGetContestsQueryProps = z.infer & { - enabled: boolean; -}; +type UseGetContestsQueryProps = z.infer; const CONTESTS_STALE_TIME = 10 * 1_000; // 10 s @@ -13,7 +11,6 @@ const useGetContestsQuery = ({ contest_id, community_id, running, - enabled, }: UseGetContestsQueryProps) => { return trpc.contest.getAllContests.useQuery( { @@ -21,7 +18,7 @@ const useGetContestsQuery = ({ community_id, running, }, - { enabled: enabled && !!community_id, staleTime: CONTESTS_STALE_TIME }, + { enabled: !!community_id, staleTime: CONTESTS_STALE_TIME }, ); }; diff --git a/packages/commonwealth/client/scripts/views/components/AdminOnboardingSlider/AdminOnboardingSlider.tsx b/packages/commonwealth/client/scripts/views/components/AdminOnboardingSlider/AdminOnboardingSlider.tsx index 23c8f95d967..1e07a92f7cf 100644 --- a/packages/commonwealth/client/scripts/views/components/AdminOnboardingSlider/AdminOnboardingSlider.tsx +++ b/packages/commonwealth/client/scripts/views/components/AdminOnboardingSlider/AdminOnboardingSlider.tsx @@ -4,7 +4,6 @@ import shape3Url from 'assets/img/shapes/shape3.svg'; import shape4Url from 'assets/img/shapes/shape4.svg'; import shape5Url from 'assets/img/shapes/shape5.svg'; import shape6Url from 'assets/img/shapes/shape6.svg'; -import { useFlag } from 'hooks/useFlag'; import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useState } from 'react'; import app from 'state'; @@ -53,7 +52,6 @@ const CARD_TYPES = { export const AdminOnboardingSlider = () => { const [isModalVisible, setIsModalVisible] = useState(false); - const contestEnabled = useFlag('contest'); const navigate = useCommonNavigate(); @@ -127,7 +125,7 @@ export const AdminOnboardingSlider = () => { commonProtocol.ValidChains.SepoliaBase, ].includes(community?.ChainNode?.eth_chain_id); const isContestActionCompleted = - contestEnabled && isCommunitySupported && contestsData?.length > 0; + isCommunitySupported && contestsData?.length > 0; const isSliderHidden = !communityId || @@ -163,7 +161,7 @@ export const AdminOnboardingSlider = () => { headerText="Finish setting up your community" onDismiss={() => setIsModalVisible(true)} > - {contestEnabled && isCommunitySupported && ( + {isCommunitySupported && ( { const navigate = useCommonNavigate(); const location = useLocation(); - const contestsEnabled = useFlag('contest'); const [submitEntryChecked, setSubmitEntryChecked] = useState(false); @@ -58,7 +56,7 @@ export const NewThreadForm = () => { const communityId = app.activeChainId() || ''; const { data: topics = [], refetch: refreshTopics } = useFetchTopicsQuery({ communityId, - includeContestData: contestsEnabled, + includeContestData: true, apiEnabled: !!communityId, }); @@ -234,12 +232,12 @@ export const NewThreadForm = () => { }); const contestThreadBannerVisible = - contestsEnabled && isContestAvailable && hasTopicOngoingContest; + isContestAvailable && hasTopicOngoingContest; const isDisabledBecauseOfContestsConsent = contestThreadBannerVisible && !submitEntryChecked; const contestTopicAffordanceVisible = - contestsEnabled && isContestAvailable && hasTopicOngoingContest; + isContestAvailable && hasTopicOngoingContest; const walletBalanceError = isContestAvailable && diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index a49282fa545..a267d27cec0 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -4,7 +4,6 @@ import { notifyError } from 'controllers/app/notifications'; import { SessionKeyError } from 'controllers/server/sessions'; import { parseCustomStages } from 'helpers'; import { detectURL, getThreadActionTooltipText } from 'helpers/threads'; -import { useFlag } from 'hooks/useFlag'; import useJoinCommunityBanner from 'hooks/useJoinCommunityBanner'; import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useRef, useState } from 'react'; @@ -45,7 +44,6 @@ const MIN_ETH_FOR_CONTEST_THREAD = 0.0005; export const NewThreadForm = () => { const navigate = useCommonNavigate(); const location = useLocation(); - const contestsEnabled = useFlag('contest'); const markdownEditorMethodsRef = useRef(null); @@ -56,7 +54,7 @@ export const NewThreadForm = () => { const communityId = app.activeChainId() || ''; const { data: topics = [], refetch: refreshTopics } = useFetchTopicsQuery({ communityId, - includeContestData: contestsEnabled, + includeContestData: true, apiEnabled: !!communityId, }); @@ -218,12 +216,12 @@ export const NewThreadForm = () => { }); const contestThreadBannerVisible = - contestsEnabled && isContestAvailable && hasTopicOngoingContest; + isContestAvailable && hasTopicOngoingContest; const isDisabledBecauseOfContestsConsent = contestThreadBannerVisible && !submitEntryChecked; const contestTopicAffordanceVisible = - contestsEnabled && isContestAvailable && hasTopicOngoingContest; + isContestAvailable && hasTopicOngoingContest; const walletBalanceError = isContestAvailable && diff --git a/packages/commonwealth/client/scripts/views/components/ThreadContestTag/ThreadContestTagContainer.tsx b/packages/commonwealth/client/scripts/views/components/ThreadContestTag/ThreadContestTagContainer.tsx index 6a40078aa56..2a198d02338 100644 --- a/packages/commonwealth/client/scripts/views/components/ThreadContestTag/ThreadContestTagContainer.tsx +++ b/packages/commonwealth/client/scripts/views/components/ThreadContestTag/ThreadContestTagContainer.tsx @@ -1,6 +1,5 @@ import React from 'react'; -import { useFlag } from 'hooks/useFlag'; import { AssociatedContest } from 'models/Thread'; import ThreadContestTag from './ThreadContestTag'; @@ -13,11 +12,9 @@ interface ThreadContestTagContainerProps { const ThreadContestTagContainer = ({ associatedContests, }: ThreadContestTagContainerProps) => { - const contestsEnabled = useFlag('contest'); - const contestWinners = getWinnersFromAssociatedContests(associatedContests); - const showContestWinnerTag = contestsEnabled && contestWinners.length > 0; + const showContestWinnerTag = contestWinners.length > 0; return ( <> diff --git a/packages/commonwealth/client/scripts/views/components/sidebar/AdminSection/AdminSection.tsx b/packages/commonwealth/client/scripts/views/components/sidebar/AdminSection/AdminSection.tsx index 49f993fc8e0..389c54fdffb 100644 --- a/packages/commonwealth/client/scripts/views/components/sidebar/AdminSection/AdminSection.tsx +++ b/packages/commonwealth/client/scripts/views/components/sidebar/AdminSection/AdminSection.tsx @@ -4,13 +4,11 @@ import { handleRedirectClicks } from 'helpers'; import { useCommonNavigate } from 'navigation/helpers'; import { matchRoutes, useLocation } from 'react-router-dom'; import app from 'state'; -import { useFlag } from '../../../../hooks/useFlag'; import { SidebarSectionGroup } from '../sidebar_section'; import type { SectionGroupAttrs, SidebarSectionAttrs } from '../types'; import { useSidebarTreeToggle } from '../useSidebarTreeToggle'; const AdminSection = () => { - const contestsEnabled = useFlag('contest'); const communityId = app.activeChainId() || ''; const navigate = useCommonNavigate(); @@ -149,32 +147,28 @@ const AdminSection = () => { }); }, }, - ...(contestsEnabled - ? [ - { - title: 'Contests', - containsChildren: false, - displayData: null, - hasDefaultToggle: false, - isActive: !!matchesContestsRoute, - isVisible: true, - isUpdated: false, - onClick: (e, toggle: boolean) => { - e.preventDefault(); - resetSidebarState(); - handleRedirectClicks( - navigate, - e, - `/manage/contests`, - communityId, - () => { - setToggleTree(`children.contests.toggledState`, toggle); - }, - ); - }, + { + title: 'Contests', + containsChildren: false, + displayData: null, + hasDefaultToggle: false, + isActive: !!matchesContestsRoute, + isVisible: true, + isUpdated: false, + onClick: (e, toggle: boolean) => { + e.preventDefault(); + resetSidebarState(); + handleRedirectClicks( + navigate, + e, + `/manage/contests`, + communityId, + () => { + setToggleTree(`children.contests.toggledState`, toggle); }, - ] - : []), + ); + }, + }, { title: 'Analytics', containsChildren: false, diff --git a/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx b/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx index 2f7959af947..b45be22ffed 100644 --- a/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx +++ b/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx @@ -1,7 +1,6 @@ import React from 'react'; import 'components/sidebar/index.scss'; -import { useFlag } from 'hooks/useFlag'; import { useCommonNavigate } from 'navigation/helpers'; import { matchRoutes, useLocation } from 'react-router-dom'; import app from 'state'; @@ -56,8 +55,6 @@ export const DiscussionSection = ({ const navigate = useCommonNavigate(); const location = useLocation(); - const contestsEnabled = useFlag('contest'); - const matchesDiscussionsRoute = matchRoutes( [{ path: '/discussions' }, { path: ':scope/discussions' }], location, @@ -145,7 +142,7 @@ export const DiscussionSection = ({ }, displayData: null, }, - ...(contestsEnabled && isContestAvailable + ...(isContestAvailable ? [ { title: 'Contests', @@ -195,9 +192,7 @@ export const DiscussionSection = ({ for (const topic of topics) { if (topic.featuredInSidebar) { const topicInvolvedInActiveContest = - contestsEnabled && - topic?.id && - topicIdsIncludedInContest.includes(topic.id); + topic?.id && topicIdsIncludedInContest.includes(topic.id); const discussionSectionGroup: SectionGroupAttrs = { title: topic.name, diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/useCommunityContests.ts b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/useCommunityContests.ts index 4dbb0b54f71..84d9eb1acc9 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/useCommunityContests.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/useCommunityContests.ts @@ -2,14 +2,14 @@ import app from 'state'; import { useGetContestsQuery } from 'state/api/contests'; import { useCommunityStake } from 'views/components/CommunityStake'; import { Contest } from 'views/pages/CommunityManagement/Contests/ContestsList'; -import { useFlag } from '../../../../hooks/useFlag'; const useCommunityContests = () => { - const enabled = useFlag('contest'); const { stakeEnabled } = useCommunityStake(); const { data: contestsData, isLoading: isContestDataLoading } = - useGetContestsQuery({ community_id: app.activeChainId() || '', enabled }); + useGetContestsQuery({ + community_id: app.activeChainId() || '', + }); // @ts-expect-error StrictNullChecks const isContestAvailable = !isContestDataLoading && contestsData?.length > 0; @@ -24,7 +24,7 @@ const useCommunityContests = () => { stakeEnabled, isContestAvailable, contestsData: contestsData as unknown as Contest[], - isContestDataLoading: isContestDataLoading && enabled, + isContestDataLoading: isContestDataLoading, getContestByAddress, }; }; diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx index 39259c7f73c..7dd9ce51fe3 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx @@ -22,7 +22,6 @@ import { EditTopicModal } from 'views/modals/edit_topic_modal'; import { Contest } from 'views/pages/CommunityManagement/Contests/ContestsList'; import ContestCard from 'views/pages/CommunityManagement/Contests/ContestsList/ContestCard'; import useCommunityContests from 'views/pages/CommunityManagement/Contests/useCommunityContests'; -import { useFlag } from '../../../../hooks/useFlag'; import type Topic from '../../../../models/Topic'; import { ThreadFeaturedFilterTypes, @@ -58,7 +57,6 @@ export const HeaderWithFilters = ({ isOnArchivePage, activeContests, }: HeaderWithFiltersProps) => { - const contestsEnabled = useFlag('contest'); const navigate = useCommonNavigate(); const location = useLocation(); const [topicSelectedToEdit, setTopicSelectedToEdit] = useState< @@ -210,8 +208,6 @@ export const HeaderWithFilters = ({ } }; - const contestFiltersVisible = contestsEnabled && isContestAvailable; - return (
@@ -341,7 +337,7 @@ export const HeaderWithFilters = ({ onFilterSelect({ pickedTopic: item.value }); }} options={[ - ...(contestFiltersVisible + ...(isContestAvailable ? [{ type: 'header', label: 'Topics' }] : []), { @@ -354,7 +350,7 @@ export const HeaderWithFilters = ({ value: t.name, label: t.name, })), - ...(contestFiltersVisible + ...(isContestAvailable ? [ { type: 'header-divider', label: 'Contests' }, ...contestNameOptions, diff --git a/packages/commonwealth/client/vite.config.ts b/packages/commonwealth/client/vite.config.ts index 46846c4e3f4..70ec66e8376 100644 --- a/packages/commonwealth/client/vite.config.ts +++ b/packages/commonwealth/client/vite.config.ts @@ -33,7 +33,6 @@ export default defineConfig(({ mode }) => { // WARN: only used locally never in remote (Heroku) apps const featureFlags = { 'process.env.FLAG_NEW_EDITOR': JSON.stringify(env.FLAG_NEW_EDITOR), - 'process.env.FLAG_CONTEST': JSON.stringify(env.FLAG_CONTEST), 'process.env.FLAG_CONTEST_DEV': JSON.stringify(env.FLAG_CONTEST_DEV), 'process.env.FLAG_WEIGHTED_TOPICS': JSON.stringify( env.FLAG_WEIGHTED_TOPICS, From 8d5e7610e122ce99f2789140bf49b89ded94b824 Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 11 Oct 2024 13:35:04 +0200 Subject: [PATCH 124/425] General cleanup --- .../scripts/controllers/server/memberships.ts | 0 .../client/scripts/helpers/awsHelpers.ts | 2 +- .../client/scripts/helpers/getFetch.ts | 23 ------ .../client/scripts/helpers/index.tsx | 71 ------------------- .../client/scripts/helpers/truncate.ts | 4 +- .../client/scripts/helpers/typeGuards.ts | 24 ------- .../client/scripts/helpers/validateTypes.ts | 11 --- .../client/scripts/helpers/wallet.ts | 34 +-------- .../client/scripts/hooks/useForceRerender.ts | 2 +- .../client/scripts/stores/ActivityStore.ts | 63 ---------------- 10 files changed, 5 insertions(+), 229 deletions(-) delete mode 100644 packages/commonwealth/client/scripts/controllers/server/memberships.ts delete mode 100644 packages/commonwealth/client/scripts/helpers/getFetch.ts delete mode 100644 packages/commonwealth/client/scripts/stores/ActivityStore.ts diff --git a/packages/commonwealth/client/scripts/controllers/server/memberships.ts b/packages/commonwealth/client/scripts/controllers/server/memberships.ts deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/packages/commonwealth/client/scripts/helpers/awsHelpers.ts b/packages/commonwealth/client/scripts/helpers/awsHelpers.ts index cda0dfc1330..50fec4fec9b 100644 --- a/packages/commonwealth/client/scripts/helpers/awsHelpers.ts +++ b/packages/commonwealth/client/scripts/helpers/awsHelpers.ts @@ -1,6 +1,6 @@ export function replaceBucketWithCDN(url) { return url.replace( 's3.amazonaws.com/assets.commonwealth.im', - 'assets.commonwealth.im' + 'assets.commonwealth.im', ); } diff --git a/packages/commonwealth/client/scripts/helpers/getFetch.ts b/packages/commonwealth/client/scripts/helpers/getFetch.ts deleted file mode 100644 index 7c8a6ede464..00000000000 --- a/packages/commonwealth/client/scripts/helpers/getFetch.ts +++ /dev/null @@ -1,23 +0,0 @@ -export default async function getFetch( - url: string, - queryParams?: { [key: string]: any } -) { - let queryUrl; - if (queryParams) queryUrl = url + '?' + new URLSearchParams(queryParams); - try { - const response = await fetch(queryUrl || url, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - }, - }); - if (response.ok) { - const { result } = await response.json(); - return result; - } else { - console.error(`Fetch to ${queryUrl} failed, `, response); - } - } catch (e) { - console.error(e); - } -} diff --git a/packages/commonwealth/client/scripts/helpers/index.tsx b/packages/commonwealth/client/scripts/helpers/index.tsx index b076c2dade7..86c865cceaa 100644 --- a/packages/commonwealth/client/scripts/helpers/index.tsx +++ b/packages/commonwealth/client/scripts/helpers/index.tsx @@ -1,12 +1,8 @@ -import { ChainBase, ChainNetwork } from '@hicommonwealth/shared'; -import type { Coin } from 'adapters/currency'; import BigNumber from 'bignumber.js'; import moment from 'moment'; import React from 'react'; import app from 'state'; -import { getChainDecimals } from '../controllers/app/webWallets/utils'; import Account from '../models/Account'; -import IChainAdapter from '../models/IChainAdapter'; import { ThreadStage } from '../models/types'; export async function sleep(msec) { @@ -98,24 +94,6 @@ export function pluralizeWithoutNumberPrefix(num: number, str: string) { } } -export function articlize(str: string) { - if (str.trimLeft().match(/^[aeiouAEIOU]/)) { - return `an ${str.trimLeft()}`; - } else { - return `a ${str.trimLeft()}`; - } -} - -export function formatAsTitleCase(str: string) { - return str - .toLowerCase() - .split(' ') - .map((word) => { - return word.replace(word[0], word[0].toUpperCase()); - }) - .join(' '); -} - export function formatLastUpdated(timestamp) { if (timestamp.isBefore(moment().subtract(365, 'days'))) return timestamp.format('MMM D YYYY'); @@ -142,12 +120,6 @@ export function formatTimestamp(timestamp) { .replace(' month', 'mo')}`; } -export function formatTimestampAsDate(timestamp: moment.Moment) { - if (timestamp.isBefore(moment().startOf('year'))) - return timestamp.format('MMM D YYYY'); - else return timestamp.format('MMM D'); -} - // duplicated in adapters/currency.ts export function formatNumberLong(num: number) { // format small numbers with decimals, large numbers with commas @@ -158,21 +130,6 @@ export function formatNumberLong(num: number) { return nf.format(num); } -export function formatPercentShort(num: number) { - if (num === 0) return '0%'; - if (num === 1) return '100%'; - if (num > 1) return '100%+'; - return `${(num * 100).toFixed(1)}%`; -} - -/* Choose Total Digits to Display*/ -export function formatPercent(num: number, digits: number) { - if (num === 0) return '0%'; - if (num === 1) return '100%'; - if (num > 1) return '100%+'; - return `${(num * 100).toFixed(digits)}%`; -} - export function formatDuration( duration: moment.Duration, includeSeconds = true, @@ -186,11 +143,6 @@ export function formatDuration( ].join(''); } -export function formatProposalHashShort(hash: string) { - if (!hash) return; - return `${hash.slice(0, 8)}…`; -} - export function formatAddressShort( address: string, numberOfVisibleCharacters = 5, @@ -234,10 +186,6 @@ export function blocknumToDuration(blocknum: number) { .asMilliseconds(); } -export function blockperiodToDuration(blocknum: number) { - return moment.duration(blocknum * app.chain.block.duration, 'seconds'); -} - // loads remote scripts from a URI, e.g. Twitter widgets export const loadScript = (scriptURI) => { return new Promise((resolve, reject) => { @@ -302,22 +250,3 @@ export const handleRedirectClicks = ( callback(); } }; - -// Decimals For Tokens -export function getDecimals(chain: IChainAdapter): number { - let decimals; - if (chain.meta.id === 'evmos') { - // Custom for evmos - decimals = 18; - } else if (chain && chain.meta) { - decimals = getChainDecimals(chain.id || '', chain.base); - } else if (chain.network === ChainNetwork.ERC721) { - decimals = 0; - } else if (chain.network === ChainNetwork.ERC1155) { - decimals = 0; - } else if (chain.base === ChainBase.CosmosSDK) { - decimals = 6; - } - - return decimals; -} diff --git a/packages/commonwealth/client/scripts/helpers/truncate.ts b/packages/commonwealth/client/scripts/helpers/truncate.ts index dc43eb7bf31..a34afcb0cde 100644 --- a/packages/commonwealth/client/scripts/helpers/truncate.ts +++ b/packages/commonwealth/client/scripts/helpers/truncate.ts @@ -1,7 +1,7 @@ export const truncate = ( str: string, maxCharLength = 140, - ellipsisPadding = 4 + ellipsisPadding = 4, ): string => { // Get the available width of the container or the window const availableWidth = window.innerWidth; @@ -20,7 +20,7 @@ export const truncate = ( // Calculate the maximum truncated length based on the available width and ellipsis width const truncatedLength = Math.floor( - (maxWidth - ellipsisWidth) / lengthModifier + (maxWidth - ellipsisWidth) / lengthModifier, ); return str.substring(0, truncatedLength) + '...'; diff --git a/packages/commonwealth/client/scripts/helpers/typeGuards.ts b/packages/commonwealth/client/scripts/helpers/typeGuards.ts index 369385c315d..5c33ef898c8 100644 --- a/packages/commonwealth/client/scripts/helpers/typeGuards.ts +++ b/packages/commonwealth/client/scripts/helpers/typeGuards.ts @@ -40,12 +40,6 @@ export const isNotNil = (x: T | Nil): x is T => !isNil(x); export const isBoolean = (x: unknown): x is boolean => x === true || x === false; -/** - * Type guard for the `false` literal of the `boolean` primitive - */ -export const isFalse = (x: unknown): x is false => - typeof x === 'boolean' && x === false; - /** * Type guard for the `true` literal of the `boolean` primitive */ @@ -77,21 +71,3 @@ export const isEmptyString = (x: unknown): x is '' => isString(x) && x === ''; */ export const isNonEmptyString = (x: unknown): x is string => isString(x) && !isEmptyString(x); - -/** - * Type guard for the `Function` type - */ -// eslint-disable-next-line @typescript-eslint/ban-types -export const isFunction = (x: unknown): x is Function => x instanceof Function; - -/** - * Typeguard for making sure a key is in an object when the object has no index signature - */ -export function hasKey( - obj: O, - key: K, -): obj is O & { [k in K]: unknown } { - // @ts-expect-error StrictNullChecks - if (typeof obj === 'object') return key in obj; - else return false; -} diff --git a/packages/commonwealth/client/scripts/helpers/validateTypes.ts b/packages/commonwealth/client/scripts/helpers/validateTypes.ts index 8fe77a17013..27dc04ff40b 100644 --- a/packages/commonwealth/client/scripts/helpers/validateTypes.ts +++ b/packages/commonwealth/client/scripts/helpers/validateTypes.ts @@ -1,4 +1,3 @@ -import { bech32 } from 'bech32'; import { isAddress } from 'web3-utils'; import type { ValidationStatus } from '../views/components/component_kit/cw_validation_text'; @@ -11,16 +10,6 @@ export function isValidEthAddress(address: string) { return isAddress(address); } -export function isValidCosmosAddress(address) { - try { - const decodedAddress = bech32.decode(address); - bech32.fromWords(decodedAddress.words); - return true; - } catch { - return false; - } -} - function isValidToken(input: string) { const numberRegex = /^[1-9]\d*$/; return numberRegex.test(input); diff --git a/packages/commonwealth/client/scripts/helpers/wallet.ts b/packages/commonwealth/client/scripts/helpers/wallet.ts index bf247478480..a3486cc6a07 100644 --- a/packages/commonwealth/client/scripts/helpers/wallet.ts +++ b/packages/commonwealth/client/scripts/helpers/wallet.ts @@ -1,38 +1,6 @@ import { WalletId } from '@hicommonwealth/shared'; import IWebWallet from '../models/IWebWallet'; -// getWalletName() fetches friendly names for wallets. It is assumed -// that the user already knows what chain or community they are -// logging into, so a more concise wallet name can be used, -// e.g. "Keplr" instead of "Keplr (Ethereum)". -// -// Do not enumerate over this list for logins across multiple chains - -// there will be multiple entries with the same names. -// -// Examples: -// - Please login via {Metamask}. -// - Please login via {WalletConnect}. -// - Please reconnect your wallet via {Metamask}. -// - Please reconnect your wallet via {WalletConnect}. -// - Please select a login method: {Magic Link}, {Metamask}, {WalletConnect}... - -const getWalletName = (walletId: WalletId) => { - const lookups = { - [WalletId.Magic]: 'Magic Link', - [WalletId.Polkadot]: 'Polkadot', - [WalletId.Metamask]: 'Metamask', - [WalletId.WalletConnect]: 'WalletConnect', - [WalletId.KeplrEthereum]: 'Keplr', - [WalletId.Keplr]: 'Keplr', - [WalletId.Leap]: 'Leap', - [WalletId.TerraStation]: 'Terra Station', - [WalletId.TerraWalletConnect]: 'Terra WalletConnect', - [WalletId.CosmosEvmMetamask]: 'Metamask', - [WalletId.Phantom]: 'Phantom', - }; - return lookups[walletId]; -}; - const getAddressFromWallet = (wallet: IWebWallet) => { const selectedAddress = (() => { if (wallet.chain === 'ethereum' || wallet.chain === 'solana') { @@ -63,4 +31,4 @@ const getAddressFromWallet = (wallet: IWebWallet) => { return selectedAddress; }; -export { getAddressFromWallet, getWalletName }; +export { getAddressFromWallet }; diff --git a/packages/commonwealth/client/scripts/hooks/useForceRerender.ts b/packages/commonwealth/client/scripts/hooks/useForceRerender.ts index 4af52cfffa2..9e23ffe6ec7 100644 --- a/packages/commonwealth/client/scripts/hooks/useForceRerender.ts +++ b/packages/commonwealth/client/scripts/hooks/useForceRerender.ts @@ -1,4 +1,4 @@ -import { useState, useCallback } from 'react'; +import { useCallback, useState } from 'react'; const useForceRerender = () => { const [, setState] = useState({}); diff --git a/packages/commonwealth/client/scripts/stores/ActivityStore.ts b/packages/commonwealth/client/scripts/stores/ActivityStore.ts deleted file mode 100644 index 8a48c4a3f4c..00000000000 --- a/packages/commonwealth/client/scripts/stores/ActivityStore.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { byAscendingCreationDate } from '../helpers'; -import type AbridgedThread from '../models/AbridgedThread'; -import AddressInfo from '../models/AddressInfo'; - -export interface IAddressCountAndInfo { - postCount: number; - addressInfo: AddressInfo; -} - -export interface IIdScopedAddressCountAndInfo { - [addressId: string]: IAddressCountAndInfo; -} - -interface ICommunityThreads { - [parentEntity: string]: Array; -} - -export class ActiveThreadsStore { - private _threadsByCommunity: ICommunityThreads = {}; - - public getThreadsByCommunity(communityId: string): Array { - return this._threadsByCommunity[communityId] || []; - } - - public getMostActiveThreads(parentEntity: string, count: number) { - const comments = {}; - const reactions = {}; - const allThreads = this.getThreadsByCommunity(parentEntity); - allThreads.sort((threadA, threadB) => { - const totalActivityA = - comments[threadA.id]?.length + reactions[threadA.id]?.length; - const totalActivityB = - comments[threadB.id]?.length + reactions[threadB.id]?.length; - return totalActivityB - totalActivityA; - }); - return allThreads.slice(0, count); - } - - public addThread(thread: AbridgedThread) { - const parentEntity = thread.community; - if (!this._threadsByCommunity[parentEntity]) { - this._threadsByCommunity[parentEntity] = []; - } - this._threadsByCommunity[parentEntity].push(thread); - this._threadsByCommunity[parentEntity].sort(byAscendingCreationDate); - return this; - } - - public removeThread(threadId: number, parentEntity: string) { - const communityStore = this._threadsByCommunity[parentEntity]; - const matchingthread = communityStore.filter((t) => t.id === threadId)[0]; - const proposalIndex = communityStore.indexOf(matchingthread); - if (proposalIndex === -1) { - throw new Error('thread not in store'); - } - communityStore.splice(proposalIndex, 1); - return this; - } - - public clearThreads() { - this._threadsByCommunity = {}; - } -} From 191a551ea3fbe0e0974ea7f9d8d8bd775e5fd9d4 Mon Sep 17 00:00:00 2001 From: israellund Date: Fri, 11 Oct 2024 09:32:04 -0400 Subject: [PATCH 125/425] more communities shown on explore page --- .../client/scripts/views/pages/Communities/Communities.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx index 2ec7b0f5c10..4bcbbd4ec9f 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx @@ -33,8 +33,6 @@ type ExtendedCommunitySliceType = [ ]; const CommunitiesPage = () => { - const containerRef = useRef(); - const { setModeOfManageCommunityStakeModal, modeOfManageCommunityStakeModal, @@ -137,8 +135,7 @@ const CommunitiesPage = () => { }; return ( - // @ts-expect-error - +
@@ -206,7 +203,6 @@ const CommunitiesPage = () => { className="communities-list" style={{ height: '100%', width: '100%' }} data={isInitialCommunitiesLoading ? [] : communitiesList} - customScrollParent={containerRef.current} itemContent={(listIndex, slicedCommunities) => { return slicedCommunities.map((community, sliceIndex) => { const canBuyStake = !!user.addresses.find?.( From 5654c3a61f7999ee266515b80c1a11a7a7a4a905 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 11 Oct 2024 11:45:41 -0400 Subject: [PATCH 126/425] fix feed ui --- libs/api-client/package.json | 6 +- .../model/src/feed/GetGlobalActivity.query.ts | 13 -- libs/model/src/feed/GetUserActivity.query.ts | 14 +- libs/model/src/feed/index.ts | 1 - libs/model/src/globalActivityCache.ts | 205 +++++++++--------- libs/model/src/thread/GetThreads.query.ts | 2 +- libs/schemas/src/queries/feed.schemas.ts | 59 ++--- .../client/scripts/models/Thread.ts | 4 +- .../state/api/feeds/fetchGlobalActivity.ts | 18 -- .../state/api/feeds/fetchUserActivity.ts | 33 ++- .../client/scripts/state/api/feeds/index.ts | 3 +- .../client/scripts/state/api/feeds/util.ts | 4 +- .../NewThreadFormLegacy/NewThreadForm.tsx | 1 - .../Profile/ProfileActivityContent.tsx | 4 +- .../client/scripts/views/components/feed.tsx | 36 ++- .../views/pages/user_dashboard/index.tsx | 23 +- .../server/api/external-router-middleware.ts | 3 +- .../server/api/external-router.ts | 10 +- packages/commonwealth/server/api/feed.ts | 1 - .../get_active_threads.ts | 2 +- pnpm-lock.yaml | 15 +- 21 files changed, 231 insertions(+), 226 deletions(-) delete mode 100644 libs/model/src/feed/GetGlobalActivity.query.ts delete mode 100644 packages/commonwealth/client/scripts/state/api/feeds/fetchGlobalActivity.ts diff --git a/libs/api-client/package.json b/libs/api-client/package.json index 3436f732c05..80dc227853a 100644 --- a/libs/api-client/package.json +++ b/libs/api-client/package.json @@ -36,5 +36,9 @@ "community" ], "author": "common.xyz", - "license": "MIT" + "license": "MIT", + "dependencies": { + "node-fetch": "^3.3.2", + "url-join": "^5.0.0" + } } diff --git a/libs/model/src/feed/GetGlobalActivity.query.ts b/libs/model/src/feed/GetGlobalActivity.query.ts deleted file mode 100644 index f0f8deeec99..00000000000 --- a/libs/model/src/feed/GetGlobalActivity.query.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Query } from '@hicommonwealth/core'; -import * as schemas from '@hicommonwealth/schemas'; -import { GlobalActivityCache } from '../globalActivityCache'; - -export function GetGlobalActivity(): Query { - return { - ...schemas.ActivityFeed, - auth: [], - secure: false, - body: async () => - await GlobalActivityCache.getInstance().getGlobalActivity(), - }; -} diff --git a/libs/model/src/feed/GetUserActivity.query.ts b/libs/model/src/feed/GetUserActivity.query.ts index ca6eb09abc0..3ba52fe73e2 100644 --- a/libs/model/src/feed/GetUserActivity.query.ts +++ b/libs/model/src/feed/GetUserActivity.query.ts @@ -1,12 +1,22 @@ import { Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { getUserActivityFeed } from '../globalActivityCache'; +import { + GlobalActivityCache, + getUserActivityFeed, +} from '../globalActivityCache'; export function GetUserActivity(): Query { return { ...schemas.ActivityFeed, auth: [], secure: false, - body: async ({ actor }) => await getUserActivityFeed(actor.user.id), + body: async ({ actor, payload }) => + payload.is_global + ? await GlobalActivityCache.getInstance().getGlobalActivity() + : await getUserActivityFeed({ + user_id: actor.user?.id ?? 0, + thread_limit: Math.min(payload.thread_limit ?? 50, 50), + comment_limit: Math.min(payload.comment_limit ?? 3, 5), + }), }; } diff --git a/libs/model/src/feed/index.ts b/libs/model/src/feed/index.ts index 609ae5a4e53..62adcdf9aab 100644 --- a/libs/model/src/feed/index.ts +++ b/libs/model/src/feed/index.ts @@ -1,2 +1 @@ -export * from './GetGlobalActivity.query'; export * from './GetUserActivity.query'; diff --git a/libs/model/src/globalActivityCache.ts b/libs/model/src/globalActivityCache.ts index 13c23594b51..60ed27a0c08 100644 --- a/libs/model/src/globalActivityCache.ts +++ b/libs/model/src/globalActivityCache.ts @@ -1,108 +1,118 @@ import { CacheNamespaces, cache, logger } from '@hicommonwealth/core'; -import { ActivityFeedRecord } from '@hicommonwealth/schemas'; +import { ActivityFeed, ActivityThread } from '@hicommonwealth/schemas'; import { QueryTypes } from 'sequelize'; import { v4 as uuidv4 } from 'uuid'; import { z } from 'zod'; import { models } from './database'; -export async function getUserActivityFeed(user_id?: number) { - /** - * Last 50 updated threads and their comments - */ +/** + * Gets last updated threads and their recent comments + * @param user_id by user id communities, 0 for global + * @param thread_limit thread limit + * @param comment_limit comment limit + */ +export async function getUserActivityFeed({ + user_id = 0, + thread_limit = 50, + comment_limit = 3, +}: Omit, 'is_global'> & { + user_id?: number; +}) { const query = ` - WITH - user_communities AS (SELECT DISTINCT community_id FROM "Addresses" WHERE user_id = :user_id), - top_threads AS ( - SELECT T.* - FROM "Threads" T - ${ - user_id - ? 'JOIN user_communities UC ON UC.community_id = T.community_id' - : '' - } - WHERE T.deleted_at IS NULL - ORDER BY T.activity_rank_date DESC NULLS LAST - LIMIT 50 - ), - ranked_threads AS ( - SELECT - T.id AS thread_id, - T.activity_rank_date, - json_build_object( - 'id', T.id, - 'body', T.body, - 'title', T.title, - 'numberOfComments', T.comment_count, - 'created_at', T.created_at, - 'updated_at', T.updated_at, - 'deleted_at', T.deleted_at, - 'locked_at', T.locked_at, - 'kind', T.kind, - 'stage', T.stage, - 'archived_at', T.archived_at, - 'read_only', T.read_only, - 'has_poll', T.has_poll, - 'marked_as_spam_at', T.marked_as_spam_at::text, - 'discord_meta', T.discord_meta, - 'profile_name', U.profile->>'name', - 'profile_avatar_url', U.profile->>'avatar_url', - 'user_id', U.id, - 'user_address', A.address, - 'topic', Tp, - 'community_id', T.community_id - ) as thread - FROM - top_threads T - JOIN "Addresses" A ON A.id = T.address_id AND A.community_id = T.community_id - JOIN "Users" U ON U.id = A.user_id - JOIN "Topics" Tp ON Tp.id = T.topic_id - ${user_id ? 'WHERE U.id != :user_id' : ''}), - recent_comments AS ( -- get the recent comments data associated with the thread - SELECT - C.thread_id as thread_id, - json_agg(json_strip_nulls(json_build_object( - 'id', C.id, - 'address', A.address, - 'text', C.text, - 'created_at', C.created_at::text, - 'updated_at', C.updated_at::text, - 'deleted_at', C.deleted_at::text, - 'marked_as_spam_at', C.marked_as_spam_at::text, - 'discord_meta', C.discord_meta, - 'profile_name', U.profile->>'name', - 'profile_avatar_url', U.profile->>'avatar_url', - 'user_id', U.id - ))) as recent_comments - FROM ( - Select tempC.* - FROM "Comments" tempC - JOIN top_threads tt ON tt.id = tempC.thread_id - WHERE tempC.deleted_at IS NULL - ORDER BY tempC.created_at DESC - LIMIT 3 -- Optionally a prop can be added for this - ) C - JOIN "Addresses" A ON A.id = C.address_id - JOIN "Users" U ON U.id = A.user_id - GROUP BY C.thread_id +WITH +user_communities AS ( + SELECT DISTINCT community_id + FROM "Addresses" + WHERE user_id = :user_id +), +top_threads AS ( + SELECT T.* + FROM "Threads" T + ${user_id ? 'JOIN user_communities UC ON UC.community_id = T.community_id' : ''} + WHERE T.deleted_at IS NULL + ORDER BY T.activity_rank_date DESC NULLS LAST + LIMIT :thread_limit +) +SELECT + jsonb_set( + jsonb_build_object( + 'community_id', C.id, + 'community_icon', C.icon_url, + 'id', T.id, + 'user_id', U.id, + 'user_address', A.address, + 'profile_name', U.profile->>'name', + 'profile_avatar', U.profile->>'avatar_url', + 'body', T.body, + 'title', T.title, + 'kind', T.kind, + 'stage', T.stage, + 'number_of_comments', coalesce(T.comment_count, 0), + 'created_at', T.created_at::text, + 'updated_at', T.updated_at::text, + 'deleted_at', T.deleted_at::text, + 'locked_at', T.locked_at::text, + 'archived_at', T.archived_at::text, + 'marked_as_spam_at', T.marked_as_spam_at::text, + 'read_only', T.read_only, + 'has_poll', T.has_poll, + 'discord_meta', T.discord_meta, + 'topic', jsonb_build_object( + 'id', T.topic_id, + 'name', Tp.name, + 'description', Tp.description ) - SELECT - RTS.thread, - RC.recent_comments - FROM - ranked_threads RTS - LEFT JOIN recent_comments RC ON RTS.thread_id = RC.thread_id - ORDER BY - RTS.activity_rank_date DESC NULLS LAST; + ), + '{recent_comments}', + COALESCE( + (SELECT jsonb_agg(jsonb_strip_nulls(jsonb_build_object( + 'id', C.id, + 'address', C.address, + 'user_id', C.user_id, + 'profile_name', C.profile_name, + 'profile_avatar', C.profile_avatar, + 'text', C.text, + 'created_at', C.created_at::text, + 'updated_at', C.updated_at::text, + 'deleted_at', C.deleted_at::text, + 'marked_as_spam_at', C.marked_as_spam_at::text, + 'discord_meta', C.discord_meta + )) ORDER BY C.created_at DESC) + FROM ( + SELECT + C.*, + A.address, + U.id as user_id, + U.profile->>'name' as profile_name, + U.profile->>'avatar_url' as profile_avatar, + ROW_NUMBER() OVER (PARTITION BY C.thread_id ORDER BY C.created_at DESC) AS rn + FROM "Comments" C + JOIN "Addresses" A on C.address_id = A.id + JOIN "Users" U on A.user_id = U.id + WHERE + C.thread_id = T.id + AND C.deleted_at IS NULL + ) C WHERE C.rn <= :comment_limit), '[]') + ) AS thread +FROM + top_threads T + JOIN "Communities" C ON T.community_id = C.id + JOIN "Addresses" A ON A.id = T.address_id AND A.community_id = T.community_id + JOIN "Users" U ON U.id = A.user_id + JOIN "Topics" Tp ON Tp.id = T.topic_id +ORDER BY + T.activity_rank_date DESC NULLS LAST; `; - return await models.sequelize.query>( - query, - { - type: QueryTypes.SELECT, - raw: true, - replacements: { user_id }, - }, - ); + const threads = await models.sequelize.query<{ + thread: z.infer; + }>(query, { + type: QueryTypes.SELECT, + raw: true, + replacements: { user_id, thread_limit, comment_limit }, + }); + + return threads.map((t) => t.thread); } const log = logger(import.meta); @@ -134,13 +144,12 @@ export class GlobalActivityCache { CacheNamespaces.Activity_Cache, this._cacheKey, ); - if (!activity) { if (GlobalActivityCache._instance) { const msg = 'Failed to fetch global activity from Redis'; log.error(msg); } - return await getUserActivityFeed(); + return await getUserActivityFeed({}); } return JSON.parse(activity); } @@ -194,7 +203,7 @@ export class GlobalActivityCache { return; } - const activity = await getUserActivityFeed(); + const activity = await getUserActivityFeed({}); const result = await cache().setKey( CacheNamespaces.Activity_Cache, this._cacheKey, diff --git a/libs/model/src/thread/GetThreads.query.ts b/libs/model/src/thread/GetThreads.query.ts index 4dec6a5e434..dbbff8a7e9b 100644 --- a/libs/model/src/thread/GetThreads.query.ts +++ b/libs/model/src/thread/GetThreads.query.ts @@ -206,7 +206,7 @@ export function GetThreads(): Query { 'marked_as_spam_at', COM.marked_as_spam_at::text, 'discord_meta', COM.discord_meta, 'profile_name', U.profile->>'name', - 'profile_avatar_url', U.profile->>'avatar_url', + 'profile_avatar', U.profile->>'avatar_url', 'user_id', U.id ))) as "recentComments" FROM ( diff --git a/libs/schemas/src/queries/feed.schemas.ts b/libs/schemas/src/queries/feed.schemas.ts index 96e7c406ca3..fdc1bc4f03a 100644 --- a/libs/schemas/src/queries/feed.schemas.ts +++ b/libs/schemas/src/queries/feed.schemas.ts @@ -1,56 +1,57 @@ import { z } from 'zod'; import { DiscordMetaSchema, PG_INT } from '../utils'; -export const ActivityThread = z.object({ +export const ActivityComment = z.object({ id: PG_INT, + address: z.string(), + user_id: z.number().nullish(), + profile_name: z.string().nullish(), + profile_avatar: z.string().nullish(), + text: z.string(), + created_at: z.string(), + updated_at: z.string().nullish(), + deleted_at: z.string().nullish(), + marked_as_spam_at: z.string().nullish(), + discord_meta: DiscordMetaSchema.nullish(), +}); + +export const ActivityThread = z.object({ community_id: z.string(), + community_icon: z.string().nullish(), + id: PG_INT, + user_id: PG_INT, + user_address: z.string(), + profile_name: z.string().nullish(), + profile_avatar: z.string().nullish(), body: z.string(), title: z.string(), - numberOfComments: PG_INT, + kind: z.string(), + stage: z.string(), + number_of_comments: z.number(), created_at: z.string().nullish(), updated_at: z.string().nullish(), deleted_at: z.string().nullish(), locked_at: z.string().nullish(), - kind: z.string(), - stage: z.string(), archived_at: z.string().nullish(), + marked_as_spam_at: z.string().nullish(), read_only: z.boolean(), has_poll: z.boolean().nullish(), - marked_as_spam_at: z.string().nullish(), discord_meta: DiscordMetaSchema.nullish(), - profile_name: z.string().nullish(), - profile_avatar: z.string().nullish(), - user_id: PG_INT, - user_address: z.string(), topic: z.object({ id: PG_INT, name: z.string(), description: z.string(), }), -}); - -export const ActivityComment = z.object({ - id: PG_INT, - address: z.string(), - text: z.string(), - created_at: z.string(), - updated_at: z.string().nullish(), - deleted_at: z.string().nullish(), - marked_as_spam_at: z.string().nullish(), - discord_meta: DiscordMetaSchema.nullish(), - profile_name: z.string().nullish(), - profile_avatar_url: z.string().nullish(), - user_id: z.number().nullish(), -}); - -export const ActivityFeedRecord = z.object({ - thread: ActivityThread, recent_comments: z.array(ActivityComment).nullish(), }); export const ActivityFeed = { - input: z.object({}), - output: z.array(ActivityFeedRecord), + input: z.object({ + is_global: z.boolean(), + thread_limit: z.number().optional(), + comment_limit: z.number().optional(), + }), + output: z.array(ActivityThread), }; export const ChainFeedRecord = z.object({ diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index 7fa32425107..89f9fce5c3d 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -201,7 +201,7 @@ export type RecentComment = { deleted_at?: string; discord_meta?: string; profile_name?: string; - profile_avatar_url?: string; + profile_avatar?: string; user_id: string; }; @@ -445,7 +445,7 @@ export class Thread implements IUniqueId { User: { profile: { name: rc?.profile_name, - avatar_url: rc?.profile_avatar_url, + avatar_url: rc?.profile_avatar, }, }, }, diff --git a/packages/commonwealth/client/scripts/state/api/feeds/fetchGlobalActivity.ts b/packages/commonwealth/client/scripts/state/api/feeds/fetchGlobalActivity.ts deleted file mode 100644 index c77dc7b80dd..00000000000 --- a/packages/commonwealth/client/scripts/state/api/feeds/fetchGlobalActivity.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { trpc } from 'client/scripts/utils/trpcClient'; - -const USER_ACTIVITY_STALE_TIME = 5 * 60 * 1_000; // 5 minutes (backend caches for 5 minutes as well) -const USER_ACTIVITY_CACHE_TIME = 5 * 60 * 1_000; // 5 minutes - -const useFetchGlobalActivityQuery = ({ - apiEnabled, -}: { - apiEnabled: boolean; -}) => { - return trpc.feed.getGlobalActivity.useQuery({ - staleTime: USER_ACTIVITY_STALE_TIME, - cacheTime: USER_ACTIVITY_CACHE_TIME, - enabled: apiEnabled, - }); -}; - -export default useFetchGlobalActivityQuery; diff --git a/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts b/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts index 11c93173530..5e340b636fe 100644 --- a/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts +++ b/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts @@ -2,13 +2,32 @@ import { trpc } from 'client/scripts/utils/trpcClient'; const USER_ACTIVITY_STALE_TIME = 60 * 1_000; // 1 minute const USER_ACTIVITY_CACHE_TIME = 5 * 60 * 1_000; // 5 minutes +const GLOBAL_ACTIVITY_STALE_TIME = 5 * 60 * 1_000; // 5 minutes (backend caches for 5 minutes as well) -const useFetchUserActivityQuery = ({ apiEnabled }: { apiEnabled: boolean }) => { - return trpc.feed.getUserActivity.useQuery({ - staleTime: USER_ACTIVITY_STALE_TIME, - cacheTime: USER_ACTIVITY_CACHE_TIME, - enabled: apiEnabled, - }); +export const useFetchGlobalActivityQuery = () => { + return trpc.feed.getUserActivity.useQuery( + { + is_global: true, + thread_limit: 50, + comment_limit: 3, + }, + { + staleTime: GLOBAL_ACTIVITY_STALE_TIME, + cacheTime: USER_ACTIVITY_CACHE_TIME, + }, + ); }; -export default useFetchUserActivityQuery; +export const useFetchUserActivityQuery = () => { + return trpc.feed.getUserActivity.useQuery( + { + is_global: false, + thread_limit: 50, + comment_limit: 3, + }, + { + staleTime: USER_ACTIVITY_STALE_TIME, + cacheTime: USER_ACTIVITY_CACHE_TIME, + }, + ); +}; diff --git a/packages/commonwealth/client/scripts/state/api/feeds/index.ts b/packages/commonwealth/client/scripts/state/api/feeds/index.ts index ec56932b303..d1d9d40c379 100644 --- a/packages/commonwealth/client/scripts/state/api/feeds/index.ts +++ b/packages/commonwealth/client/scripts/state/api/feeds/index.ts @@ -1,4 +1,3 @@ -import useFetchGlobalActivityQuery from './fetchGlobalActivity'; import useFetchUserActivityQuery from './fetchUserActivity'; -export { useFetchGlobalActivityQuery, useFetchUserActivityQuery }; +export { useFetchUserActivityQuery }; diff --git a/packages/commonwealth/client/scripts/state/api/feeds/util.ts b/packages/commonwealth/client/scripts/state/api/feeds/util.ts index 47e7ef5b5f3..b1f8470e7cf 100644 --- a/packages/commonwealth/client/scripts/state/api/feeds/util.ts +++ b/packages/commonwealth/client/scripts/state/api/feeds/util.ts @@ -21,7 +21,7 @@ type ActivityResponse = { marked_as_spam_at?: string; discord_meta?: string; profile_name: string; - profile_avatar_url?: string; + profile_avatar?: string; user_id: number; user_address: string; topic: Topic; @@ -37,7 +37,7 @@ export function formatActivityResponse(response: AxiosResponse) { new Thread({ id: x.thread.id, // @ts-expect-error - avatar_url: x.thread.profile_avatar_url, + avatar_url: x.thread.profile_avatar, profile_name: x.thread.profile_name, community_id: x.thread.community_id, kind: x.thread.kind, diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index 907a8e3dca9..82f68d7fdb4 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -145,7 +145,6 @@ export const NewThreadForm = () => { ); const isActionAllowedInGatedTopic = !!(memberships || []).find( (membership) => - threadTopic.id && threadTopic?.id && membership.topicIds.includes(threadTopic?.id) && membership.isAllowed, diff --git a/packages/commonwealth/client/scripts/views/components/Profile/ProfileActivityContent.tsx b/packages/commonwealth/client/scripts/views/components/Profile/ProfileActivityContent.tsx index 071bc67b82c..553a51cc2d6 100644 --- a/packages/commonwealth/client/scripts/views/components/Profile/ProfileActivityContent.tsx +++ b/packages/commonwealth/client/scripts/views/components/Profile/ProfileActivityContent.tsx @@ -2,10 +2,10 @@ import React from 'react'; import 'components/Profile/Profile.scss'; -import { CWText } from '../component_kit/cw_text'; import type Thread from 'models/Thread'; -import ProfileActivityRow from './ProfileActivityRow'; +import { CWText } from '../component_kit/cw_text'; import type { CommentWithAssociatedThread } from './ProfileActivity'; +import ProfileActivityRow from './ProfileActivityRow'; enum ProfileActivityType { Addresses, diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index a846b6bcb25..3784fe063c3 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -3,20 +3,20 @@ import { Virtuoso } from 'react-virtuoso'; import 'components/feed.scss'; -import { ActivityComment, ActivityFeedRecord } from '@hicommonwealth/schemas'; +import { ActivityComment, ActivityThread } from '@hicommonwealth/schemas'; import { slugify } from '@hicommonwealth/shared'; import { Thread, type RecentComment } from 'client/scripts/models/Thread'; import Topic from 'client/scripts/models/Topic'; import { ThreadKind, ThreadStage } from 'client/scripts/models/types'; +import { + useFetchGlobalActivityQuery, + useFetchUserActivityQuery, +} from 'client/scripts/state/api/feeds/fetchUserActivity'; import { getThreadActionTooltipText } from 'helpers/threads'; import { getProposalUrlPath } from 'identifiers'; import { useCommonNavigate } from 'navigation/helpers'; import { useGetCommunityByIdQuery } from 'state/api/communities'; import { useFetchCustomDomainQuery } from 'state/api/configuration'; -import { - useFetchGlobalActivityQuery, - useFetchUserActivityQuery, -} from 'state/api/feeds'; import { useRefreshMembershipQuery } from 'state/api/groups'; import useUserStore from 'state/ui/user'; import Permissions from 'utils/Permissions'; @@ -120,10 +120,8 @@ const FeedThread = ({ thread }: { thread: Thread }) => { ); }; -function mapThread({ - thread, - recent_comments, -}: z.infer): Thread { +// TODO: Reconcile client state with query schemas +function mapThread(thread: z.infer): Thread { return new Thread({ Address: { address: thread.user_address, @@ -164,9 +162,9 @@ function mapThread({ reaction_weights_sum: 0, address_last_active: '', ContestActions: [], - numberOfComments: thread.numberOfComments, + numberOfComments: thread.number_of_comments, recentComments: - recent_comments?.map( + thread.recent_comments?.map( (c: z.infer) => ({ id: c.id, @@ -174,7 +172,7 @@ function mapThread({ user_id: c.user_id ?? '', created_at: c.created_at, updated_at: c.updated_at, - profile_avatar_url: c.profile_avatar_url, + profile_avatar: c.profile_avatar, profile_name: c.profile_name, text: c.text, }) as RecentComment, @@ -188,18 +186,10 @@ export const Feed = ({ noFeedMessage, customScrollParent, }: FeedProps) => { - const userActivityRes = useFetchUserActivityQuery({ - apiEnabled: DashboardViews.ForYou === dashboardView, - }); - - const globalActivityRes = useFetchGlobalActivityQuery({ - apiEnabled: DashboardViews.Global === dashboardView, - }); + const userFeed = useFetchUserActivityQuery(); + const globalFeed = useFetchGlobalActivityQuery(); - const feed = - DashboardViews.Global === dashboardView - ? globalActivityRes - : userActivityRes; + const feed = dashboardView === DashboardViews.Global ? globalFeed : userFeed; if (feed.isLoading) { return ( diff --git a/packages/commonwealth/client/scripts/views/pages/user_dashboard/index.tsx b/packages/commonwealth/client/scripts/views/pages/user_dashboard/index.tsx index e7193c9af3c..20c05b639e9 100644 --- a/packages/commonwealth/client/scripts/views/pages/user_dashboard/index.tsx +++ b/packages/commonwealth/client/scripts/views/pages/user_dashboard/index.tsx @@ -123,24 +123,11 @@ const UserDashboard = ({ type }: UserDashboardProps) => { />
- <> - {activePage === DashboardViews.ForYou && ( - - customScrollParent={scrollElement} - /> - )} - {activePage === DashboardViews.Global && ( - - customScrollParent={scrollElement} - /> - )} - +
{isWindowExtraSmall ? ( <> diff --git a/packages/commonwealth/server/api/external-router-middleware.ts b/packages/commonwealth/server/api/external-router-middleware.ts index 8c6cffab838..932edbf54f7 100644 --- a/packages/commonwealth/server/api/external-router-middleware.ts +++ b/packages/commonwealth/server/api/external-router-middleware.ts @@ -24,7 +24,6 @@ export async function apiKeyAuthMiddleware( if (req.path.startsWith('/docs/') || req.path === '/openapi.json') { return next(); } - const apiKey = req.headers['x-api-key']; if (!apiKey) throw new AppError('Unauthorized', 401); if (typeof apiKey !== 'string') throw new AppError('Unauthorized', 401); @@ -39,6 +38,7 @@ export async function apiKeyAuthMiddleware( CacheNamespaces.Api_key_auth, addressHeader.toLowerCase(), ); + if (cacheRes) { const cachedAuth: { hashedApiKey: string; @@ -74,6 +74,7 @@ export async function apiKeyAuthMiddleware( }, ], }); + if (!addressInstance || !addressInstance.user_id) throw new AppError('Unauthorized', 401); const address = addressInstance.get({ plain: true })!; diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 2d8b6f552fe..8a1c9f55825 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -36,7 +36,6 @@ const { createComment, updateComment, deleteComment, createCommentReaction } = const { getNewContent } = user.trpcRouter; const api = { - getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User, true), getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User, true), getNewContent, getCommunities: trpc.query( @@ -69,7 +68,14 @@ const api = { const PATH = '/api/v1'; const router = Router(); -router.use(cors(), express.statsMiddleware); +router.use( + cors({ + origin: '*', + methods: ['GET', 'POST'], + allowedHeaders: ['Content-Type', 'api-key', 'address'], + }), + express.statsMiddleware, +); // =============================================================================== /** diff --git a/packages/commonwealth/server/api/feed.ts b/packages/commonwealth/server/api/feed.ts index f97c222894e..a5d6f94d388 100644 --- a/packages/commonwealth/server/api/feed.ts +++ b/packages/commonwealth/server/api/feed.ts @@ -2,6 +2,5 @@ import { trpc } from '@hicommonwealth/adapters'; import { Feed } from '@hicommonwealth/model'; export const trpcRouter = trpc.router({ - getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User), getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User), }); diff --git a/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts b/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts index bbeef051d2c..55d7150a744 100644 --- a/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts +++ b/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts @@ -125,7 +125,7 @@ export async function __getActiveThreads( if (temp.Address) { temp.user_id = temp.Address.User?.id; temp.profile_name = temp.Address.User?.profile.name; - temp.profile_avatar_url = temp.Address.User?.profile.avatar_url; + temp.profile_avatar = temp.Address.User?.profile.avatar_url; delete temp.Address; } return temp; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e6bd1f8197..c2378a82e49 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -422,7 +422,14 @@ importers: specifier: ^4.7.2 version: 4.9.3 - libs/api-client: {} + libs/api-client: + dependencies: + node-fetch: + specifier: ^3.3.2 + version: 3.3.2 + url-join: + specifier: ^5.0.0 + version: 5.0.0 libs/chains: dependencies: @@ -15063,6 +15070,10 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -35963,6 +35974,8 @@ snapshots: dependencies: punycode: 2.3.1 + url-join@5.0.0: {} + url-parse@1.5.10: dependencies: querystringify: 2.2.0 From 66bfcc4a68b0df11da0315a4e0089a35d23fa62f Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 11 Oct 2024 11:58:01 -0400 Subject: [PATCH 127/425] gen api 0.0.5 --- libs/api-client/fern/openapi/openapi.yml | 407 +++++------------- libs/api-client/package.json | 2 +- libs/api-client/src/api/resources/index.d.ts | 1 + libs/api-client/src/api/resources/index.js | 1 + .../src/api/resources/user/client/Client.d.ts | 11 +- .../src/api/resources/user/client/Client.js | 90 +--- .../src/api/resources/user/client/index.d.ts | 2 +- .../src/api/resources/user/client/index.js | 2 +- .../requests/GetUserActivityRequest.d.ts | 12 + .../requests/GetUserActivityRequest.js} | 0 .../resources/user/client/requests/index.d.ts | 1 + .../resources/user/client/requests/index.js | 1 + .../types/GetGlobalActivityResponseItem.d.ts | 8 - ...ctivityResponseItemRecentCommentsItem.d.ts | 17 - ...onseItemRecentCommentsItemDiscordMeta.d.ts | 9 - ...ItemRecentCommentsItemDiscordMetaUser.d.ts | 7 - .../GetGlobalActivityResponseItemThread.d.ts | 27 -- .../GetGlobalActivityResponseItemThread.js | 4 - ...ActivityResponseItemThreadDiscordMeta.d.ts | 9 - ...alActivityResponseItemThreadDiscordMeta.js | 4 - ...vityResponseItemThreadDiscordMetaUser.d.ts | 7 - ...tivityResponseItemThreadDiscordMetaUser.js | 4 - ...GlobalActivityResponseItemThreadTopic.d.ts | 8 - ...etGlobalActivityResponseItemThreadTopic.js | 4 - .../types/GetUserActivityResponseItem.d.ts | 23 +- ...tUserActivityResponseItemDiscordMeta.d.ts} | 4 +- ...GetUserActivityResponseItemDiscordMeta.js} | 0 ...rActivityResponseItemDiscordMetaUser.d.ts} | 2 +- ...serActivityResponseItemDiscordMetaUser.js} | 0 ...ctivityResponseItemRecentCommentsItem.d.ts | 6 +- .../GetUserActivityResponseItemThread.d.ts | 27 -- .../GetUserActivityResponseItemThread.js | 4 - ...erActivityResponseItemThreadDiscordMeta.js | 4 - ...tivityResponseItemThreadDiscordMetaUser.js | 4 - .../GetUserActivityResponseItemThreadTopic.js | 4 - ... => GetUserActivityResponseItemTopic.d.ts} | 2 +- ...js => GetUserActivityResponseItemTopic.js} | 0 .../src/api/resources/user/types/index.d.ts | 15 +- .../src/api/resources/user/types/index.js | 15 +- .../user/client/getGlobalActivity.d.ts | 14 - .../user/client/getGlobalActivity.js | 6 - .../resources/user/client/index.d.ts | 1 - .../resources/user/client/index.js | 1 - .../types/GetGlobalActivityResponseItem.d.ts | 20 - .../types/GetGlobalActivityResponseItem.js | 15 - ...ctivityResponseItemRecentCommentsItem.d.ts | 26 -- ...lActivityResponseItemRecentCommentsItem.js | 43 -- ...onseItemRecentCommentsItemDiscordMeta.d.ts | 18 - ...sponseItemRecentCommentsItemDiscordMeta.js | 17 - ...ItemRecentCommentsItemDiscordMetaUser.d.ts | 16 - ...seItemRecentCommentsItemDiscordMetaUser.js | 9 - .../GetGlobalActivityResponseItemThread.d.ts | 37 -- .../GetGlobalActivityResponseItemThread.js | 68 --- ...ActivityResponseItemThreadDiscordMeta.d.ts | 18 - ...alActivityResponseItemThreadDiscordMeta.js | 17 - ...vityResponseItemThreadDiscordMetaUser.d.ts | 16 - ...tivityResponseItemThreadDiscordMetaUser.js | 9 - ...GlobalActivityResponseItemThreadTopic.d.ts | 17 - ...etGlobalActivityResponseItemThreadTopic.js | 10 - .../types/GetUserActivityResponseItem.d.ts | 26 +- .../user/types/GetUserActivityResponseItem.js | 71 ++- ...etUserActivityResponseItemDiscordMeta.d.ts | 18 + ...GetUserActivityResponseItemDiscordMeta.js} | 11 +- ...erActivityResponseItemDiscordMetaUser.d.ts | 16 + ...serActivityResponseItemDiscordMetaUser.js} | 2 +- ...ctivityResponseItemRecentCommentsItem.d.ts | 6 +- ...rActivityResponseItemRecentCommentsItem.js | 24 +- .../GetUserActivityResponseItemThread.d.ts | 37 -- .../GetUserActivityResponseItemThread.js | 68 --- ...ActivityResponseItemThreadDiscordMeta.d.ts | 18 - ...vityResponseItemThreadDiscordMetaUser.d.ts | 16 - .../GetUserActivityResponseItemThreadTopic.js | 11 - ... => GetUserActivityResponseItemTopic.d.ts} | 8 +- .../types/GetUserActivityResponseItemTopic.js | 9 + .../resources/user/types/index.d.ts | 15 +- .../resources/user/types/index.js | 15 +- libs/schemas/src/queries/feed.schemas.ts | 2 +- 77 files changed, 345 insertions(+), 1154 deletions(-) create mode 100644 libs/api-client/src/api/resources/user/client/requests/GetUserActivityRequest.d.ts rename libs/api-client/src/api/resources/user/{types/GetGlobalActivityResponseItem.js => client/requests/GetUserActivityRequest.js} (100%) create mode 100644 libs/api-client/src/api/resources/user/client/requests/index.d.ts create mode 100644 libs/api-client/src/api/resources/user/client/requests/index.js delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.d.ts delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.d.ts delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.js delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts delete mode 100644 libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js rename libs/api-client/src/api/resources/user/types/{GetUserActivityResponseItemThreadDiscordMeta.d.ts => GetUserActivityResponseItemDiscordMeta.d.ts} (55%) rename libs/api-client/src/api/resources/user/types/{GetGlobalActivityResponseItemRecentCommentsItem.js => GetUserActivityResponseItemDiscordMeta.js} (100%) rename libs/api-client/src/api/resources/user/types/{GetUserActivityResponseItemThreadDiscordMetaUser.d.ts => GetUserActivityResponseItemDiscordMetaUser.d.ts} (61%) rename libs/api-client/src/api/resources/user/types/{GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js => GetUserActivityResponseItemDiscordMetaUser.js} (100%) delete mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.d.ts delete mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.js delete mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js delete mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js delete mode 100644 libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.js rename libs/api-client/src/api/resources/user/types/{GetUserActivityResponseItemThreadTopic.d.ts => GetUserActivityResponseItemTopic.d.ts} (68%) rename libs/api-client/src/api/resources/user/types/{GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js => GetUserActivityResponseItemTopic.js} (100%) delete mode 100644 libs/api-client/src/serialization/resources/user/client/getGlobalActivity.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/client/getGlobalActivity.js delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.js delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.js delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMeta.d.ts rename libs/api-client/src/serialization/resources/user/types/{GetUserActivityResponseItemThreadDiscordMeta.js => GetUserActivityResponseItemDiscordMeta.js} (54%) create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.d.ts rename libs/api-client/src/serialization/resources/user/types/{GetUserActivityResponseItemThreadDiscordMetaUser.js => GetUserActivityResponseItemDiscordMetaUser.js} (78%) delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.js delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts delete mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.js rename libs/api-client/src/serialization/resources/user/types/{GetUserActivityResponseItemThreadTopic.d.ts => GetUserActivityResponseItemTopic.d.ts} (52%) create mode 100644 libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemTopic.js diff --git a/libs/api-client/fern/openapi/openapi.yml b/libs/api-client/fern/openapi/openapi.yml index 30c98a012f2..2b9a6fdc984 100644 --- a/libs/api-client/fern/openapi/openapi.yml +++ b/libs/api-client/fern/openapi/openapi.yml @@ -1,13 +1,13 @@ openapi: 3.0.3 info: title: Common API - version: 0.0.4 + version: 0.0.1 servers: - url: http://localhost:3000/api/v1 paths: - /GetGlobalActivity: + /GetUserActivity: get: - operationId: getGlobalActivity + operationId: getUserActivity tags: - User security: @@ -18,6 +18,21 @@ paths: required: false schema: type: string + - name: is_global + in: query + required: false + schema: + type: boolean + - name: thread_limit + in: query + required: false + schema: + type: number + - name: comment_limit + in: query + required: false + schema: + type: number responses: '200': description: Successful response @@ -28,315 +43,99 @@ paths: items: type: object properties: - thread: + community_id: + type: string + community_icon: + type: string + nullable: true + id: + type: integer + minimum: 0 + maximum: 2147483647 + user_id: + type: integer + minimum: 0 + maximum: 2147483647 + user_address: + type: string + profile_name: + type: string + nullable: true + profile_avatar: + type: string + nullable: true + body: + type: string + title: + type: string + kind: + type: string + stage: + type: string + number_of_comments: + type: number + created_at: + type: string + nullable: true + updated_at: + type: string + nullable: true + deleted_at: + type: string + nullable: true + locked_at: + type: string + nullable: true + archived_at: + type: string + nullable: true + marked_as_spam_at: + type: string + nullable: true + read_only: + type: boolean + has_poll: + type: boolean + nullable: true + discord_meta: type: object properties: - id: - type: integer - minimum: 0 - maximum: 2147483647 - community_id: - type: string - body: - type: string - title: - type: string - numberOfComments: - type: integer - minimum: 0 - maximum: 2147483647 - created_at: - type: string - nullable: true - updated_at: - type: string - nullable: true - deleted_at: - type: string - nullable: true - locked_at: - type: string - nullable: true - kind: - type: string - stage: - type: string - archived_at: - type: string - nullable: true - read_only: - type: boolean - has_poll: - type: boolean - nullable: true - marked_as_spam_at: - type: string - nullable: true - discord_meta: - type: object - properties: - user: - type: object - properties: - id: - type: string - username: - type: string - required: - - id - - username - additionalProperties: false - channel_id: - type: string - message_id: - type: string - required: - - user - - channel_id - - message_id - additionalProperties: false - nullable: true - profile_name: - type: string - nullable: true - profile_avatar: - type: string - nullable: true - user_id: - type: integer - minimum: 0 - maximum: 2147483647 - user_address: - type: string - topic: + user: type: object properties: id: - type: integer - minimum: 0 - maximum: 2147483647 - name: type: string - description: + username: type: string required: - id - - name - - description + - username additionalProperties: false + channel_id: + type: string + message_id: + type: string required: - - id - - community_id - - body - - title - - numberOfComments - - kind - - stage - - read_only - - user_id - - user_address - - topic + - user + - channel_id + - message_id additionalProperties: false - recent_comments: - type: array - items: - type: object - properties: - id: - type: integer - minimum: 0 - maximum: 2147483647 - address: - type: string - text: - type: string - created_at: - type: string - updated_at: - type: string - nullable: true - deleted_at: - type: string - nullable: true - marked_as_spam_at: - type: string - nullable: true - discord_meta: - type: object - properties: - user: - type: object - properties: - id: - type: string - username: - type: string - required: - - id - - username - additionalProperties: false - channel_id: - type: string - message_id: - type: string - required: - - user - - channel_id - - message_id - additionalProperties: false - nullable: true - profile_name: - type: string - nullable: true - profile_avatar_url: - type: string - nullable: true - user_id: - type: number - nullable: true - required: - - id - - address - - text - - created_at - additionalProperties: false nullable: true - required: - - thread - additionalProperties: false - default: - $ref: '#/components/responses/error' - /GetUserActivity: - get: - operationId: getUserActivity - tags: - - User - security: - - apiKey: [] - parameters: - - in: header - name: address - required: false - schema: - type: string - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: array - items: - type: object - properties: - thread: + topic: type: object properties: id: type: integer minimum: 0 maximum: 2147483647 - community_id: - type: string - body: - type: string - title: - type: string - numberOfComments: - type: integer - minimum: 0 - maximum: 2147483647 - created_at: - type: string - nullable: true - updated_at: - type: string - nullable: true - deleted_at: - type: string - nullable: true - locked_at: - type: string - nullable: true - kind: - type: string - stage: - type: string - archived_at: - type: string - nullable: true - read_only: - type: boolean - has_poll: - type: boolean - nullable: true - marked_as_spam_at: - type: string - nullable: true - discord_meta: - type: object - properties: - user: - type: object - properties: - id: - type: string - username: - type: string - required: - - id - - username - additionalProperties: false - channel_id: - type: string - message_id: - type: string - required: - - user - - channel_id - - message_id - additionalProperties: false - nullable: true - profile_name: - type: string - nullable: true - profile_avatar: + name: type: string - nullable: true - user_id: - type: integer - minimum: 0 - maximum: 2147483647 - user_address: + description: type: string - topic: - type: object - properties: - id: - type: integer - minimum: 0 - maximum: 2147483647 - name: - type: string - description: - type: string - required: - - id - - name - - description - additionalProperties: false required: - id - - community_id - - body - - title - - numberOfComments - - kind - - stage - - read_only - - user_id - - user_address - - topic + - name + - description additionalProperties: false recent_comments: type: array @@ -349,6 +148,15 @@ paths: maximum: 2147483647 address: type: string + user_id: + type: number + nullable: true + profile_name: + type: string + nullable: true + profile_avatar: + type: string + nullable: true text: type: string created_at: @@ -386,15 +194,6 @@ paths: - message_id additionalProperties: false nullable: true - profile_name: - type: string - nullable: true - profile_avatar_url: - type: string - nullable: true - user_id: - type: number - nullable: true required: - id - address @@ -403,7 +202,17 @@ paths: additionalProperties: false nullable: true required: - - thread + - community_id + - id + - user_id + - user_address + - body + - title + - kind + - stage + - number_of_comments + - read_only + - topic additionalProperties: false default: $ref: '#/components/responses/error' diff --git a/libs/api-client/package.json b/libs/api-client/package.json index 80dc227853a..3626909c6e4 100644 --- a/libs/api-client/package.json +++ b/libs/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@commonxyz/api-client", - "version": "0.0.4", + "version": "0.0.5", "type": "module", "description": "Common Client Proxy", "repository": { diff --git a/libs/api-client/src/api/resources/index.d.ts b/libs/api-client/src/api/resources/index.d.ts index 4301125bdc3..531ef16fd91 100644 --- a/libs/api-client/src/api/resources/index.d.ts +++ b/libs/api-client/src/api/resources/index.d.ts @@ -11,4 +11,5 @@ export * as thread from './thread'; export * from './thread/client/requests'; export * from './thread/types'; export * as user from './user'; +export * from './user/client/requests'; export * from './user/types'; diff --git a/libs/api-client/src/api/resources/index.js b/libs/api-client/src/api/resources/index.js index 4301125bdc3..531ef16fd91 100644 --- a/libs/api-client/src/api/resources/index.js +++ b/libs/api-client/src/api/resources/index.js @@ -11,4 +11,5 @@ export * as thread from './thread'; export * from './thread/client/requests'; export * from './thread/types'; export * as user from './user'; +export * from './user/client/requests'; export * from './user/types'; diff --git a/libs/api-client/src/api/resources/user/client/Client.d.ts b/libs/api-client/src/api/resources/user/client/Client.d.ts index defa3155358..58e40b088e3 100644 --- a/libs/api-client/src/api/resources/user/client/Client.d.ts +++ b/libs/api-client/src/api/resources/user/client/Client.d.ts @@ -26,21 +26,14 @@ export declare class User { protected readonly _options: User.Options; constructor(_options: User.Options); /** - * @param {User.RequestOptions} requestOptions - Request-specific configuration. - * - * @example - * await client.user.getGlobalActivity() - */ - getGlobalActivity( - requestOptions?: User.RequestOptions, - ): Promise; - /** + * @param {CommonApi.GetUserActivityRequest} request * @param {User.RequestOptions} requestOptions - Request-specific configuration. * * @example * await client.user.getUserActivity() */ getUserActivity( + request?: CommonApi.GetUserActivityRequest, requestOptions?: User.RequestOptions, ): Promise; /** diff --git a/libs/api-client/src/api/resources/user/client/Client.js b/libs/api-client/src/api/resources/user/client/Client.js index 824c9a68217..bcad0730ef5 100644 --- a/libs/api-client/src/api/resources/user/client/Client.js +++ b/libs/api-client/src/api/resources/user/client/Client.js @@ -44,93 +44,26 @@ export class User { this._options = _options; } /** + * @param {CommonApi.GetUserActivityRequest} request * @param {User.RequestOptions} requestOptions - Request-specific configuration. * * @example - * await client.user.getGlobalActivity() + * await client.user.getUserActivity() */ - getGlobalActivity(requestOptions) { + getUserActivity(request = {}, requestOptions) { var _a; return __awaiter(this, void 0, void 0, function* () { - const _response = yield core.fetcher({ - url: urlJoin( - (_a = yield core.Supplier.get(this._options.environment)) !== null && - _a !== void 0 - ? _a - : environments.CommonApiEnvironment.Default, - 'GetGlobalActivity', - ), - method: 'GET', - headers: Object.assign( - { - address: - (yield core.Supplier.get(this._options.address)) != null - ? yield core.Supplier.get(this._options.address) - : undefined, - 'X-Fern-Language': 'JavaScript', - 'X-Fern-Runtime': core.RUNTIME.type, - 'X-Fern-Runtime-Version': core.RUNTIME.version, - }, - yield this._getCustomAuthorizationHeaders(), - ), - contentType: 'application/json', - requestType: 'json', - timeoutMs: - (requestOptions === null || requestOptions === void 0 - ? void 0 - : requestOptions.timeoutInSeconds) != null - ? requestOptions.timeoutInSeconds * 1000 - : 60000, - maxRetries: - requestOptions === null || requestOptions === void 0 - ? void 0 - : requestOptions.maxRetries, - abortSignal: - requestOptions === null || requestOptions === void 0 - ? void 0 - : requestOptions.abortSignal, - }); - if (_response.ok) { - return serializers.user.getGlobalActivity.Response.parseOrThrow( - _response.body, - { - unrecognizedObjectKeys: 'passthrough', - allowUnrecognizedUnionMembers: true, - allowUnrecognizedEnumValues: true, - breadcrumbsPrefix: ['response'], - }, - ); + const { isGlobal, threadLimit, commentLimit } = request; + const _queryParams = {}; + if (isGlobal != null) { + _queryParams['is_global'] = isGlobal.toString(); } - if (_response.error.reason === 'status-code') { - throw new errors.CommonApiError({ - statusCode: _response.error.statusCode, - body: _response.error.body, - }); + if (threadLimit != null) { + _queryParams['thread_limit'] = threadLimit.toString(); } - switch (_response.error.reason) { - case 'non-json': - throw new errors.CommonApiError({ - statusCode: _response.error.statusCode, - body: _response.error.rawBody, - }); - case 'timeout': - throw new errors.CommonApiTimeoutError(); - case 'unknown': - throw new errors.CommonApiError({ - message: _response.error.errorMessage, - }); + if (commentLimit != null) { + _queryParams['comment_limit'] = commentLimit.toString(); } - }); - } - /** - * @param {User.RequestOptions} requestOptions - Request-specific configuration. - * - * @example - * await client.user.getUserActivity() - */ - getUserActivity(requestOptions) { - var _a; - return __awaiter(this, void 0, void 0, function* () { const _response = yield core.fetcher({ url: urlJoin( (_a = yield core.Supplier.get(this._options.environment)) !== null && @@ -153,6 +86,7 @@ export class User { yield this._getCustomAuthorizationHeaders(), ), contentType: 'application/json', + queryParameters: _queryParams, requestType: 'json', timeoutMs: (requestOptions === null || requestOptions === void 0 diff --git a/libs/api-client/src/api/resources/user/client/index.d.ts b/libs/api-client/src/api/resources/user/client/index.d.ts index cb0ff5c3b54..c3dff2f3f5c 100644 --- a/libs/api-client/src/api/resources/user/client/index.d.ts +++ b/libs/api-client/src/api/resources/user/client/index.d.ts @@ -1 +1 @@ -export {}; +export * from './requests'; diff --git a/libs/api-client/src/api/resources/user/client/index.js b/libs/api-client/src/api/resources/user/client/index.js index cb0ff5c3b54..c3dff2f3f5c 100644 --- a/libs/api-client/src/api/resources/user/client/index.js +++ b/libs/api-client/src/api/resources/user/client/index.js @@ -1 +1 @@ -export {}; +export * from './requests'; diff --git a/libs/api-client/src/api/resources/user/client/requests/GetUserActivityRequest.d.ts b/libs/api-client/src/api/resources/user/client/requests/GetUserActivityRequest.d.ts new file mode 100644 index 00000000000..8c94f764dcc --- /dev/null +++ b/libs/api-client/src/api/resources/user/client/requests/GetUserActivityRequest.d.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +/** + * @example + * {} + */ +export interface GetUserActivityRequest { + isGlobal?: boolean; + threadLimit?: number; + commentLimit?: number; +} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.js b/libs/api-client/src/api/resources/user/client/requests/GetUserActivityRequest.js similarity index 100% rename from libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.js rename to libs/api-client/src/api/resources/user/client/requests/GetUserActivityRequest.js diff --git a/libs/api-client/src/api/resources/user/client/requests/index.d.ts b/libs/api-client/src/api/resources/user/client/requests/index.d.ts new file mode 100644 index 00000000000..fa13dcaf02a --- /dev/null +++ b/libs/api-client/src/api/resources/user/client/requests/index.d.ts @@ -0,0 +1 @@ +export { type GetUserActivityRequest } from './GetUserActivityRequest'; diff --git a/libs/api-client/src/api/resources/user/client/requests/index.js b/libs/api-client/src/api/resources/user/client/requests/index.js new file mode 100644 index 00000000000..cb0ff5c3b54 --- /dev/null +++ b/libs/api-client/src/api/resources/user/client/requests/index.js @@ -0,0 +1 @@ +export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.d.ts deleted file mode 100644 index a497928fed6..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItem.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../index'; -export interface GetGlobalActivityResponseItem { - thread: CommonApi.GetGlobalActivityResponseItemThread; - recentComments?: CommonApi.GetGlobalActivityResponseItemRecentCommentsItem[]; -} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts deleted file mode 100644 index 265cb5e3015..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../index'; -export interface GetGlobalActivityResponseItemRecentCommentsItem { - id: number; - address: string; - text: string; - createdAt: string; - updatedAt?: string; - deletedAt?: string; - markedAsSpamAt?: string; - discordMeta?: CommonApi.GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta; - profileName?: string; - profileAvatarUrl?: string; - userId?: number; -} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts deleted file mode 100644 index becb16cdfe2..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../index'; -export interface GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta { - user: CommonApi.GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser; - channelId: string; - messageId: string; -} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts deleted file mode 100644 index 74d99cab9e3..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export interface GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser { - id: string; - username: string; -} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.d.ts deleted file mode 100644 index d993bcaf523..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../index'; -export interface GetGlobalActivityResponseItemThread { - id: number; - communityId: string; - body: string; - title: string; - numberOfComments: number; - createdAt?: string; - updatedAt?: string; - deletedAt?: string; - lockedAt?: string; - kind: string; - stage: string; - archivedAt?: string; - readOnly: boolean; - hasPoll?: boolean; - markedAsSpamAt?: string; - discordMeta?: CommonApi.GetGlobalActivityResponseItemThreadDiscordMeta; - profileName?: string; - profileAvatar?: string; - userId: number; - userAddress: string; - topic: CommonApi.GetGlobalActivityResponseItemThreadTopic; -} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.js deleted file mode 100644 index 0b46289f5b8..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThread.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts deleted file mode 100644 index d3d08ba481f..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../index'; -export interface GetGlobalActivityResponseItemThreadDiscordMeta { - user: CommonApi.GetGlobalActivityResponseItemThreadDiscordMetaUser; - channelId: string; - messageId: string; -} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js deleted file mode 100644 index 0b46289f5b8..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts deleted file mode 100644 index c0bbb62efe8..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export interface GetGlobalActivityResponseItemThreadDiscordMetaUser { - id: string; - username: string; -} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js deleted file mode 100644 index 0b46289f5b8..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts deleted file mode 100644 index e9d54923e27..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export interface GetGlobalActivityResponseItemThreadTopic { - id: number; - name: string; - description: string; -} diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js b/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js deleted file mode 100644 index 0b46289f5b8..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.d.ts index 7a414f9d956..708b74ea636 100644 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.d.ts +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItem.d.ts @@ -3,6 +3,27 @@ */ import * as CommonApi from '../../../index'; export interface GetUserActivityResponseItem { - thread: CommonApi.GetUserActivityResponseItemThread; + communityId: string; + communityIcon?: string; + id: number; + userId: number; + userAddress: string; + profileName?: string; + profileAvatar?: string; + body: string; + title: string; + kind: string; + stage: string; + numberOfComments: number; + createdAt?: string; + updatedAt?: string; + deletedAt?: string; + lockedAt?: string; + archivedAt?: string; + markedAsSpamAt?: string; + readOnly: boolean; + hasPoll?: boolean; + discordMeta?: CommonApi.GetUserActivityResponseItemDiscordMeta; + topic: CommonApi.GetUserActivityResponseItemTopic; recentComments?: CommonApi.GetUserActivityResponseItemRecentCommentsItem[]; } diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMeta.d.ts similarity index 55% rename from libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts rename to libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMeta.d.ts index cf73df444d6..867ff4ae95b 100644 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMeta.d.ts @@ -2,8 +2,8 @@ * This file was auto-generated by Fern from our API Definition. */ import * as CommonApi from '../../../index'; -export interface GetUserActivityResponseItemThreadDiscordMeta { - user: CommonApi.GetUserActivityResponseItemThreadDiscordMetaUser; +export interface GetUserActivityResponseItemDiscordMeta { + user: CommonApi.GetUserActivityResponseItemDiscordMetaUser; channelId: string; messageId: string; } diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMeta.js similarity index 100% rename from libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js rename to libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMeta.js diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.d.ts similarity index 61% rename from libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts rename to libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.d.ts index 80682d6d5dd..e55398eee22 100644 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.d.ts @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -export interface GetUserActivityResponseItemThreadDiscordMetaUser { +export interface GetUserActivityResponseItemDiscordMetaUser { id: string; username: string; } diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.js similarity index 100% rename from libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js rename to libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.js diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts index d2b11e577c1..c721a34d0c1 100644 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts @@ -5,13 +5,13 @@ import * as CommonApi from '../../../index'; export interface GetUserActivityResponseItemRecentCommentsItem { id: number; address: string; + userId?: number; + profileName?: string; + profileAvatar?: string; text: string; createdAt: string; updatedAt?: string; deletedAt?: string; markedAsSpamAt?: string; discordMeta?: CommonApi.GetUserActivityResponseItemRecentCommentsItemDiscordMeta; - profileName?: string; - profileAvatarUrl?: string; - userId?: number; } diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.d.ts deleted file mode 100644 index adbe4972ca3..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../index'; -export interface GetUserActivityResponseItemThread { - id: number; - communityId: string; - body: string; - title: string; - numberOfComments: number; - createdAt?: string; - updatedAt?: string; - deletedAt?: string; - lockedAt?: string; - kind: string; - stage: string; - archivedAt?: string; - readOnly: boolean; - hasPoll?: boolean; - markedAsSpamAt?: string; - discordMeta?: CommonApi.GetUserActivityResponseItemThreadDiscordMeta; - profileName?: string; - profileAvatar?: string; - userId: number; - userAddress: string; - topic: CommonApi.GetUserActivityResponseItemThreadTopic; -} diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.js deleted file mode 100644 index 0b46289f5b8..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThread.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js deleted file mode 100644 index 0b46289f5b8..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js deleted file mode 100644 index 0b46289f5b8..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.js deleted file mode 100644 index 0b46289f5b8..00000000000 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -export {}; diff --git a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemTopic.d.ts similarity index 68% rename from libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts rename to libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemTopic.d.ts index 373650f65db..12290cb3b66 100644 --- a/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts +++ b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemTopic.d.ts @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -export interface GetUserActivityResponseItemThreadTopic { +export interface GetUserActivityResponseItemTopic { id: number; name: string; description: string; diff --git a/libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js b/libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemTopic.js similarity index 100% rename from libs/api-client/src/api/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js rename to libs/api-client/src/api/resources/user/types/GetUserActivityResponseItemTopic.js diff --git a/libs/api-client/src/api/resources/user/types/index.d.ts b/libs/api-client/src/api/resources/user/types/index.d.ts index 8af3cf3d4d1..150b153c887 100644 --- a/libs/api-client/src/api/resources/user/types/index.d.ts +++ b/libs/api-client/src/api/resources/user/types/index.d.ts @@ -1,17 +1,8 @@ -export * from './GetGlobalActivityResponseItem'; -export * from './GetGlobalActivityResponseItemRecentCommentsItem'; -export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; -export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export * from './GetGlobalActivityResponseItemThread'; -export * from './GetGlobalActivityResponseItemThreadDiscordMeta'; -export * from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; -export * from './GetGlobalActivityResponseItemThreadTopic'; export * from './GetNewContentResponse'; export * from './GetUserActivityResponseItem'; +export * from './GetUserActivityResponseItemDiscordMeta'; +export * from './GetUserActivityResponseItemDiscordMetaUser'; export * from './GetUserActivityResponseItemRecentCommentsItem'; export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export * from './GetUserActivityResponseItemThread'; -export * from './GetUserActivityResponseItemThreadDiscordMeta'; -export * from './GetUserActivityResponseItemThreadDiscordMetaUser'; -export * from './GetUserActivityResponseItemThreadTopic'; +export * from './GetUserActivityResponseItemTopic'; diff --git a/libs/api-client/src/api/resources/user/types/index.js b/libs/api-client/src/api/resources/user/types/index.js index 8af3cf3d4d1..150b153c887 100644 --- a/libs/api-client/src/api/resources/user/types/index.js +++ b/libs/api-client/src/api/resources/user/types/index.js @@ -1,17 +1,8 @@ -export * from './GetGlobalActivityResponseItem'; -export * from './GetGlobalActivityResponseItemRecentCommentsItem'; -export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; -export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export * from './GetGlobalActivityResponseItemThread'; -export * from './GetGlobalActivityResponseItemThreadDiscordMeta'; -export * from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; -export * from './GetGlobalActivityResponseItemThreadTopic'; export * from './GetNewContentResponse'; export * from './GetUserActivityResponseItem'; +export * from './GetUserActivityResponseItemDiscordMeta'; +export * from './GetUserActivityResponseItemDiscordMetaUser'; export * from './GetUserActivityResponseItemRecentCommentsItem'; export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export * from './GetUserActivityResponseItemThread'; -export * from './GetUserActivityResponseItemThreadDiscordMeta'; -export * from './GetUserActivityResponseItemThreadDiscordMetaUser'; -export * from './GetUserActivityResponseItemThreadTopic'; +export * from './GetUserActivityResponseItemTopic'; diff --git a/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.d.ts b/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.d.ts deleted file mode 100644 index 7ae7bfdc054..00000000000 --- a/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -import { GetGlobalActivityResponseItem } from '../types/GetGlobalActivityResponseItem'; -export declare const Response: core.serialization.Schema< - serializers.user.getGlobalActivity.Response.Raw, - CommonApi.GetGlobalActivityResponseItem[] ->; -export declare namespace Response { - type Raw = GetGlobalActivityResponseItem.Raw[]; -} diff --git a/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.js b/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.js deleted file mode 100644 index b47ff2556d8..00000000000 --- a/libs/api-client/src/serialization/resources/user/client/getGlobalActivity.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -import { GetGlobalActivityResponseItem } from '../types/GetGlobalActivityResponseItem'; -export const Response = core.serialization.list(GetGlobalActivityResponseItem); diff --git a/libs/api-client/src/serialization/resources/user/client/index.d.ts b/libs/api-client/src/serialization/resources/user/client/index.d.ts index a508bd5297d..666df5e8788 100644 --- a/libs/api-client/src/serialization/resources/user/client/index.d.ts +++ b/libs/api-client/src/serialization/resources/user/client/index.d.ts @@ -1,2 +1 @@ -export * as getGlobalActivity from './getGlobalActivity'; export * as getUserActivity from './getUserActivity'; diff --git a/libs/api-client/src/serialization/resources/user/client/index.js b/libs/api-client/src/serialization/resources/user/client/index.js index a508bd5297d..666df5e8788 100644 --- a/libs/api-client/src/serialization/resources/user/client/index.js +++ b/libs/api-client/src/serialization/resources/user/client/index.js @@ -1,2 +1 @@ -export * as getGlobalActivity from './getGlobalActivity'; export * as getUserActivity from './getUserActivity'; diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.d.ts deleted file mode 100644 index 268911f411d..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -import { GetGlobalActivityResponseItemRecentCommentsItem } from './GetGlobalActivityResponseItemRecentCommentsItem'; -import { GetGlobalActivityResponseItemThread } from './GetGlobalActivityResponseItemThread'; -export declare const GetGlobalActivityResponseItem: core.serialization.ObjectSchema< - serializers.GetGlobalActivityResponseItem.Raw, - CommonApi.GetGlobalActivityResponseItem ->; -export declare namespace GetGlobalActivityResponseItem { - interface Raw { - thread: GetGlobalActivityResponseItemThread.Raw; - recent_comments?: - | GetGlobalActivityResponseItemRecentCommentsItem.Raw[] - | null; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.js deleted file mode 100644 index e2a3ac71f68..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItem.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -import { GetGlobalActivityResponseItemRecentCommentsItem } from './GetGlobalActivityResponseItemRecentCommentsItem'; -import { GetGlobalActivityResponseItemThread } from './GetGlobalActivityResponseItemThread'; -export const GetGlobalActivityResponseItem = core.serialization.object({ - thread: GetGlobalActivityResponseItemThread, - recentComments: core.serialization.property( - 'recent_comments', - core.serialization - .list(GetGlobalActivityResponseItemRecentCommentsItem) - .optional(), - ), -}); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts deleted file mode 100644 index 40018770ba6..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -import { GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta } from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; -export declare const GetGlobalActivityResponseItemRecentCommentsItem: core.serialization.ObjectSchema< - serializers.GetGlobalActivityResponseItemRecentCommentsItem.Raw, - CommonApi.GetGlobalActivityResponseItemRecentCommentsItem ->; -export declare namespace GetGlobalActivityResponseItemRecentCommentsItem { - interface Raw { - id: number; - address: string; - text: string; - created_at: string; - updated_at?: string | null; - deleted_at?: string | null; - marked_as_spam_at?: string | null; - discord_meta?: GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.Raw | null; - profile_name?: string | null; - profile_avatar_url?: string | null; - user_id?: number | null; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js deleted file mode 100644 index 465fc53d23e..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItem.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -import { GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta } from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; -export const GetGlobalActivityResponseItemRecentCommentsItem = - core.serialization.object({ - id: core.serialization.number(), - address: core.serialization.string(), - text: core.serialization.string(), - createdAt: core.serialization.property( - 'created_at', - core.serialization.string(), - ), - updatedAt: core.serialization.property( - 'updated_at', - core.serialization.string().optional(), - ), - deletedAt: core.serialization.property( - 'deleted_at', - core.serialization.string().optional(), - ), - markedAsSpamAt: core.serialization.property( - 'marked_as_spam_at', - core.serialization.string().optional(), - ), - discordMeta: core.serialization.property( - 'discord_meta', - GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.optional(), - ), - profileName: core.serialization.property( - 'profile_name', - core.serialization.string().optional(), - ), - profileAvatarUrl: core.serialization.property( - 'profile_avatar_url', - core.serialization.string().optional(), - ), - userId: core.serialization.property( - 'user_id', - core.serialization.number().optional(), - ), - }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts deleted file mode 100644 index 64e969dd8a5..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -import { GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser } from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export declare const GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta: core.serialization.ObjectSchema< - serializers.GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.Raw, - CommonApi.GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta ->; -export declare namespace GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta { - interface Raw { - user: GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.Raw; - channel_id: string; - message_id: string; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js deleted file mode 100644 index 6125a4712fd..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -import { GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser } from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export const GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta = - core.serialization.object({ - user: GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser, - channelId: core.serialization.property( - 'channel_id', - core.serialization.string(), - ), - messageId: core.serialization.property( - 'message_id', - core.serialization.string(), - ), - }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts deleted file mode 100644 index 8c821b738f1..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -export declare const GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser: core.serialization.ObjectSchema< - serializers.GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.Raw, - CommonApi.GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser ->; -export declare namespace GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser { - interface Raw { - id: string; - username: string; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js deleted file mode 100644 index 6c038cfb03e..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -export const GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser = - core.serialization.object({ - id: core.serialization.string(), - username: core.serialization.string(), - }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.d.ts deleted file mode 100644 index e260f78e2b9..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -import { GetGlobalActivityResponseItemThreadDiscordMeta } from './GetGlobalActivityResponseItemThreadDiscordMeta'; -import { GetGlobalActivityResponseItemThreadTopic } from './GetGlobalActivityResponseItemThreadTopic'; -export declare const GetGlobalActivityResponseItemThread: core.serialization.ObjectSchema< - serializers.GetGlobalActivityResponseItemThread.Raw, - CommonApi.GetGlobalActivityResponseItemThread ->; -export declare namespace GetGlobalActivityResponseItemThread { - interface Raw { - id: number; - community_id: string; - body: string; - title: string; - numberOfComments: number; - created_at?: string | null; - updated_at?: string | null; - deleted_at?: string | null; - locked_at?: string | null; - kind: string; - stage: string; - archived_at?: string | null; - read_only: boolean; - has_poll?: boolean | null; - marked_as_spam_at?: string | null; - discord_meta?: GetGlobalActivityResponseItemThreadDiscordMeta.Raw | null; - profile_name?: string | null; - profile_avatar?: string | null; - user_id: number; - user_address: string; - topic: GetGlobalActivityResponseItemThreadTopic.Raw; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.js deleted file mode 100644 index ed01b35d4a1..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThread.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -import { GetGlobalActivityResponseItemThreadDiscordMeta } from './GetGlobalActivityResponseItemThreadDiscordMeta'; -import { GetGlobalActivityResponseItemThreadTopic } from './GetGlobalActivityResponseItemThreadTopic'; -export const GetGlobalActivityResponseItemThread = core.serialization.object({ - id: core.serialization.number(), - communityId: core.serialization.property( - 'community_id', - core.serialization.string(), - ), - body: core.serialization.string(), - title: core.serialization.string(), - numberOfComments: core.serialization.number(), - createdAt: core.serialization.property( - 'created_at', - core.serialization.string().optional(), - ), - updatedAt: core.serialization.property( - 'updated_at', - core.serialization.string().optional(), - ), - deletedAt: core.serialization.property( - 'deleted_at', - core.serialization.string().optional(), - ), - lockedAt: core.serialization.property( - 'locked_at', - core.serialization.string().optional(), - ), - kind: core.serialization.string(), - stage: core.serialization.string(), - archivedAt: core.serialization.property( - 'archived_at', - core.serialization.string().optional(), - ), - readOnly: core.serialization.property( - 'read_only', - core.serialization.boolean(), - ), - hasPoll: core.serialization.property( - 'has_poll', - core.serialization.boolean().optional(), - ), - markedAsSpamAt: core.serialization.property( - 'marked_as_spam_at', - core.serialization.string().optional(), - ), - discordMeta: core.serialization.property( - 'discord_meta', - GetGlobalActivityResponseItemThreadDiscordMeta.optional(), - ), - profileName: core.serialization.property( - 'profile_name', - core.serialization.string().optional(), - ), - profileAvatar: core.serialization.property( - 'profile_avatar', - core.serialization.string().optional(), - ), - userId: core.serialization.property('user_id', core.serialization.number()), - userAddress: core.serialization.property( - 'user_address', - core.serialization.string(), - ), - topic: GetGlobalActivityResponseItemThreadTopic, -}); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts deleted file mode 100644 index cc303ef8e8c..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -import { GetGlobalActivityResponseItemThreadDiscordMetaUser } from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; -export declare const GetGlobalActivityResponseItemThreadDiscordMeta: core.serialization.ObjectSchema< - serializers.GetGlobalActivityResponseItemThreadDiscordMeta.Raw, - CommonApi.GetGlobalActivityResponseItemThreadDiscordMeta ->; -export declare namespace GetGlobalActivityResponseItemThreadDiscordMeta { - interface Raw { - user: GetGlobalActivityResponseItemThreadDiscordMetaUser.Raw; - channel_id: string; - message_id: string; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js deleted file mode 100644 index 5bed3d55849..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMeta.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -import { GetGlobalActivityResponseItemThreadDiscordMetaUser } from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; -export const GetGlobalActivityResponseItemThreadDiscordMeta = - core.serialization.object({ - user: GetGlobalActivityResponseItemThreadDiscordMetaUser, - channelId: core.serialization.property( - 'channel_id', - core.serialization.string(), - ), - messageId: core.serialization.property( - 'message_id', - core.serialization.string(), - ), - }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts deleted file mode 100644 index 25f73b5a740..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -export declare const GetGlobalActivityResponseItemThreadDiscordMetaUser: core.serialization.ObjectSchema< - serializers.GetGlobalActivityResponseItemThreadDiscordMetaUser.Raw, - CommonApi.GetGlobalActivityResponseItemThreadDiscordMetaUser ->; -export declare namespace GetGlobalActivityResponseItemThreadDiscordMetaUser { - interface Raw { - id: string; - username: string; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js deleted file mode 100644 index 8135781f014..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadDiscordMetaUser.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -export const GetGlobalActivityResponseItemThreadDiscordMetaUser = - core.serialization.object({ - id: core.serialization.string(), - username: core.serialization.string(), - }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts deleted file mode 100644 index d8771177dfd..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -export declare const GetGlobalActivityResponseItemThreadTopic: core.serialization.ObjectSchema< - serializers.GetGlobalActivityResponseItemThreadTopic.Raw, - CommonApi.GetGlobalActivityResponseItemThreadTopic ->; -export declare namespace GetGlobalActivityResponseItemThreadTopic { - interface Raw { - id: number; - name: string; - description: string; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js b/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js deleted file mode 100644 index 2a83dc18f36..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetGlobalActivityResponseItemThreadTopic.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -export const GetGlobalActivityResponseItemThreadTopic = - core.serialization.object({ - id: core.serialization.number(), - name: core.serialization.string(), - description: core.serialization.string(), - }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.d.ts index c45becf5f65..8261cd05b20 100644 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.d.ts +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.d.ts @@ -4,15 +4,37 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; +import { GetUserActivityResponseItemDiscordMeta } from './GetUserActivityResponseItemDiscordMeta'; import { GetUserActivityResponseItemRecentCommentsItem } from './GetUserActivityResponseItemRecentCommentsItem'; -import { GetUserActivityResponseItemThread } from './GetUserActivityResponseItemThread'; +import { GetUserActivityResponseItemTopic } from './GetUserActivityResponseItemTopic'; export declare const GetUserActivityResponseItem: core.serialization.ObjectSchema< serializers.GetUserActivityResponseItem.Raw, CommonApi.GetUserActivityResponseItem >; export declare namespace GetUserActivityResponseItem { interface Raw { - thread: GetUserActivityResponseItemThread.Raw; + community_id: string; + community_icon?: string | null; + id: number; + user_id: number; + user_address: string; + profile_name?: string | null; + profile_avatar?: string | null; + body: string; + title: string; + kind: string; + stage: string; + number_of_comments: number; + created_at?: string | null; + updated_at?: string | null; + deleted_at?: string | null; + locked_at?: string | null; + archived_at?: string | null; + marked_as_spam_at?: string | null; + read_only: boolean; + has_poll?: boolean | null; + discord_meta?: GetUserActivityResponseItemDiscordMeta.Raw | null; + topic: GetUserActivityResponseItemTopic.Raw; recent_comments?: | GetUserActivityResponseItemRecentCommentsItem.Raw[] | null; diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.js index af90d6c69ba..0f587969dcc 100644 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.js +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItem.js @@ -2,10 +2,77 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; +import { GetUserActivityResponseItemDiscordMeta } from './GetUserActivityResponseItemDiscordMeta'; import { GetUserActivityResponseItemRecentCommentsItem } from './GetUserActivityResponseItemRecentCommentsItem'; -import { GetUserActivityResponseItemThread } from './GetUserActivityResponseItemThread'; +import { GetUserActivityResponseItemTopic } from './GetUserActivityResponseItemTopic'; export const GetUserActivityResponseItem = core.serialization.object({ - thread: GetUserActivityResponseItemThread, + communityId: core.serialization.property( + 'community_id', + core.serialization.string(), + ), + communityIcon: core.serialization.property( + 'community_icon', + core.serialization.string().optional(), + ), + id: core.serialization.number(), + userId: core.serialization.property('user_id', core.serialization.number()), + userAddress: core.serialization.property( + 'user_address', + core.serialization.string(), + ), + profileName: core.serialization.property( + 'profile_name', + core.serialization.string().optional(), + ), + profileAvatar: core.serialization.property( + 'profile_avatar', + core.serialization.string().optional(), + ), + body: core.serialization.string(), + title: core.serialization.string(), + kind: core.serialization.string(), + stage: core.serialization.string(), + numberOfComments: core.serialization.property( + 'number_of_comments', + core.serialization.number(), + ), + createdAt: core.serialization.property( + 'created_at', + core.serialization.string().optional(), + ), + updatedAt: core.serialization.property( + 'updated_at', + core.serialization.string().optional(), + ), + deletedAt: core.serialization.property( + 'deleted_at', + core.serialization.string().optional(), + ), + lockedAt: core.serialization.property( + 'locked_at', + core.serialization.string().optional(), + ), + archivedAt: core.serialization.property( + 'archived_at', + core.serialization.string().optional(), + ), + markedAsSpamAt: core.serialization.property( + 'marked_as_spam_at', + core.serialization.string().optional(), + ), + readOnly: core.serialization.property( + 'read_only', + core.serialization.boolean(), + ), + hasPoll: core.serialization.property( + 'has_poll', + core.serialization.boolean().optional(), + ), + discordMeta: core.serialization.property( + 'discord_meta', + GetUserActivityResponseItemDiscordMeta.optional(), + ), + topic: GetUserActivityResponseItemTopic, recentComments: core.serialization.property( 'recent_comments', core.serialization diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMeta.d.ts new file mode 100644 index 00000000000..32ed8b1343f --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMeta.d.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +import { GetUserActivityResponseItemDiscordMetaUser } from './GetUserActivityResponseItemDiscordMetaUser'; +export declare const GetUserActivityResponseItemDiscordMeta: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemDiscordMeta.Raw, + CommonApi.GetUserActivityResponseItemDiscordMeta +>; +export declare namespace GetUserActivityResponseItemDiscordMeta { + interface Raw { + user: GetUserActivityResponseItemDiscordMetaUser.Raw; + channel_id: string; + message_id: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMeta.js similarity index 54% rename from libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js rename to libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMeta.js index ae53c7f686d..f6ff0c0f4c5 100644 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.js +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMeta.js @@ -2,10 +2,10 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; -import { GetUserActivityResponseItemThreadDiscordMetaUser } from './GetUserActivityResponseItemThreadDiscordMetaUser'; -export const GetUserActivityResponseItemThreadDiscordMeta = - core.serialization.object({ - user: GetUserActivityResponseItemThreadDiscordMetaUser, +import { GetUserActivityResponseItemDiscordMetaUser } from './GetUserActivityResponseItemDiscordMetaUser'; +export const GetUserActivityResponseItemDiscordMeta = core.serialization.object( + { + user: GetUserActivityResponseItemDiscordMetaUser, channelId: core.serialization.property( 'channel_id', core.serialization.string(), @@ -14,4 +14,5 @@ export const GetUserActivityResponseItemThreadDiscordMeta = 'message_id', core.serialization.string(), ), - }); + }, +); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.d.ts new file mode 100644 index 00000000000..3ac6d8ff058 --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.d.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as CommonApi from '../../../../api/index'; +import * as core from '../../../../core'; +import * as serializers from '../../../index'; +export declare const GetUserActivityResponseItemDiscordMetaUser: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemDiscordMetaUser.Raw, + CommonApi.GetUserActivityResponseItemDiscordMetaUser +>; +export declare namespace GetUserActivityResponseItemDiscordMetaUser { + interface Raw { + id: string; + username: string; + } +} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.js similarity index 78% rename from libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js rename to libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.js index 35eb77b3aba..f5684e750d6 100644 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.js +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemDiscordMetaUser.js @@ -2,7 +2,7 @@ * This file was auto-generated by Fern from our API Definition. */ import * as core from '../../../../core'; -export const GetUserActivityResponseItemThreadDiscordMetaUser = +export const GetUserActivityResponseItemDiscordMetaUser = core.serialization.object({ id: core.serialization.string(), username: core.serialization.string(), diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts index d4ba2d0af59..2cbbd563251 100644 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.d.ts @@ -13,14 +13,14 @@ export declare namespace GetUserActivityResponseItemRecentCommentsItem { interface Raw { id: number; address: string; + user_id?: number | null; + profile_name?: string | null; + profile_avatar?: string | null; text: string; created_at: string; updated_at?: string | null; deleted_at?: string | null; marked_as_spam_at?: string | null; discord_meta?: GetUserActivityResponseItemRecentCommentsItemDiscordMeta.Raw | null; - profile_name?: string | null; - profile_avatar_url?: string | null; - user_id?: number | null; } } diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js index e44389192bc..4788e971fbc 100644 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemRecentCommentsItem.js @@ -7,6 +7,18 @@ export const GetUserActivityResponseItemRecentCommentsItem = core.serialization.object({ id: core.serialization.number(), address: core.serialization.string(), + userId: core.serialization.property( + 'user_id', + core.serialization.number().optional(), + ), + profileName: core.serialization.property( + 'profile_name', + core.serialization.string().optional(), + ), + profileAvatar: core.serialization.property( + 'profile_avatar', + core.serialization.string().optional(), + ), text: core.serialization.string(), createdAt: core.serialization.property( 'created_at', @@ -28,16 +40,4 @@ export const GetUserActivityResponseItemRecentCommentsItem = 'discord_meta', GetUserActivityResponseItemRecentCommentsItemDiscordMeta.optional(), ), - profileName: core.serialization.property( - 'profile_name', - core.serialization.string().optional(), - ), - profileAvatarUrl: core.serialization.property( - 'profile_avatar_url', - core.serialization.string().optional(), - ), - userId: core.serialization.property( - 'user_id', - core.serialization.number().optional(), - ), }); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.d.ts deleted file mode 100644 index 5fd44dea174..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -import { GetUserActivityResponseItemThreadDiscordMeta } from './GetUserActivityResponseItemThreadDiscordMeta'; -import { GetUserActivityResponseItemThreadTopic } from './GetUserActivityResponseItemThreadTopic'; -export declare const GetUserActivityResponseItemThread: core.serialization.ObjectSchema< - serializers.GetUserActivityResponseItemThread.Raw, - CommonApi.GetUserActivityResponseItemThread ->; -export declare namespace GetUserActivityResponseItemThread { - interface Raw { - id: number; - community_id: string; - body: string; - title: string; - numberOfComments: number; - created_at?: string | null; - updated_at?: string | null; - deleted_at?: string | null; - locked_at?: string | null; - kind: string; - stage: string; - archived_at?: string | null; - read_only: boolean; - has_poll?: boolean | null; - marked_as_spam_at?: string | null; - discord_meta?: GetUserActivityResponseItemThreadDiscordMeta.Raw | null; - profile_name?: string | null; - profile_avatar?: string | null; - user_id: number; - user_address: string; - topic: GetUserActivityResponseItemThreadTopic.Raw; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.js deleted file mode 100644 index f309826e29c..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThread.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -import { GetUserActivityResponseItemThreadDiscordMeta } from './GetUserActivityResponseItemThreadDiscordMeta'; -import { GetUserActivityResponseItemThreadTopic } from './GetUserActivityResponseItemThreadTopic'; -export const GetUserActivityResponseItemThread = core.serialization.object({ - id: core.serialization.number(), - communityId: core.serialization.property( - 'community_id', - core.serialization.string(), - ), - body: core.serialization.string(), - title: core.serialization.string(), - numberOfComments: core.serialization.number(), - createdAt: core.serialization.property( - 'created_at', - core.serialization.string().optional(), - ), - updatedAt: core.serialization.property( - 'updated_at', - core.serialization.string().optional(), - ), - deletedAt: core.serialization.property( - 'deleted_at', - core.serialization.string().optional(), - ), - lockedAt: core.serialization.property( - 'locked_at', - core.serialization.string().optional(), - ), - kind: core.serialization.string(), - stage: core.serialization.string(), - archivedAt: core.serialization.property( - 'archived_at', - core.serialization.string().optional(), - ), - readOnly: core.serialization.property( - 'read_only', - core.serialization.boolean(), - ), - hasPoll: core.serialization.property( - 'has_poll', - core.serialization.boolean().optional(), - ), - markedAsSpamAt: core.serialization.property( - 'marked_as_spam_at', - core.serialization.string().optional(), - ), - discordMeta: core.serialization.property( - 'discord_meta', - GetUserActivityResponseItemThreadDiscordMeta.optional(), - ), - profileName: core.serialization.property( - 'profile_name', - core.serialization.string().optional(), - ), - profileAvatar: core.serialization.property( - 'profile_avatar', - core.serialization.string().optional(), - ), - userId: core.serialization.property('user_id', core.serialization.number()), - userAddress: core.serialization.property( - 'user_address', - core.serialization.string(), - ), - topic: GetUserActivityResponseItemThreadTopic, -}); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts deleted file mode 100644 index 05d0510a717..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMeta.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -import { GetUserActivityResponseItemThreadDiscordMetaUser } from './GetUserActivityResponseItemThreadDiscordMetaUser'; -export declare const GetUserActivityResponseItemThreadDiscordMeta: core.serialization.ObjectSchema< - serializers.GetUserActivityResponseItemThreadDiscordMeta.Raw, - CommonApi.GetUserActivityResponseItemThreadDiscordMeta ->; -export declare namespace GetUserActivityResponseItemThreadDiscordMeta { - interface Raw { - user: GetUserActivityResponseItemThreadDiscordMetaUser.Raw; - channel_id: string; - message_id: string; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts deleted file mode 100644 index 27d55cc03e9..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadDiscordMetaUser.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as CommonApi from '../../../../api/index'; -import * as core from '../../../../core'; -import * as serializers from '../../../index'; -export declare const GetUserActivityResponseItemThreadDiscordMetaUser: core.serialization.ObjectSchema< - serializers.GetUserActivityResponseItemThreadDiscordMetaUser.Raw, - CommonApi.GetUserActivityResponseItemThreadDiscordMetaUser ->; -export declare namespace GetUserActivityResponseItemThreadDiscordMetaUser { - interface Raw { - id: string; - username: string; - } -} diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.js deleted file mode 100644 index ed1d22c098d..00000000000 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -import * as core from '../../../../core'; -export const GetUserActivityResponseItemThreadTopic = core.serialization.object( - { - id: core.serialization.number(), - name: core.serialization.string(), - description: core.serialization.string(), - }, -); diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemTopic.d.ts similarity index 52% rename from libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts rename to libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemTopic.d.ts index 9091b6f7425..513fb2ccfb5 100644 --- a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemThreadTopic.d.ts +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemTopic.d.ts @@ -4,11 +4,11 @@ import * as CommonApi from '../../../../api/index'; import * as core from '../../../../core'; import * as serializers from '../../../index'; -export declare const GetUserActivityResponseItemThreadTopic: core.serialization.ObjectSchema< - serializers.GetUserActivityResponseItemThreadTopic.Raw, - CommonApi.GetUserActivityResponseItemThreadTopic +export declare const GetUserActivityResponseItemTopic: core.serialization.ObjectSchema< + serializers.GetUserActivityResponseItemTopic.Raw, + CommonApi.GetUserActivityResponseItemTopic >; -export declare namespace GetUserActivityResponseItemThreadTopic { +export declare namespace GetUserActivityResponseItemTopic { interface Raw { id: number; name: string; diff --git a/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemTopic.js b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemTopic.js new file mode 100644 index 00000000000..b9556d6ca5e --- /dev/null +++ b/libs/api-client/src/serialization/resources/user/types/GetUserActivityResponseItemTopic.js @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as core from '../../../../core'; +export const GetUserActivityResponseItemTopic = core.serialization.object({ + id: core.serialization.number(), + name: core.serialization.string(), + description: core.serialization.string(), +}); diff --git a/libs/api-client/src/serialization/resources/user/types/index.d.ts b/libs/api-client/src/serialization/resources/user/types/index.d.ts index 8af3cf3d4d1..150b153c887 100644 --- a/libs/api-client/src/serialization/resources/user/types/index.d.ts +++ b/libs/api-client/src/serialization/resources/user/types/index.d.ts @@ -1,17 +1,8 @@ -export * from './GetGlobalActivityResponseItem'; -export * from './GetGlobalActivityResponseItemRecentCommentsItem'; -export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; -export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export * from './GetGlobalActivityResponseItemThread'; -export * from './GetGlobalActivityResponseItemThreadDiscordMeta'; -export * from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; -export * from './GetGlobalActivityResponseItemThreadTopic'; export * from './GetNewContentResponse'; export * from './GetUserActivityResponseItem'; +export * from './GetUserActivityResponseItemDiscordMeta'; +export * from './GetUserActivityResponseItemDiscordMetaUser'; export * from './GetUserActivityResponseItemRecentCommentsItem'; export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export * from './GetUserActivityResponseItemThread'; -export * from './GetUserActivityResponseItemThreadDiscordMeta'; -export * from './GetUserActivityResponseItemThreadDiscordMetaUser'; -export * from './GetUserActivityResponseItemThreadTopic'; +export * from './GetUserActivityResponseItemTopic'; diff --git a/libs/api-client/src/serialization/resources/user/types/index.js b/libs/api-client/src/serialization/resources/user/types/index.js index 8af3cf3d4d1..150b153c887 100644 --- a/libs/api-client/src/serialization/resources/user/types/index.js +++ b/libs/api-client/src/serialization/resources/user/types/index.js @@ -1,17 +1,8 @@ -export * from './GetGlobalActivityResponseItem'; -export * from './GetGlobalActivityResponseItemRecentCommentsItem'; -export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMeta'; -export * from './GetGlobalActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export * from './GetGlobalActivityResponseItemThread'; -export * from './GetGlobalActivityResponseItemThreadDiscordMeta'; -export * from './GetGlobalActivityResponseItemThreadDiscordMetaUser'; -export * from './GetGlobalActivityResponseItemThreadTopic'; export * from './GetNewContentResponse'; export * from './GetUserActivityResponseItem'; +export * from './GetUserActivityResponseItemDiscordMeta'; +export * from './GetUserActivityResponseItemDiscordMetaUser'; export * from './GetUserActivityResponseItemRecentCommentsItem'; export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMeta'; export * from './GetUserActivityResponseItemRecentCommentsItemDiscordMetaUser'; -export * from './GetUserActivityResponseItemThread'; -export * from './GetUserActivityResponseItemThreadDiscordMeta'; -export * from './GetUserActivityResponseItemThreadDiscordMetaUser'; -export * from './GetUserActivityResponseItemThreadTopic'; +export * from './GetUserActivityResponseItemTopic'; diff --git a/libs/schemas/src/queries/feed.schemas.ts b/libs/schemas/src/queries/feed.schemas.ts index fdc1bc4f03a..7c59bc97ebd 100644 --- a/libs/schemas/src/queries/feed.schemas.ts +++ b/libs/schemas/src/queries/feed.schemas.ts @@ -47,7 +47,7 @@ export const ActivityThread = z.object({ export const ActivityFeed = { input: z.object({ - is_global: z.boolean(), + is_global: z.boolean().optional(), thread_limit: z.number().optional(), comment_limit: z.number().optional(), }), From 7f553b31c04f9e47e1c693b5189ee1acd7e168c1 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 11 Oct 2024 20:58:56 +0500 Subject: [PATCH 128/425] Rename prop type --- packages/commonwealth/client/scripts/hooks/useTopicGating.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/hooks/useTopicGating.ts b/packages/commonwealth/client/scripts/hooks/useTopicGating.ts index fa94050c3e1..1875fd3a00a 100644 --- a/packages/commonwealth/client/scripts/hooks/useTopicGating.ts +++ b/packages/commonwealth/client/scripts/hooks/useTopicGating.ts @@ -4,7 +4,7 @@ import Permissions from '../utils/Permissions'; type TopicPermission = { id: number; permission: GroupTopicPermissionEnum }; -type IuseTopicGating = { +type UseTopicGatingProps = { communityId: string; apiEnabled: boolean; userAddress: string; @@ -16,7 +16,7 @@ const useTopicGating = ({ communityId, userAddress, topicId, -}: IuseTopicGating) => { +}: UseTopicGatingProps) => { const { data: memberships = [], isLoading: isLoadingMemberships } = useRefreshMembershipQuery({ communityId, From dc1018c6c813958d10adb9ca512773333b379404 Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Fri, 11 Oct 2024 21:39:07 +0500 Subject: [PATCH 129/425] fixed the thread title after creating the new thread --- .../views/components/NewThreadFormLegacy/NewThreadForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index 3d87a41baaf..01cfe5fa42b 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -197,7 +197,7 @@ export const NewThreadForm = () => { setThreadContentDelta(createDeltaFromText('')); clearDraft(); - navigate(`/discussion/${thread.id}`); + navigate(`/discussion/${thread.id}-${thread.title}`); } catch (err) { if (err instanceof SessionKeyError) { checkForSessionKeyRevalidationErrors(err); From c7914ff1bc8f83732c812a9af56b879a7493c555 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 11 Oct 2024 13:47:59 -0400 Subject: [PATCH 130/425] fix lint --- libs/api-client/fern/openapi/openapi.yml | 2 +- libs/api-client/package.json | 2 +- packages/commonwealth/client/scripts/state/api/feeds/index.ts | 3 --- packages/commonwealth/server/api/external-router.ts | 2 +- 4 files changed, 3 insertions(+), 6 deletions(-) delete mode 100644 packages/commonwealth/client/scripts/state/api/feeds/index.ts diff --git a/libs/api-client/fern/openapi/openapi.yml b/libs/api-client/fern/openapi/openapi.yml index 2b9a6fdc984..ff2dd35ef2e 100644 --- a/libs/api-client/fern/openapi/openapi.yml +++ b/libs/api-client/fern/openapi/openapi.yml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: title: Common API - version: 0.0.1 + version: 0.0.6 servers: - url: http://localhost:3000/api/v1 paths: diff --git a/libs/api-client/package.json b/libs/api-client/package.json index 3626909c6e4..f483823928f 100644 --- a/libs/api-client/package.json +++ b/libs/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@commonxyz/api-client", - "version": "0.0.5", + "version": "0.0.6", "type": "module", "description": "Common Client Proxy", "repository": { diff --git a/packages/commonwealth/client/scripts/state/api/feeds/index.ts b/packages/commonwealth/client/scripts/state/api/feeds/index.ts deleted file mode 100644 index d1d9d40c379..00000000000 --- a/packages/commonwealth/client/scripts/state/api/feeds/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import useFetchUserActivityQuery from './fetchUserActivity'; - -export { useFetchUserActivityQuery }; diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 8a1c9f55825..46bd31b9ac0 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -99,7 +99,7 @@ const trpcRouter = trpc.router(api); trpc.useOAS(router, trpcRouter, { title: 'Common API', path: PATH, - version: '0.0.1', + version: '0.0.6', }); export { PATH, router }; From 7aacb5f4c28f50eac897fef19f7ab49bf33c5751 Mon Sep 17 00:00:00 2001 From: israellund Date: Fri, 11 Oct 2024 14:51:40 -0400 Subject: [PATCH 131/425] committing to change branches --- .../client/scripts/views/pages/Communities/Communities.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx index 4bcbbd4ec9f..2ec7b0f5c10 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx @@ -33,6 +33,8 @@ type ExtendedCommunitySliceType = [ ]; const CommunitiesPage = () => { + const containerRef = useRef(); + const { setModeOfManageCommunityStakeModal, modeOfManageCommunityStakeModal, @@ -135,7 +137,8 @@ const CommunitiesPage = () => { }; return ( - + // @ts-expect-error +
@@ -203,6 +206,7 @@ const CommunitiesPage = () => { className="communities-list" style={{ height: '100%', width: '100%' }} data={isInitialCommunitiesLoading ? [] : communitiesList} + customScrollParent={containerRef.current} itemContent={(listIndex, slicedCommunities) => { return slicedCommunities.map((community, sliceIndex) => { const canBuyStake = !!user.addresses.find?.( From de101e712b8520624ff41044c69b9bed58337dc8 Mon Sep 17 00:00:00 2001 From: israellund Date: Fri, 11 Oct 2024 14:53:48 -0400 Subject: [PATCH 132/425] 1 found community copy change --- .../client/scripts/views/pages/Communities/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/helpers.ts b/packages/commonwealth/client/scripts/views/pages/Communities/helpers.ts index efcd6a5b6d4..c3119117bef 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/helpers.ts +++ b/packages/commonwealth/client/scripts/views/pages/Communities/helpers.ts @@ -5,5 +5,5 @@ export const getCommunityCountsString = (totalCommunities: number) => { totalCommunities >= 1000 ? numeral(totalCommunities).format('0.0a') : totalCommunities - } communities`; + } ${totalCommunities === 1 ? 'community' : 'communities'}`; }; From 025c18a2892b133ccf81e0ede9359a80e5ec9452 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 11 Oct 2024 16:15:20 -0400 Subject: [PATCH 133/425] fix tests --- libs/model/src/feed/GetUserActivity.query.ts | 21 ++++++++++--- libs/schemas/src/queries/feed.schemas.ts | 8 ++--- .../integration/api/userDashboard.spec.ts | 30 +++++++++++-------- 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/libs/model/src/feed/GetUserActivity.query.ts b/libs/model/src/feed/GetUserActivity.query.ts index 3ba52fe73e2..0845006900c 100644 --- a/libs/model/src/feed/GetUserActivity.query.ts +++ b/libs/model/src/feed/GetUserActivity.query.ts @@ -1,5 +1,6 @@ import { Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; +import { models } from '../database'; import { GlobalActivityCache, getUserActivityFeed, @@ -10,13 +11,25 @@ export function GetUserActivity(): Query { ...schemas.ActivityFeed, auth: [], secure: false, - body: async ({ actor, payload }) => - payload.is_global + body: async ({ actor, payload }) => { + // ensure we have a user id when not global + const user_id = payload.is_global + ? 0 + : (actor.user?.id ?? + ( + await models.Address.findOne({ + where: { address: actor.address }, + attributes: ['user_id'], + }) + )?.user_id ?? + 0); + return payload.is_global ? await GlobalActivityCache.getInstance().getGlobalActivity() : await getUserActivityFeed({ - user_id: actor.user?.id ?? 0, + user_id, thread_limit: Math.min(payload.thread_limit ?? 50, 50), comment_limit: Math.min(payload.comment_limit ?? 3, 5), - }), + }); + }, }; } diff --git a/libs/schemas/src/queries/feed.schemas.ts b/libs/schemas/src/queries/feed.schemas.ts index 7c59bc97ebd..a76a6666f16 100644 --- a/libs/schemas/src/queries/feed.schemas.ts +++ b/libs/schemas/src/queries/feed.schemas.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; import { DiscordMetaSchema, PG_INT } from '../utils'; export const ActivityComment = z.object({ - id: PG_INT, + id: z.number(), address: z.string(), user_id: z.number().nullish(), profile_name: z.string().nullish(), @@ -18,8 +18,8 @@ export const ActivityComment = z.object({ export const ActivityThread = z.object({ community_id: z.string(), community_icon: z.string().nullish(), - id: PG_INT, - user_id: PG_INT, + id: z.number(), + user_id: z.number(), user_address: z.string(), profile_name: z.string().nullish(), profile_avatar: z.string().nullish(), @@ -38,7 +38,7 @@ export const ActivityThread = z.object({ has_poll: z.boolean().nullish(), discord_meta: DiscordMetaSchema.nullish(), topic: z.object({ - id: PG_INT, + id: z.number(), name: z.string(), description: z.string(), }), diff --git a/packages/commonwealth/test/integration/api/userDashboard.spec.ts b/packages/commonwealth/test/integration/api/userDashboard.spec.ts index 539a55dc0d2..ab24733b216 100644 --- a/packages/commonwealth/test/integration/api/userDashboard.spec.ts +++ b/packages/commonwealth/test/integration/api/userDashboard.spec.ts @@ -162,13 +162,17 @@ describe('User Dashboard API', () => { }); describe('/GetUserActivity', () => { - const apiUrl = '/api/internal/trpc/feed.getUserActivity'; + const queryArgs = { is_global: false }; + const apiUrl = + '/api/internal/trpc/feed.getUserActivity?input=' + + encodeURIComponent(JSON.stringify(queryArgs)); test('should fail without JWT', async () => { const res = await chai.request .agent(server.app) .get(apiUrl) .set('Accept', 'application/json') + .set('address', userAddress) .send({ chain }); expect(res).to.not.be.null; expect(res.error).to.not.be.null; @@ -179,14 +183,14 @@ describe('User Dashboard API', () => { .agent(server.app) .get(apiUrl) .set('Accept', 'application/json') + .set('address', userAddress) .send({ chain, jwt: userJWT }); expect(res.status).to.be.equal(200); - expect(res.body.status).to.be.equal('Success'); - expect(res.body).to.not.be.null; - expect(res.body.result).to.not.be.null; + expect(res.text).to.not.be.null; - const threadIds = res.body.result.map((a) => a.thread.id); + const resBody = JSON.parse(res.text); + const threadIds = resBody.result.data.map((a) => a.id); const chains = await server.models.Thread.findAll({ attributes: attributesOf('community_id'), where: { @@ -213,14 +217,14 @@ describe('User Dashboard API', () => { .agent(server.app) .get(apiUrl) .set('Accept', 'application/json') + .set('address', userAddress) .send({ chain, jwt: userJWT }); expect(res.status).to.be.equal(200); - expect(res.body.status).to.be.equal('Success'); - expect(res.body).to.not.be.null; - expect(res.body.result).to.not.be.null; + expect(res.text).to.not.be.null; - const threadIds = res.body.result.map((a) => a.thread.id); + const resBody = JSON.parse(res.text); + const threadIds = resBody.result.data.map((a) => a.id); const chains = await server.models.Thread.findAll({ attributes: attributesOf('community_id'), where: { @@ -261,14 +265,14 @@ describe('User Dashboard API', () => { .agent(server.app) .get(apiUrl) .set('Accept', 'application/json') + .set('address', userAddress) .send({ chain, jwt: userJWT }); expect(res.status).to.be.equal(200); - expect(res.body.status).to.be.equal('Success'); - expect(res.body).to.not.be.null; - expect(res.body.result).to.not.be.null; + expect(res.text).to.not.be.null; - const threadIds = res.body.result.map((a) => a.thread_id); + const resBody = JSON.parse(res.text); + const threadIds = resBody.result.data.map((a) => a.id); const chains = ( await server.models.Thread.findAll({ attributes: attributesOf('community_id'), From 6aa82cf5cb6e81d8532ccd10ce7496dd1653800c Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Mon, 14 Oct 2024 22:16:54 +0500 Subject: [PATCH 134/425] improve the edit of thread from other screens --- .../pages/discussions/DiscussionsPage.tsx | 2 +- .../pages/view_thread/ViewThreadPage.tsx | 20 +++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index 18c17665678..51b6a3399dd 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -240,7 +240,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { thread={thread} canReact={!disabledActionsTooltipText} canComment={!disabledActionsTooltipText} - onEditStart={() => navigate(`${discussionLink}`)} + onEditStart={() => navigate(`${discussionLink}?isEdit=true`)} onStageTagClick={() => { navigate(`/discussions?stage=${thread.stage}`); }} diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index 807e5f859ac..25c337a1905 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -11,6 +11,7 @@ import { useCommonNavigate } from 'navigation/helpers'; import 'pages/view_thread/index.scss'; import React, { useEffect, useState } from 'react'; import { Helmet } from 'react-helmet-async'; +import { useSearchParams } from 'react-router-dom'; import app from 'state'; import { useFetchCommentsQuery } from 'state/api/comments'; import useGetViewCountByObjectIdQuery from 'state/api/general/getViewCountByObjectId'; @@ -68,12 +69,18 @@ import { SnapshotCreationCard } from './snapshot_creation_card'; type ViewThreadPageProps = { identifier: string; }; +function useParams() { + const [searchParams] = useSearchParams(); + const isEdit = searchParams.get('isEdit') ?? undefined; + return { + isEdit, + }; +} const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { const threadId = identifier.split('-')[0]; - + const { isEdit } = useParams(); const navigate = useCommonNavigate(); - const [isEditingBody, setIsEditingBody] = useState(false); const [isGloballyEditing, setIsGloballyEditing] = useState(false); const [savedEdits, setSavedEdits] = useState(''); @@ -130,6 +137,15 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { thread?.topic?.id, ); + //TODO: + useEffect(() => { + if (thread && isEdit) { + setShouldRestoreEdits(true); + setIsGloballyEditing(true); + setIsEditingBody(true); + } + }, [isEdit]); + const { data: comments = [], error: fetchCommentsError } = useFetchCommentsQuery({ communityId, From 3356bd426d47a2eb75352cad8efff44698aef94d Mon Sep 17 00:00:00 2001 From: KaleemNeslit Date: Mon, 14 Oct 2024 22:39:12 +0500 Subject: [PATCH 135/425] improve the edit of thread from other screens --- .../client/scripts/views/pages/view_thread/ViewThreadPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index 25c337a1905..3418342f1b8 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -139,7 +139,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { //TODO: useEffect(() => { - if (thread && isEdit) { + if (isEdit === 'true') { setShouldRestoreEdits(true); setIsGloballyEditing(true); setIsEditingBody(true); From 4cef2a9b0c7e58f24b977ecc50379c0bcde968d3 Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 15 Oct 2024 13:43:38 +0200 Subject: [PATCH 136/425] Add `onlyNamespace` prop and conditional rendering for weighted topics. --- .../pages/CreateCommunity/CreateCommunity.tsx | 10 ++- .../CommunityStakeStep/CommunityStakeStep.tsx | 4 ++ .../EnableStake/EnableStake.tsx | 52 ++++++++++----- .../SignStakeTransactions.tsx | 63 ++++++++++++------- .../useReserveCommunityNamespace.tsx | 4 ++ .../steps/CommunityStakeStep/types.ts | 2 + .../CreateCommunity/useCreateCommunity.ts | 4 +- .../views/pages/CreateCommunity/utils.ts | 3 +- 8 files changed, 97 insertions(+), 45 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/CreateCommunity.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/CreateCommunity.tsx index b1d41335a9a..09a6fddbad5 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/CreateCommunity.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/CreateCommunity.tsx @@ -10,12 +10,15 @@ import SuccessStep from './steps/SuccessStep'; import useCreateCommunity from './useCreateCommunity'; import { CreateCommunityStep, getFormSteps } from './utils'; +import { useFlag } from 'hooks/useFlag'; import CWPageLayout from 'views/components/component_kit/new_designs/CWPageLayout'; import useAppStatus from '../../../hooks/useAppStatus'; import './CreateCommunity.scss'; import CommunityInformationStep from './steps/CommunityInformationStep'; const CreateCommunity = () => { + const weightedTopicsEnabled = useFlag('weightedTopics'); + const { createCommunityStep, selectedCommunity, @@ -73,6 +76,7 @@ const CreateCommunity = () => { selectedAddress={selectedAddress} // @ts-expect-error chainId={selectedChainId} + onlyNamespace={weightedTopicsEnabled} /> ); @@ -86,7 +90,11 @@ const CreateCommunity = () => {
{!isSuccessStep && ( )} diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx index 50fadef8a00..b0f8767959a 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx @@ -14,6 +14,7 @@ interface CommunityStakeStepProps { isTopicFlow?: boolean; onTopicFlowStepChange?: (step: CreateTopicStep) => void; refetchStakeQuery?: () => void; + onlyNamespace?: boolean; } const CommunityStakeStep = ({ @@ -25,6 +26,7 @@ const CommunityStakeStep = ({ isTopicFlow, onTopicFlowStepChange, refetchStakeQuery, + onlyNamespace, }: CommunityStakeStepProps) => { const [enableStakePage, setEnableStakePage] = useState(true); const [communityStakeData, setCommunityStakeData] = useState({ @@ -60,6 +62,7 @@ const CommunityStakeStep = ({ communityStakeData={communityStakeData} chainId={chainId} isTopicFlow={isTopicFlow} + onlyNamespace={onlyNamespace} /> ) : ( )}
diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/EnableStake/EnableStake.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/EnableStake/EnableStake.tsx index 012c1d5eeae..f75e8b42e9a 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/EnableStake/EnableStake.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/EnableStake/EnableStake.tsx @@ -1,5 +1,6 @@ import React, { useState } from 'react'; +import { useFlag } from 'hooks/useFlag'; import { CWDivider } from 'views/components/component_kit/cw_divider'; import { CWText } from 'views/components/component_kit/cw_text'; import { CWButton } from 'views/components/component_kit/new_designs/CWButton'; @@ -19,10 +20,12 @@ const EnableStake = ({ communityStakeData, chainId, isTopicFlow, + onlyNamespace, }: EnableStakeProps) => { const [namespaceError, setNamespaceError] = useState(''); const { namespaceFactory } = useNamespaceFactory(parseInt(chainId)); + const weightedTopicsEnabled = useFlag('weightedTopics'); const clearNamespaceError = () => { setNamespaceError(''); @@ -58,14 +61,27 @@ const EnableStake = ({ return (
- Do you want to enable community stake? + + {onlyNamespace && weightedTopicsEnabled + ? 'Register a Namespace for your community' + : 'Do you want to enable community stake?'} + - Community stake allows your community to fundraise via member - contributions. Community members can make financial contributions in - exchange for more voting power within the community. The more stake a - member has, the stronger their vote becomes. The funds are stored in a - secure community wallet on-chain and can be redistributed if members - decide to burn their stake. + {onlyNamespace && weightedTopicsEnabled ? ( + <> + Registering your Namespace onchain will enable you to utilize + onchain features on Common such as contests and weighted voting + + ) : ( + <> + Community stake allows your community to fundraise via member + contributions. Community members can make financial contributions + in exchange for more voting power within the community. The more + stake a member has, the stronger their vote becomes. The funds are + stored in a secure community wallet on-chain and can be + redistributed if members decide to burn their stake. + + )} @@ -101,16 +117,18 @@ const EnableStake = ({ /> - - Not sure? - - Learn more about community stake - - + {!onlyNamespace && !weightedTopicsEnabled && ( + + Not sure? + + Learn more about community stake + + + )} diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/SignStakeTransactions.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/SignStakeTransactions.tsx index 84f7a1db3b6..7245d1889f2 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/SignStakeTransactions.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/SignStakeTransactions.tsx @@ -23,6 +23,7 @@ const SignStakeTransactions = ({ isTopicFlow, onSuccess, onCancel, + onlyNamespace, }: SignStakeTransactionsProps) => { const { handleReserveCommunityNamespace, reserveNamespaceData } = useReserveCommunityNamespace({ @@ -31,6 +32,7 @@ const SignStakeTransactions = ({ symbol: communityStakeData.symbol, userAddress: selectedAddress.address, chainId, + onSuccess: onlyNamespace ? onSuccess : undefined, }); const { handleLaunchCommunityStake, launchStakeData } = @@ -59,22 +61,26 @@ const SignStakeTransactions = ({ onClick: handleReserveCommunityNamespace, }, }, - { - label: 'Launch community stake', - state: launchStakeData.state, - errorText: launchStakeData.errorText, - ...(reserveNamespaceData.state === 'completed' - ? { - actionButton: { - label: 'Sign', - disabled: - launchStakeData.state === 'loading' || - launchStakeData.state === 'completed', - onClick: handleLaunchCommunityStake, - }, - } - : {}), - }, + ...(onlyNamespace + ? [] + : [ + { + label: 'Launch community stake', + state: launchStakeData.state, + errorText: launchStakeData.errorText, + ...(reserveNamespaceData.state === 'completed' + ? { + actionButton: { + label: 'Sign', + disabled: + launchStakeData.state === 'loading' || + launchStakeData.state === 'completed', + onClick: handleLaunchCommunityStake, + }, + } + : {}), + }, + ]), ]; }; @@ -83,8 +89,9 @@ const SignStakeTransactions = ({ ? onCancel() : openConfirmation({ title: 'Are you sure you want to cancel?', - description: - 'Community Stake has not been enabled for your community yet', + description: onlyNamespace + ? 'Namespace has not been enabled for your community yet' + : 'Community Stake has not been enabled for your community yet', buttons: [ { label: 'Cancel', @@ -108,12 +115,22 @@ const SignStakeTransactions = ({ return (
- Sign transactions to launch stake? + + {onlyNamespace + ? 'Sign transactions to reserve namespace' + : 'Sign transactions to launch stake?'} + - In order to launch community stake you will need to sign two - transactions. The first launches your community namespace on the - blockchain, and the second launches your community stake. Both - transactions have associated gas fees. + {onlyNamespace ? ( + 'In order to reserve namespace you will need to sign one transaction.' + ) : ( + <> + In order to launch community stake you will need to sign two + transactions. The first launches your community namespace on the + blockchain, and the second launches your community stake. Both + transactions have associated gas fees. + + )} diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/useReserveCommunityNamespace.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/useReserveCommunityNamespace.tsx index b36e902dee9..17318ce84c0 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/useReserveCommunityNamespace.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/useReserveCommunityNamespace.tsx @@ -20,6 +20,7 @@ interface UseReserveCommunityNamespaceProps { symbol: string; userAddress: string; chainId: string; + onSuccess?: () => void; } const useReserveCommunityNamespace = ({ @@ -28,6 +29,7 @@ const useReserveCommunityNamespace = ({ symbol, userAddress, chainId, + onSuccess, }: UseReserveCommunityNamespaceProps) => { const [reserveNamespaceData, setReserveNamespaceData] = useState(defaultActionState); @@ -84,6 +86,8 @@ const useReserveCommunityNamespace = ({ errorText: '', }); + onSuccess?.(); + trackAnalytics({ event: MixpanelCommunityStakeEvent.RESERVED_COMMUNITY_NAMESPACE, community: chainId, diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/types.ts b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/types.ts index 2ca7b2a44ff..6ee10d0e1b2 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/types.ts +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/types.ts @@ -19,6 +19,7 @@ export interface SignStakeTransactionsProps { createdCommunityId: string; chainId: string; isTopicFlow?: boolean; + onlyNamespace?: boolean; } export interface EnableStakeProps { @@ -27,6 +28,7 @@ export interface EnableStakeProps { communityStakeData: StakeData; chainId: string; isTopicFlow?: boolean; + onlyNamespace?: boolean; } export const defaultActionState: ActionState = { diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/useCreateCommunity.ts b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/useCreateCommunity.ts index 8ff216ab2f8..f0856743fd7 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/useCreateCommunity.ts +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/useCreateCommunity.ts @@ -49,9 +49,7 @@ const useCreateCommunity = () => { ); const showCommunityStakeStep = - !weightedTopicsEnabled && - isValidStepToShowCommunityStakeFormStep && - isSupportedChainSelected; + isValidStepToShowCommunityStakeFormStep && isSupportedChainSelected; return { createCommunityStep, diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/utils.ts b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/utils.ts index 56321c2418e..f42794256b5 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/utils.ts +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/utils.ts @@ -11,6 +11,7 @@ export enum CreateCommunityStep { export const getFormSteps = ( createCommunityStep: CreateCommunityStep, showCommunityStakeStep: boolean, + weightedTopicsEnabled: boolean, ): CWFormStepsProps['steps'] => { return [ { @@ -32,7 +33,7 @@ export const getFormSteps = ( ...((showCommunityStakeStep ? [ { - label: 'Community Stake', + label: weightedTopicsEnabled ? 'Namespace' : 'Community Stake', state: createCommunityStep < CreateCommunityStep.CommunityStake ? 'inactive' From 8efa328373565c3ae1321aa7d2f107c600734f43 Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 15 Oct 2024 14:13:06 +0200 Subject: [PATCH 137/425] Add `hasNamespaceReserved`, `namespace`, and `symbol` props; update state logic. --- .../StakeIntegration/StakeIntegration.tsx | 2 ++ .../CommunityStakeStep/CommunityStakeStep.tsx | 14 +++++++++++--- .../SignStakeTransactions.tsx | 2 ++ .../useReserveCommunityNamespace.tsx | 9 +++++++-- .../steps/CommunityStakeStep/types.ts | 1 + 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/StakeIntegration/StakeIntegration.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/StakeIntegration/StakeIntegration.tsx index 0ec5653d3de..4d8caab852e 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/StakeIntegration/StakeIntegration.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/StakeIntegration/StakeIntegration.tsx @@ -127,6 +127,8 @@ const StakeIntegration = ({ onTopicFlowStepChange={onTopicFlowStepChange} createdCommunityName={community?.name} createdCommunityId={community?.id || ''} + namespace={community?.namespace} + symbol={community?.default_symbol} // @ts-expect-error selectedAddress={selectedAddress} chainId={communityChainId} diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx index b0f8767959a..20bcbf2088b 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx @@ -15,6 +15,8 @@ interface CommunityStakeStepProps { onTopicFlowStepChange?: (step: CreateTopicStep) => void; refetchStakeQuery?: () => void; onlyNamespace?: boolean; + namespace?: string | null; + symbol?: string; } const CommunityStakeStep = ({ @@ -27,11 +29,16 @@ const CommunityStakeStep = ({ onTopicFlowStepChange, refetchStakeQuery, onlyNamespace, + namespace, + symbol, }: CommunityStakeStepProps) => { - const [enableStakePage, setEnableStakePage] = useState(true); + const hasNamespaceReserved = !!namespace; + const [enableStakePage, setEnableStakePage] = useState( + hasNamespaceReserved ? false : true, + ); const [communityStakeData, setCommunityStakeData] = useState({ - namespace: createdCommunityName || '', - symbol: (createdCommunityName || '').toUpperCase().slice(0, 4), + namespace: namespace || createdCommunityName || '', + symbol: symbol || (createdCommunityName || '').toUpperCase().slice(0, 4), }); const handleOptInEnablingStake = ({ namespace, symbol }) => { @@ -74,6 +81,7 @@ const CommunityStakeStep = ({ chainId={chainId} isTopicFlow={isTopicFlow} onlyNamespace={onlyNamespace} + hasNamespaceReserved={hasNamespaceReserved} /> )}
diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/SignStakeTransactions.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/SignStakeTransactions.tsx index 7245d1889f2..a604b2f914d 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/SignStakeTransactions.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/SignStakeTransactions.tsx @@ -24,6 +24,7 @@ const SignStakeTransactions = ({ onSuccess, onCancel, onlyNamespace, + hasNamespaceReserved, }: SignStakeTransactionsProps) => { const { handleReserveCommunityNamespace, reserveNamespaceData } = useReserveCommunityNamespace({ @@ -33,6 +34,7 @@ const SignStakeTransactions = ({ userAddress: selectedAddress.address, chainId, onSuccess: onlyNamespace ? onSuccess : undefined, + hasNamespaceReserved, }); const { handleLaunchCommunityStake, launchStakeData } = diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/useReserveCommunityNamespace.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/useReserveCommunityNamespace.tsx index 17318ce84c0..916b3dc8c15 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/useReserveCommunityNamespace.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/SignStakeTransactions/useReserveCommunityNamespace.tsx @@ -21,6 +21,7 @@ interface UseReserveCommunityNamespaceProps { userAddress: string; chainId: string; onSuccess?: () => void; + hasNamespaceReserved?: boolean; } const useReserveCommunityNamespace = ({ @@ -30,9 +31,13 @@ const useReserveCommunityNamespace = ({ userAddress, chainId, onSuccess, + hasNamespaceReserved, }: UseReserveCommunityNamespaceProps) => { - const [reserveNamespaceData, setReserveNamespaceData] = - useState(defaultActionState); + const [reserveNamespaceData, setReserveNamespaceData] = useState( + hasNamespaceReserved + ? { state: 'completed', errorText: '' } + : defaultActionState, + ); const { namespaceFactory } = useNamespaceFactory(parseInt(chainId)); const { mutateAsync: updateCommunity } = useUpdateCommunityMutation({ diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/types.ts b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/types.ts index 6ee10d0e1b2..b4697c12abe 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/types.ts +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/types.ts @@ -20,6 +20,7 @@ export interface SignStakeTransactionsProps { chainId: string; isTopicFlow?: boolean; onlyNamespace?: boolean; + hasNamespaceReserved?: boolean; } export interface EnableStakeProps { From 342bfe7e12a184b63ed6cf7eb8f8526fc24c22a8 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Tue, 15 Oct 2024 08:52:52 -0400 Subject: [PATCH 138/425] release api 1.0.0 --- libs/api-client/fern/openapi/openapi.yml | 18 +++++------------- libs/api-client/package.json | 2 +- .../commonwealth/server/api/external-router.ts | 2 +- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/libs/api-client/fern/openapi/openapi.yml b/libs/api-client/fern/openapi/openapi.yml index ff2dd35ef2e..b5dda03259b 100644 --- a/libs/api-client/fern/openapi/openapi.yml +++ b/libs/api-client/fern/openapi/openapi.yml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: title: Common API - version: 0.0.6 + version: 1.0.0 servers: - url: http://localhost:3000/api/v1 paths: @@ -49,13 +49,9 @@ paths: type: string nullable: true id: - type: integer - minimum: 0 - maximum: 2147483647 + type: number user_id: - type: integer - minimum: 0 - maximum: 2147483647 + type: number user_address: type: string profile_name: @@ -125,9 +121,7 @@ paths: type: object properties: id: - type: integer - minimum: 0 - maximum: 2147483647 + type: number name: type: string description: @@ -143,9 +137,7 @@ paths: type: object properties: id: - type: integer - minimum: 0 - maximum: 2147483647 + type: number address: type: string user_id: diff --git a/libs/api-client/package.json b/libs/api-client/package.json index f483823928f..1b217f57e1a 100644 --- a/libs/api-client/package.json +++ b/libs/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@commonxyz/api-client", - "version": "0.0.6", + "version": "1.0.0", "type": "module", "description": "Common Client Proxy", "repository": { diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 46bd31b9ac0..ab18b6a5bd4 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -99,7 +99,7 @@ const trpcRouter = trpc.router(api); trpc.useOAS(router, trpcRouter, { title: 'Common API', path: PATH, - version: '0.0.6', + version: '1.0.0', }); export { PATH, router }; From 12e59f4dc1d86a4dee646612bda8226b0deacd1e Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Tue, 15 Oct 2024 10:23:00 -0400 Subject: [PATCH 139/425] create global route and secure user activity route --- .../model/src/feed/GetGlobalActivity.query.ts | 13 +++++++ libs/model/src/feed/GetUserActivity.query.ts | 34 +++++-------------- libs/model/src/feed/index.ts | 1 + libs/schemas/src/queries/feed.schemas.ts | 1 - .../state/api/feeds/fetchUserActivity.ts | 4 +-- .../server/api/external-router.ts | 1 + packages/commonwealth/server/api/feed.ts | 1 + 7 files changed, 25 insertions(+), 30 deletions(-) create mode 100644 libs/model/src/feed/GetGlobalActivity.query.ts diff --git a/libs/model/src/feed/GetGlobalActivity.query.ts b/libs/model/src/feed/GetGlobalActivity.query.ts new file mode 100644 index 00000000000..f0f8deeec99 --- /dev/null +++ b/libs/model/src/feed/GetGlobalActivity.query.ts @@ -0,0 +1,13 @@ +import { Query } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { GlobalActivityCache } from '../globalActivityCache'; + +export function GetGlobalActivity(): Query { + return { + ...schemas.ActivityFeed, + auth: [], + secure: false, + body: async () => + await GlobalActivityCache.getInstance().getGlobalActivity(), + }; +} diff --git a/libs/model/src/feed/GetUserActivity.query.ts b/libs/model/src/feed/GetUserActivity.query.ts index 0845006900c..3cabbca27bb 100644 --- a/libs/model/src/feed/GetUserActivity.query.ts +++ b/libs/model/src/feed/GetUserActivity.query.ts @@ -1,35 +1,17 @@ import { Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { models } from '../database'; -import { - GlobalActivityCache, - getUserActivityFeed, -} from '../globalActivityCache'; +import { getUserActivityFeed } from '../globalActivityCache'; export function GetUserActivity(): Query { return { ...schemas.ActivityFeed, auth: [], - secure: false, - body: async ({ actor, payload }) => { - // ensure we have a user id when not global - const user_id = payload.is_global - ? 0 - : (actor.user?.id ?? - ( - await models.Address.findOne({ - where: { address: actor.address }, - attributes: ['user_id'], - }) - )?.user_id ?? - 0); - return payload.is_global - ? await GlobalActivityCache.getInstance().getGlobalActivity() - : await getUserActivityFeed({ - user_id, - thread_limit: Math.min(payload.thread_limit ?? 50, 50), - comment_limit: Math.min(payload.comment_limit ?? 3, 5), - }); - }, + secure: true, + body: async ({ actor, payload }) => + await getUserActivityFeed({ + user_id: actor.user.id, + thread_limit: Math.min(payload.thread_limit ?? 50, 50), + comment_limit: Math.min(payload.comment_limit ?? 3, 5), + }), }; } diff --git a/libs/model/src/feed/index.ts b/libs/model/src/feed/index.ts index 62adcdf9aab..609ae5a4e53 100644 --- a/libs/model/src/feed/index.ts +++ b/libs/model/src/feed/index.ts @@ -1 +1,2 @@ +export * from './GetGlobalActivity.query'; export * from './GetUserActivity.query'; diff --git a/libs/schemas/src/queries/feed.schemas.ts b/libs/schemas/src/queries/feed.schemas.ts index a76a6666f16..ce3daefbac9 100644 --- a/libs/schemas/src/queries/feed.schemas.ts +++ b/libs/schemas/src/queries/feed.schemas.ts @@ -47,7 +47,6 @@ export const ActivityThread = z.object({ export const ActivityFeed = { input: z.object({ - is_global: z.boolean().optional(), thread_limit: z.number().optional(), comment_limit: z.number().optional(), }), diff --git a/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts b/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts index 5e340b636fe..d1cfd6cf701 100644 --- a/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts +++ b/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts @@ -5,9 +5,8 @@ const USER_ACTIVITY_CACHE_TIME = 5 * 60 * 1_000; // 5 minutes const GLOBAL_ACTIVITY_STALE_TIME = 5 * 60 * 1_000; // 5 minutes (backend caches for 5 minutes as well) export const useFetchGlobalActivityQuery = () => { - return trpc.feed.getUserActivity.useQuery( + return trpc.feed.getGlobalActivity.useQuery( { - is_global: true, thread_limit: 50, comment_limit: 3, }, @@ -21,7 +20,6 @@ export const useFetchGlobalActivityQuery = () => { export const useFetchUserActivityQuery = () => { return trpc.feed.getUserActivity.useQuery( { - is_global: false, thread_limit: 50, comment_limit: 3, }, diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index ab18b6a5bd4..1a10e9033bf 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -36,6 +36,7 @@ const { createComment, updateComment, deleteComment, createCommentReaction } = const { getNewContent } = user.trpcRouter; const api = { + getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User, true), getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User, true), getNewContent, getCommunities: trpc.query( diff --git a/packages/commonwealth/server/api/feed.ts b/packages/commonwealth/server/api/feed.ts index a5d6f94d388..f97c222894e 100644 --- a/packages/commonwealth/server/api/feed.ts +++ b/packages/commonwealth/server/api/feed.ts @@ -2,5 +2,6 @@ import { trpc } from '@hicommonwealth/adapters'; import { Feed } from '@hicommonwealth/model'; export const trpcRouter = trpc.router({ + getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User), getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User), }); From 48f4a20a96e342bec5e7cc3b771aee67f09fcdbf Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Tue, 15 Oct 2024 10:45:42 -0400 Subject: [PATCH 140/425] fix test --- .../test/integration/api/userDashboard.spec.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/commonwealth/test/integration/api/userDashboard.spec.ts b/packages/commonwealth/test/integration/api/userDashboard.spec.ts index ab24733b216..e986358f1e7 100644 --- a/packages/commonwealth/test/integration/api/userDashboard.spec.ts +++ b/packages/commonwealth/test/integration/api/userDashboard.spec.ts @@ -162,10 +162,7 @@ describe('User Dashboard API', () => { }); describe('/GetUserActivity', () => { - const queryArgs = { is_global: false }; - const apiUrl = - '/api/internal/trpc/feed.getUserActivity?input=' + - encodeURIComponent(JSON.stringify(queryArgs)); + const apiUrl = '/api/v1/GetUserActivity'; test('should fail without JWT', async () => { const res = await chai.request @@ -185,12 +182,13 @@ describe('User Dashboard API', () => { .set('Accept', 'application/json') .set('address', userAddress) .send({ chain, jwt: userJWT }); + console.log(res); expect(res.status).to.be.equal(200); expect(res.text).to.not.be.null; const resBody = JSON.parse(res.text); - const threadIds = resBody.result.data.map((a) => a.id); + const threadIds = resBody.map((a) => a.id); const chains = await server.models.Thread.findAll({ attributes: attributesOf('community_id'), where: { @@ -224,7 +222,7 @@ describe('User Dashboard API', () => { expect(res.text).to.not.be.null; const resBody = JSON.parse(res.text); - const threadIds = resBody.result.data.map((a) => a.id); + const threadIds = resBody.map((a) => a.id); const chains = await server.models.Thread.findAll({ attributes: attributesOf('community_id'), where: { @@ -272,7 +270,7 @@ describe('User Dashboard API', () => { expect(res.text).to.not.be.null; const resBody = JSON.parse(res.text); - const threadIds = resBody.result.data.map((a) => a.id); + const threadIds = resBody.map((a) => a.id); const chains = ( await server.models.Thread.findAll({ attributes: attributesOf('community_id'), From 99ee3ebc8c56e45a78c1bee1598193fd19ab134e Mon Sep 17 00:00:00 2001 From: israellund Date: Tue, 15 Oct 2024 10:53:12 -0400 Subject: [PATCH 141/425] changed styling for overflow --- .../client/scripts/views/pages/Communities/Communities.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.scss b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.scss index faae21b4ad1..e2851e3c690 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.scss +++ b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.scss @@ -7,6 +7,7 @@ .CommunitiesPageLayout { padding-top: 0; height: 100%; + overflow-y: auto; .layout-container { height: 100%; From 86c501fed80026135632a8c214341bde2f9a34e2 Mon Sep 17 00:00:00 2001 From: israellund Date: Tue, 15 Oct 2024 11:10:53 -0400 Subject: [PATCH 142/425] implemented pluralize instead of ternary logic --- .../client/scripts/views/pages/Communities/helpers.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/helpers.ts b/packages/commonwealth/client/scripts/views/pages/Communities/helpers.ts index c3119117bef..9abef980828 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/helpers.ts +++ b/packages/commonwealth/client/scripts/views/pages/Communities/helpers.ts @@ -1,9 +1,10 @@ +import { pluralize } from 'helpers'; import numeral from 'numeral'; - export const getCommunityCountsString = (totalCommunities: number) => { - return `${ + const formattedCount = totalCommunities >= 1000 ? numeral(totalCommunities).format('0.0a') - : totalCommunities - } ${totalCommunities === 1 ? 'community' : 'communities'}`; + : totalCommunities; + + return pluralize(formattedCount, 'community'); }; From fe712b8351d8452130e9546120507d719d680c40 Mon Sep 17 00:00:00 2001 From: kassad Date: Tue, 15 Oct 2024 08:56:58 -0700 Subject: [PATCH 143/425] Added deafult for last_checked --- .../requirementsModule/refreshMembershipsForAddress.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/commonwealth/server/util/requirementsModule/refreshMembershipsForAddress.ts b/packages/commonwealth/server/util/requirementsModule/refreshMembershipsForAddress.ts index 7c2cb11087f..95b4e3c00cc 100644 --- a/packages/commonwealth/server/util/requirementsModule/refreshMembershipsForAddress.ts +++ b/packages/commonwealth/server/util/requirementsModule/refreshMembershipsForAddress.ts @@ -11,7 +11,7 @@ import { } from '@hicommonwealth/model'; import type { Requirement } from '@hicommonwealth/shared'; import moment from 'moment'; -import { FindOptions, Op, Sequelize } from 'sequelize'; +import { FindOptions, Op } from 'sequelize'; import { config } from '../../config'; /** @@ -58,8 +58,7 @@ export async function refreshMembershipsForAddress( membershipsToCreate.push({ group_id: group.id!, address_id: address.id!, - // @ts-expect-error StrictNullChecks - last_checked: null, + last_checked: new Date(), }); continue; } @@ -143,6 +142,6 @@ function computeMembership( group_id: group.id!, address_id: address.id!, reject_reason: isValid ? null : messages, - last_checked: Sequelize.literal('CURRENT_TIMESTAMP') as any, + last_checked: new Date(), }; } From 537af9c8070bd1b068b1d1b7232abaa66915ba3f Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Tue, 15 Oct 2024 12:08:56 -0700 Subject: [PATCH 144/425] upgrade knock client. --- libs/adapters/package.json | 2 +- package.json | 2 +- packages/commonwealth/package.json | 2 +- pnpm-lock.yaml | 18 +++++++++--------- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libs/adapters/package.json b/libs/adapters/package.json index c7194a8c883..e7cba2d3af3 100644 --- a/libs/adapters/package.json +++ b/libs/adapters/package.json @@ -27,7 +27,7 @@ "@aws-sdk/s3-request-presigner": "^3.577.0", "@hicommonwealth/core": "workspace:*", "@hicommonwealth/shared": "workspace:*", - "@knocklabs/node": "^0.6.10", + "@knocklabs/node": "^0.6.13", "@trpc/server": "^10.45.1", "amqplib": "^0.10.3", "async-rwlock": "^1.1.1", diff --git a/package.json b/package.json index 912e8c9270b..2187e4488d4 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@cosmjs/encoding": "0.32.3", "@hicommonwealth/eslint-plugin": "workspace:*", "@istanbuljs/nyc-config-typescript": "^0.1.3", - "@knocklabs/node": "^0.6.10", + "@knocklabs/node": "^0.6.13", "@openfeature/web-sdk": "^1.0.2", "@osmonauts/lcd": "^0.10.0", "@playwright/test": "^1.43.1", diff --git a/packages/commonwealth/package.json b/packages/commonwealth/package.json index d52237f654c..fc1aa9cceb5 100644 --- a/packages/commonwealth/package.json +++ b/packages/commonwealth/package.json @@ -115,7 +115,7 @@ "@ipld/dag-json": "^10.2.0", "@keplr-wallet/types": "^0.12.23", "@keplr-wallet/unit": "^0.12.23", - "@knocklabs/node": "^0.6.11", + "@knocklabs/node": "^0.6.13", "@knocklabs/react": "^0.2.15", "@knocklabs/react-notification-feed": "^0.8.15", "@lexical/rich-text": "^0.17.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79a7841919f..939120b7137 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,8 +31,8 @@ importers: specifier: ^0.1.3 version: 0.1.3(source-map-support@0.5.21)(ts-node@10.9.2(@swc/core@1.5.25(@swc/helpers@0.5.12))(@types/node@20.12.10)(typescript@5.4.5)) '@knocklabs/node': - specifier: ^0.6.10 - version: 0.6.11 + specifier: ^0.6.13 + version: 0.6.13 '@openfeature/web-sdk': specifier: ^1.0.2 version: 1.0.3(@openfeature/core@1.1.0) @@ -322,8 +322,8 @@ importers: specifier: workspace:* version: link:../shared '@knocklabs/node': - specifier: ^0.6.10 - version: 0.6.11 + specifier: ^0.6.13 + version: 0.6.13 '@trpc/server': specifier: ^10.45.1 version: 10.45.2 @@ -905,8 +905,8 @@ importers: specifier: ^0.12.23 version: 0.12.86 '@knocklabs/node': - specifier: ^0.6.11 - version: 0.6.11 + specifier: ^0.6.13 + version: 0.6.13 '@knocklabs/react': specifier: ^0.2.15 version: 0.2.17(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -3882,8 +3882,8 @@ packages: '@knocklabs/client@0.8.21': resolution: {integrity: sha512-uPaUAwbg9Bi0UIPIYOE4v4GiasKezZNQ/ge9KST2wlSHAfpKWrHf7s85H4mD7IGkVc0xkokF4RZ4lqr7cy48wg==} - '@knocklabs/node@0.6.11': - resolution: {integrity: sha512-eCln5vHE/QTonDAK13ci5RCJ9el5snq/NQeAAmbVyZI7CsrHPUGW2sEOH6D9z/HyEKYki2sUHbTC0xG383EMhg==} + '@knocklabs/node@0.6.13': + resolution: {integrity: sha512-XA6HWxIvLiCpRt5GisTFYDZuTuyrRR34XnFwPFPXPNTO1cKQOHLkQvyy7FzAOTD6/PVj1DM2Ge9HHij+Z64Rtg==} engines: {node: '>=17.5.0'} '@knocklabs/react-core@0.2.15': @@ -20044,7 +20044,7 @@ snapshots: - debug - react - '@knocklabs/node@0.6.11': + '@knocklabs/node@0.6.13': dependencies: jose: 5.3.0 From ec890b0ac20ea85ecadd9c278f40840d74556ac5 Mon Sep 17 00:00:00 2001 From: ianrowan Date: Tue, 15 Oct 2024 14:10:13 -0500 Subject: [PATCH 145/425] create universal contest balance getter --- .../services/commonProtocol/contestHelper.ts | 58 ++----- .../commonProtocol/contractHelpers/Contest.ts | 60 +++++++ libs/shared/src/commonProtocol/index.ts | 1 + .../helpers/ContractHelpers/Abi/ContestAbi.ts | 158 ++++++++++++++++++ .../ContractHelpers/Abi/feeManagerAbi.ts | 26 +++ .../helpers/ContractHelpers/Contest.ts | 29 ++-- 6 files changed, 267 insertions(+), 65 deletions(-) create mode 100644 libs/shared/src/commonProtocol/contractHelpers/Contest.ts create mode 100644 packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/feeManagerAbi.ts diff --git a/libs/model/src/services/commonProtocol/contestHelper.ts b/libs/model/src/services/commonProtocol/contestHelper.ts index eca913a442d..1013bc98b24 100644 --- a/libs/model/src/services/commonProtocol/contestHelper.ts +++ b/libs/model/src/services/commonProtocol/contestHelper.ts @@ -1,6 +1,6 @@ import { AppError } from '@hicommonwealth/core'; -import { ZERO_ADDRESS } from '@hicommonwealth/shared'; import { Mutex } from 'async-mutex'; +import { getTotalContestBalance } from 'shared/src/commonProtocol'; import Web3, { PayableCallOptions } from 'web3'; import { AbiItem } from 'web3-utils'; import { config } from '../../config'; @@ -259,59 +259,21 @@ export const getContestBalance = async ( oneOff?: boolean, ): Promise => { const web3 = new Web3(rpcNodeUrl); + const contestInstance = new web3.eth.Contract( contestABI as AbiItem[], contest, ); - const promises = [contestInstance.methods.contestToken().call()]; - - if (!oneOff) { - promises.push(contestInstance.methods.FeeMangerAddress().call()); - } - - const results = await Promise.all(promises); - - const balancePromises: Promise[] = []; - - if (!oneOff) { - const feeManager = new web3.eth.Contract( - feeManagerABI as AbiItem[], - String(results[1]), - ); - balancePromises.push( - feeManager.methods.getBeneficiaryBalance(contest, results[0]).call(), - ); - } - if (String(results[0]) === ZERO_ADDRESS) { - balancePromises.push( - web3.eth.getBalance(contest).then((v) => { - return Number(v); - }), - ); - } else { - const calldata = - '0x70a08231' + - web3.eth.abi.encodeParameters(['address'], [contest]).substring(2); - balancePromises.push( - web3.eth - .call({ - to: String(results[0]), - data: calldata, - }) - .then((v) => { - return Number(web3.eth.abi.decodeParameter('uint256', v)); - }), - ); - } - - const balanceResults = await Promise.all(balancePromises); - - return Number( - balanceResults.length === 2 - ? BigInt(balanceResults[0]) + BigInt(balanceResults[1]) - : BigInt(balanceResults[0]), + const balance = await getTotalContestBalance( + contestInstance, + contest, + web3, + feeManagerABI, + oneOff, ); + + return balance; }; export const addContentBatch = async ( diff --git a/libs/shared/src/commonProtocol/contractHelpers/Contest.ts b/libs/shared/src/commonProtocol/contractHelpers/Contest.ts new file mode 100644 index 00000000000..5e19b1d4a3e --- /dev/null +++ b/libs/shared/src/commonProtocol/contractHelpers/Contest.ts @@ -0,0 +1,60 @@ +import { ZERO_ADDRESS } from '@hicommonwealth/shared'; +import { AbiItem } from 'web3-utils'; + +export const getTotalContestBalance = async ( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + contestContract: any, + contestAddress: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + web3: any, + feeManagerAbi: AbiItem[], + oneOff?: boolean, +): Promise => { + const promises = [contestContract.methods.contestToken().call()]; + + if (!oneOff) { + promises.push(contestContract.methods.FeeMangerAddress().call()); + } + + const results = await Promise.all(promises); + + const balancePromises: Promise[] = []; + + if (!oneOff) { + const feeManager = new web3.eth.Contract(feeManagerAbi, String(results[1])); + balancePromises.push( + feeManager.methods + .getBeneficiaryBalance(contestAddress, results[0]) + .call(), + ); + } + if (String(results[0]) === ZERO_ADDRESS) { + balancePromises.push( + web3.eth.getBalance(contestAddress).then((v: bigint) => { + return Number(v); + }), + ); + } else { + const calldata = + '0x70a08231' + + web3.eth.abi.encodeParameters(['address'], [contestAddress]).substring(2); + balancePromises.push( + web3.eth + .call({ + to: String(results[0]), + data: calldata, + }) + .then((v: bigint) => { + return Number(web3.eth.abi.decodeParameter('uint256', v)); + }), + ); + } + + const balanceResults = await Promise.all(balancePromises); + + return Number( + balanceResults.length === 2 + ? BigInt(balanceResults[0]) + BigInt(balanceResults[1]) + : BigInt(balanceResults[0]), + ); +}; diff --git a/libs/shared/src/commonProtocol/index.ts b/libs/shared/src/commonProtocol/index.ts index 0a862b4de98..9b276a5a8cf 100644 --- a/libs/shared/src/commonProtocol/index.ts +++ b/libs/shared/src/commonProtocol/index.ts @@ -1,3 +1,4 @@ export * from './chainConfig'; +export * from './contractHelpers/Contest'; export * from './contractHelpers/Launchpad'; export * from './utils'; diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/ContestAbi.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/ContestAbi.ts index 445b407b038..483d49b4689 100644 --- a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/ContestAbi.ts +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/ContestAbi.ts @@ -93,4 +93,162 @@ export const ContestAbi = [ stateMutability: 'nonpayable', type: 'function', }, + { + inputs: [], + stateMutability: 'view', + type: 'function', + name: 'endTime', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + }, + { + inputs: [], + stateMutability: 'view', + type: 'function', + name: 'startTime', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + }, + { + inputs: [], + name: 'contestInterval', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'currentContentId', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'getWinnerIds', + outputs: [ + { + internalType: 'uint256[]', + name: '', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: 'contestId', + type: 'uint256', + }, + ], + name: 'getPastWinners', + outputs: [ + { + internalType: 'uint256[]', + name: '', + type: 'uint256[]', + }, + ], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + name: 'content', + outputs: [ + { + internalType: 'string', + name: 'url', + type: 'string', + }, + { + internalType: 'uint256', + name: 'cumulativeVotes', + type: 'uint256', + }, + { + internalType: 'address', + name: 'creator', + type: 'address', + }, + { + internalType: 'bool', + name: 'completed', + type: 'bool', + }, + ], + }, + { + inputs: [], + name: 'FeeMangerAddress', + outputs: [ + { + internalType: 'address', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'contestLength', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'newContest', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'endContest', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, ]; diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/feeManagerAbi.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/feeManagerAbi.ts new file mode 100644 index 00000000000..a1af64f4654 --- /dev/null +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/feeManagerAbi.ts @@ -0,0 +1,26 @@ +export const feeManagerABI = [ + { + inputs: [ + { + internalType: 'address', + name: 'beneficiary', + type: 'address', + }, + { + internalType: 'address', + name: 'token', + type: 'address', + }, + ], + name: 'getBeneficiaryBalance', + outputs: [ + { + internalType: 'uint256', + name: '', + type: 'uint256', + }, + ], + stateMutability: 'view', + type: 'function', + }, +]; diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts index b147405b80e..7ac7ae875c7 100644 --- a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts @@ -1,7 +1,9 @@ import { ZERO_ADDRESS } from '@hicommonwealth/shared'; +import { getTotalContestBalance } from 'node_modules/@hicommonwealth/shared/src/commonProtocol'; import { AbiItem, TransactionReceipt } from 'web3'; import { ContestAbi } from './Abi/ContestAbi'; import { Erc20Abi } from './Abi/ERC20Abi'; +import { feeManagerABI } from './Abi/feeManagerAbi'; import ContractBase from './ContractBase'; import NamespaceFactory from './NamespaceFactory'; @@ -230,27 +232,20 @@ class Contest extends ContractBase { } } - async getContestBalance(): Promise { + //Indicate if contest is not recurring + async getContestBalance(oneOff: boolean): Promise { if (!this.initialized || !this.walletEnabled) { await this.initialize(false); } this.reInitContract(); - const tokenAddress = await this.contract.methods.contestToken().call(); - if (tokenAddress === ZERO_ADDRESS) { - const balance = await this.web3.eth.getBalance(this.contractAddress); - return parseFloat(this.web3.utils.fromWei(balance, 'ether')); - } else { - const calldata = - '0x70a08231' + - this.web3.eth.abi - .encodeParameters(['address'], [this.contractAddress]) - .substring(2); - const returnData = await this.web3.eth.call({ - to: tokenAddress, - data: calldata, - }); - return Number(this.web3.eth.abi.decodeParameter('uint256', returnData)); - } + const contestBalance = await getTotalContestBalance( + this.contract, + this.contractAddress, + this.web3, + feeManagerABI, + oneOff, + ); + return contestBalance; } } From 04951e02f035f665b46ec991e8c6d00343c53f37 Mon Sep 17 00:00:00 2001 From: ianrowan Date: Tue, 15 Oct 2024 14:11:12 -0500 Subject: [PATCH 146/425] type fix --- libs/shared/src/commonProtocol/contractHelpers/Contest.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/shared/src/commonProtocol/contractHelpers/Contest.ts b/libs/shared/src/commonProtocol/contractHelpers/Contest.ts index 5e19b1d4a3e..cb8fc27d25a 100644 --- a/libs/shared/src/commonProtocol/contractHelpers/Contest.ts +++ b/libs/shared/src/commonProtocol/contractHelpers/Contest.ts @@ -44,7 +44,7 @@ export const getTotalContestBalance = async ( to: String(results[0]), data: calldata, }) - .then((v: bigint) => { + .then((v: string) => { return Number(web3.eth.abi.decodeParameter('uint256', v)); }), ); From dc05c51cd5ea237294d4c39b7601768f057273e5 Mon Sep 17 00:00:00 2001 From: ianrowan Date: Tue, 15 Oct 2024 14:17:18 -0500 Subject: [PATCH 147/425] fix cross project typing --- libs/shared/src/commonProtocol/contractHelpers/Contest.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/shared/src/commonProtocol/contractHelpers/Contest.ts b/libs/shared/src/commonProtocol/contractHelpers/Contest.ts index cb8fc27d25a..c5ccfd28f75 100644 --- a/libs/shared/src/commonProtocol/contractHelpers/Contest.ts +++ b/libs/shared/src/commonProtocol/contractHelpers/Contest.ts @@ -1,5 +1,4 @@ import { ZERO_ADDRESS } from '@hicommonwealth/shared'; -import { AbiItem } from 'web3-utils'; export const getTotalContestBalance = async ( // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -7,7 +6,8 @@ export const getTotalContestBalance = async ( contestAddress: string, // eslint-disable-next-line @typescript-eslint/no-explicit-any web3: any, - feeManagerAbi: AbiItem[], + // eslint-disable-next-line @typescript-eslint/no-explicit-any + feeManagerAbi: any[], oneOff?: boolean, ): Promise => { const promises = [contestContract.methods.contestToken().call()]; From d230070ad315f71445dc4b8133ffdf12f808cee0 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 00:24:50 +0500 Subject: [PATCH 148/425] Unified `GroupTopicPermissions` model into `GroupPermissions` --- .../src/comment/CreateComment.command.ts | 1 - .../comment/CreateCommentReaction.command.ts | 1 - .../src/community/CreateGroup.command.ts | 4 +- .../src/community/UpdateGroup.command.ts | 4 +- libs/model/src/middleware/authorization.ts | 33 +++------ libs/model/src/models/associations.ts | 4 +- libs/model/src/models/factories.ts | 2 - libs/model/src/models/groupPermission.ts | 7 ++ libs/model/src/models/groupTopicPermission.ts | 46 ------------- libs/model/src/models/index.ts | 1 - libs/model/src/thread/CreateThread.command.ts | 4 +- .../thread/CreateThreadReaction.command.ts | 1 - .../schemas/src/commands/community.schemas.ts | 6 +- .../src/entities/group-permission.schemas.ts | 4 +- .../entities/groupTopicPermission.schemas.ts | 18 ----- libs/schemas/src/entities/index.ts | 1 - libs/schemas/src/index.ts | 1 - .../client/scripts/helpers/threads.ts | 15 ++-- .../client/scripts/hooks/useTopicGating.ts | 8 ++- .../state/api/groups/refreshMembership.ts | 4 +- .../NewThreadFormLegacy/NewThreadForm.tsx | 18 ++--- .../NewThreadFormModern/NewThreadForm.tsx | 18 ++--- .../CWContentPage/CWContentPage.tsx | 21 +++--- .../CWGatedTopicPermissionLevelBanner.tsx | 11 +-- .../client/scripts/views/components/feed.tsx | 22 ++++-- .../Update/UpdateCommunityGroupPage.tsx | 5 +- .../Groups/common/GroupForm/GroupForm.tsx | 7 +- .../Groups/common/GroupForm/constants.ts | 5 +- .../Groups/common/GroupForm/helpers.ts | 59 ++++++++++++++++ .../Groups/common/GroupForm/index.types.ts | 12 +++- .../GroupsSection/GroupCard/GroupCard.tsx | 6 +- .../Members/GroupsSection/GroupCard/types.ts | 4 +- .../Members/GroupsSection/GroupsSection.tsx | 2 +- .../discussions/CommentTree/CommentTree.tsx | 5 ++ .../pages/discussions/DiscussionsPage.tsx | 29 +++----- .../views/pages/overview/TopicSummaryRow.tsx | 10 +-- .../pages/view_thread/ViewThreadPage.tsx | 10 +-- .../server_groups_methods/get_groups.ts | 17 +++-- .../refresh_membership.ts | 10 +-- ...02720-add-group-topic-permissions-table.js | 42 ----------- ...igrate-existing-group-topic-permissions.js | 30 -------- ...d-for-each-group_id-in-GroupPermissions.js | 69 +++++++++++++++++++ ...igrate-existing-group-topic-permissions.js | 53 ++++++++++++++ 43 files changed, 344 insertions(+), 286 deletions(-) delete mode 100644 libs/model/src/models/groupTopicPermission.ts delete mode 100644 libs/schemas/src/entities/groupTopicPermission.schemas.ts create mode 100644 packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/helpers.ts delete mode 100644 packages/commonwealth/server/migrations/20241010102720-add-group-topic-permissions-table.js delete mode 100644 packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js create mode 100644 packages/commonwealth/server/migrations/20241015145424-add-topic_id-for-each-group_id-in-GroupPermissions.js create mode 100644 packages/commonwealth/server/migrations/20241015181202-migrate-existing-group-topic-permissions.js diff --git a/libs/model/src/comment/CreateComment.command.ts b/libs/model/src/comment/CreateComment.command.ts index 8b90598213a..61baa501415 100644 --- a/libs/model/src/comment/CreateComment.command.ts +++ b/libs/model/src/comment/CreateComment.command.ts @@ -34,7 +34,6 @@ export function CreateComment(): Command< auth: [ isAuthorized({ action: schemas.PermissionEnum.CREATE_COMMENT, - topicPermission: schemas.GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, }), verifyCommentSignature, ], diff --git a/libs/model/src/comment/CreateCommentReaction.command.ts b/libs/model/src/comment/CreateCommentReaction.command.ts index a23a1dedaad..89af9a81ab4 100644 --- a/libs/model/src/comment/CreateCommentReaction.command.ts +++ b/libs/model/src/comment/CreateCommentReaction.command.ts @@ -15,7 +15,6 @@ export function CreateCommentReaction(): Command< auth: [ isAuthorized({ action: schemas.PermissionEnum.CREATE_COMMENT_REACTION, - topicPermission: schemas.GroupTopicPermissionEnum.UPVOTE, }), verifyReactionSignature, ], diff --git a/libs/model/src/community/CreateGroup.command.ts b/libs/model/src/community/CreateGroup.command.ts index 810003bc022..514265c9bf4 100644 --- a/libs/model/src/community/CreateGroup.command.ts +++ b/libs/model/src/community/CreateGroup.command.ts @@ -75,11 +75,11 @@ export function CreateGroup(): Command< await Promise.all( (payload.topics || [])?.map(async (t) => { if (group.id) { - await models.GroupTopicPermission.create( + await models.GroupPermission.create( { group_id: group.id, topic_id: t.id, - allowed_actions: t.permission, + allowed_actions: t.permissions, }, { transaction }, ); diff --git a/libs/model/src/community/UpdateGroup.command.ts b/libs/model/src/community/UpdateGroup.command.ts index ffe06a9623f..3af2203dcae 100644 --- a/libs/model/src/community/UpdateGroup.command.ts +++ b/libs/model/src/community/UpdateGroup.command.ts @@ -95,9 +95,9 @@ export function UpdateGroup(): Command< await Promise.all( (payload.topics || [])?.map(async (t) => { if (group.id) { - await models.GroupTopicPermission.update( + await models.GroupPermission.update( { - allowed_actions: t.permission, + allowed_actions: t.permissions, }, { where: { diff --git a/libs/model/src/middleware/authorization.ts b/libs/model/src/middleware/authorization.ts index 53991a1b097..2045377a3eb 100644 --- a/libs/model/src/middleware/authorization.ts +++ b/libs/model/src/middleware/authorization.ts @@ -9,7 +9,6 @@ import { import { Group, GroupPermissionAction, - GroupTopicPermissionEnum, } from '@hicommonwealth/schemas'; import { Role } from '@hicommonwealth/shared'; import { Op, QueryTypes } from 'sequelize'; @@ -53,7 +52,7 @@ export class NonMember extends InvalidActor { constructor( public actor: Actor, public topic: string, - public action: GroupPermissionAction | GroupTopicPermissionEnum, + public action: GroupPermissionAction, ) { super( actor, @@ -190,7 +189,6 @@ async function hasTopicInteractionPermissions( actor: Actor, auth: AuthContext, action: GroupPermissionAction, - topicPermission: GroupTopicPermissionEnum, ): Promise { if (!auth.topic_id) throw new InvalidInput('Must provide a topic id'); @@ -199,28 +197,27 @@ async function hasTopicInteractionPermissions( if (auth.topic.group_ids?.length === 0) return; + // check if user has permission to perform "action" in 'topic_id' + // the 'topic_id' can belong to any group where user has membership + // the group with 'topic_id' having higher permissions will take precedence const groups = await models.sequelize.query< z.infer & { - group_allowed_actions?: GroupPermissionAction[]; - topic_allowed_actions?: GroupTopicPermissionEnum; + allowed_actions?: GroupPermissionAction[]; } >( ` SELECT g.*, - gp.allowed_actions as group_allowed_actions, - gtp.allowed_actions as topic_allowed_actions + gp.allowed_actions as allowed_actions FROM "Groups" as g - LEFT JOIN "GroupPermissions" gp ON g.id = gp.group_id - LEFT JOIN "GroupTopicPermissions" gtp ON g.id = gtp.group_id AND gtp.topic_id = :topic_id - WHERE g.community_id = :community_id AND g.id IN (:group_ids); + LEFT JOIN "GroupPermissions" gp ON g.id = gp.group_id AND gp.topic_id = :topic_id + WHERE g.community_id = :community_id `, { type: QueryTypes.SELECT, raw: true, replacements: { community_id: auth.topic.community_id, - group_ids: auth.topic.group_ids, topic_id: auth.topic.id, }, }, @@ -230,18 +227,11 @@ async function hasTopicInteractionPermissions( // any group_allowed_actions, or we have the new fine-grained permission system where the action must be in // the group_allowed_actions list. const allowedGroupActions = groups.filter( - (g) => !g.group_allowed_actions || g.group_allowed_actions.includes(action), + (g) => !g.allowed_actions || g.allowed_actions.includes(action), ); if (!allowedGroupActions.length!) throw new NonMember(actor, auth.topic.name, action); - // The user must have `topicPermission` matching `topic_allowed_actions` for this topic - const allowedTopicActions = groups.filter((g) => - g.topic_allowed_actions?.includes(topicPermission), - ); - if (!allowedTopicActions.length!) - throw new NonMember(actor, auth.topic.name, topicPermission); - // check membership for all groups of topic const memberships = await models.Membership.findAll({ where: { @@ -291,13 +281,11 @@ export const isSuperAdmin: AuthHandler = async (ctx) => { export function isAuthorized({ roles = ['admin', 'moderator', 'member'], action, - topicPermission, author = false, collaborators = false, }: { roles?: Role[]; action?: GroupPermissionAction; - topicPermission?: GroupTopicPermissionEnum; author?: boolean; collaborators?: boolean; }): AuthHandler { @@ -314,13 +302,12 @@ export function isAuthorized({ if (auth.address!.is_banned) throw new BannedActor(ctx.actor); - if (action && topicPermission) { + if (action) { // waterfall stops here after validating the action await hasTopicInteractionPermissions( ctx.actor, auth, action, - topicPermission, ); return; } diff --git a/libs/model/src/models/associations.ts b/libs/model/src/models/associations.ts index 88bfb03d332..7f3ec6b1038 100644 --- a/libs/model/src/models/associations.ts +++ b/libs/model/src/models/associations.ts @@ -95,7 +95,7 @@ export const buildAssociations = (db: DB) => { onDelete: 'SET NULL', }) .withMany(db.ContestTopic, { asMany: 'contest_topics' }) - .withMany(db.GroupTopicPermission, { + .withMany(db.GroupPermission, { foreignKey: 'topic_id', onUpdate: 'CASCADE', onDelete: 'CASCADE', @@ -140,7 +140,7 @@ export const buildAssociations = (db: DB) => { onDelete: 'CASCADE', }); - db.Group.withMany(db.GroupPermission).withMany(db.GroupTopicPermission, { + db.Group.withMany(db.GroupPermission, { foreignKey: 'group_id', onUpdate: 'CASCADE', onDelete: 'CASCADE', diff --git a/libs/model/src/models/factories.ts b/libs/model/src/models/factories.ts index 0e093b0e402..b9148131185 100644 --- a/libs/model/src/models/factories.ts +++ b/libs/model/src/models/factories.ts @@ -24,7 +24,6 @@ import EmailUpdateToken from './email_update_token'; import EvmEventSource from './evmEventSource'; import Group from './group'; import GroupPermission from './groupPermission'; -import GroupTopicPermission from './groupTopicPermission'; import LastProcessedEvmBlock from './lastProcessedEvmBlock'; import Membership from './membership'; import Outbox from './outbox'; @@ -92,7 +91,6 @@ export const Factories = { Wallets, Token, XpLog, - GroupTopicPermission, }; export type DB = { diff --git a/libs/model/src/models/groupPermission.ts b/libs/model/src/models/groupPermission.ts index d75f23d68d8..932e89313a2 100644 --- a/libs/model/src/models/groupPermission.ts +++ b/libs/model/src/models/groupPermission.ts @@ -2,11 +2,13 @@ import { GroupPermission } from '@hicommonwealth/schemas'; import Sequelize from 'sequelize'; // must use "* as" to avoid scope errors import { z } from 'zod'; import { GroupAttributes } from './group'; +import { TopicAttributes } from './topic'; import type { ModelInstance } from './types'; export type GroupPermissionAttributes = z.infer & { // associations Group?: GroupAttributes; + Topic?: TopicAttributes; }; export type GroupPermissionInstance = ModelInstance; @@ -22,6 +24,11 @@ export default ( allowNull: false, primaryKey: true, }, + topic_id: { + type: Sequelize.INTEGER, + allowNull: false, + primaryKey: true, + }, allowed_actions: { // This needs to be a string[] because enum[] will break sequelize.sync and fail tests type: Sequelize.ARRAY(Sequelize.STRING), diff --git a/libs/model/src/models/groupTopicPermission.ts b/libs/model/src/models/groupTopicPermission.ts deleted file mode 100644 index 0d8454fb838..00000000000 --- a/libs/model/src/models/groupTopicPermission.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { GroupTopicPermission } from '@hicommonwealth/schemas'; -import Sequelize from 'sequelize'; -import { z } from 'zod'; -import { GroupAttributes } from './group'; -import { TopicAttributes } from './topic'; -import type { ModelInstance } from './types'; - -export type GroupTopicPermissionAttributes = z.infer< - typeof GroupTopicPermission -> & { - // associations - Group?: GroupAttributes; - Topic?: TopicAttributes; -}; - -export type GroupTopicPermissionInstance = - ModelInstance; - -export default ( - sequelize: Sequelize.Sequelize, -): Sequelize.ModelStatic => - sequelize.define( - 'GroupTopicPermission', - { - group_id: { - type: Sequelize.INTEGER, - allowNull: false, - primaryKey: true, - }, - topic_id: { - type: Sequelize.INTEGER, - allowNull: false, - primaryKey: true, - }, - allowed_actions: { - type: Sequelize.STRING, - allowNull: false, - }, - }, - { - tableName: 'GroupTopicPermissions', - timestamps: true, - createdAt: 'created_at', - updatedAt: 'updated_at', - }, - ); diff --git a/libs/model/src/models/index.ts b/libs/model/src/models/index.ts index bf06e279662..99c49cf8464 100644 --- a/libs/model/src/models/index.ts +++ b/libs/model/src/models/index.ts @@ -61,7 +61,6 @@ export * from './discord_bot_config'; export * from './email_update_token'; export * from './evmEventSource'; export * from './group'; -export * from './groupTopicPermission'; export * from './lastProcessedEvmBlock'; export * from './membership'; export * from './outbox'; diff --git a/libs/model/src/thread/CreateThread.command.ts b/libs/model/src/thread/CreateThread.command.ts index ac65619450f..e7faf3af990 100644 --- a/libs/model/src/thread/CreateThread.command.ts +++ b/libs/model/src/thread/CreateThread.command.ts @@ -89,9 +89,7 @@ export function CreateThread(): Command< ...schemas.CreateThread, auth: [ isAuthorized({ - action: schemas.PermissionEnum.CREATE_THREAD, - topicPermission: - schemas.GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + action: schemas.PermissionEnum.CREATE_THREAD }), verifyThreadSignature, ], diff --git a/libs/model/src/thread/CreateThreadReaction.command.ts b/libs/model/src/thread/CreateThreadReaction.command.ts index 8dc4e33d5e5..935360ce7ae 100644 --- a/libs/model/src/thread/CreateThreadReaction.command.ts +++ b/libs/model/src/thread/CreateThreadReaction.command.ts @@ -19,7 +19,6 @@ export function CreateThreadReaction(): Command< auth: [ isAuthorized({ action: schemas.PermissionEnum.CREATE_THREAD_REACTION, - topicPermission: schemas.GroupTopicPermissionEnum.UPVOTE, }), verifyReactionSignature, ], diff --git a/libs/schemas/src/commands/community.schemas.ts b/libs/schemas/src/commands/community.schemas.ts index 44e3a7f7969..22d9a5df459 100644 --- a/libs/schemas/src/commands/community.schemas.ts +++ b/libs/schemas/src/commands/community.schemas.ts @@ -12,7 +12,7 @@ import { z } from 'zod'; import { Community, Group, - GroupTopicPermissionEnum, + PermissionEnum, Requirement, StakeTransaction, Topic, @@ -233,7 +233,7 @@ export const CreateGroup = { .array( z.object({ id: PG_INT, - permission: z.nativeEnum(GroupTopicPermissionEnum), + permissions: z.array(z.nativeEnum(PermissionEnum)), }), ) .optional(), @@ -251,7 +251,7 @@ export const UpdateGroup = { .array( z.object({ id: PG_INT, - permission: z.nativeEnum(GroupTopicPermissionEnum), + permissions: z.array(z.nativeEnum(PermissionEnum)), }), ) .optional(), diff --git a/libs/schemas/src/entities/group-permission.schemas.ts b/libs/schemas/src/entities/group-permission.schemas.ts index b003e01cc65..c4d0c365ddc 100644 --- a/libs/schemas/src/entities/group-permission.schemas.ts +++ b/libs/schemas/src/entities/group-permission.schemas.ts @@ -12,9 +12,9 @@ export enum PermissionEnum { export type GroupPermissionAction = keyof typeof PermissionEnum; export const GroupPermission = z.object({ - group_id: PG_INT.optional(), + group_id: PG_INT, + topic_id: PG_INT, allowed_actions: z.array(z.nativeEnum(PermissionEnum)), - created_at: z.coerce.date().optional(), updated_at: z.coerce.date().optional(), }); diff --git a/libs/schemas/src/entities/groupTopicPermission.schemas.ts b/libs/schemas/src/entities/groupTopicPermission.schemas.ts deleted file mode 100644 index cd32e7db027..00000000000 --- a/libs/schemas/src/entities/groupTopicPermission.schemas.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { z } from 'zod'; -import { PG_INT } from '../utils'; - -export enum GroupTopicPermissionEnum { - UPVOTE = 'UPVOTE', - UPVOTE_AND_COMMENT = 'UPVOTE_AND_COMMENT', - UPVOTE_AND_COMMENT_AND_POST = 'UPVOTE_AND_COMMENT_AND_POST', -} - -export type GroupTopicPermissionAction = keyof typeof GroupTopicPermissionEnum; - -export const GroupTopicPermission = z.object({ - group_id: PG_INT, - topic_id: PG_INT, - allowed_actions: z.nativeEnum(GroupTopicPermissionEnum), - created_at: z.coerce.date().optional(), - updated_at: z.coerce.date().optional(), -}); diff --git a/libs/schemas/src/entities/index.ts b/libs/schemas/src/entities/index.ts index 074be762579..c69b2707b89 100644 --- a/libs/schemas/src/entities/index.ts +++ b/libs/schemas/src/entities/index.ts @@ -5,7 +5,6 @@ export * from './contract.schemas'; export * from './discordBotConfig.schemas'; export * from './group-permission.schemas'; export * from './group.schemas'; -export * from './groupTopicPermission.schemas'; export * from './notification.schemas'; export * from './reaction.schemas'; export * from './snapshot.schemas'; diff --git a/libs/schemas/src/index.ts b/libs/schemas/src/index.ts index fbdfcd5d0d9..d5c6785c811 100644 --- a/libs/schemas/src/index.ts +++ b/libs/schemas/src/index.ts @@ -24,7 +24,6 @@ export type Aggregates = Extract< | 'GroupPermission' | 'Tags' | 'CommunityTags' - | 'GroupTopicPermission' >; export * from './commands'; diff --git a/packages/commonwealth/client/scripts/helpers/threads.ts b/packages/commonwealth/client/scripts/helpers/threads.ts index 374c245b5ad..3a6bf52c48b 100644 --- a/packages/commonwealth/client/scripts/helpers/threads.ts +++ b/packages/commonwealth/client/scripts/helpers/threads.ts @@ -1,7 +1,8 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { re_weburl } from 'lib/url-validation'; import { Link, LinkSource } from 'models/Thread'; -import { TOPIC_PERMISSIONS } from '../views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants'; +// eslint-disable-next-line max-len +import { convertGranularPermissionsToAccumulatedPermissions } from '../views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/helpers'; export function detectURL(str: string) { if (str.slice(0, 4) !== 'http') str = `http://${str}`; // no https required because this is only used for regex match @@ -57,13 +58,13 @@ export const getThreadActionTooltipText = ({ isThreadArchived = false, isThreadLocked = false, isThreadTopicGated = false, - threadTopicInteractionRestriction, + threadTopicInteractionRestrictions, }: { isCommunityMember?: boolean; isThreadArchived?: boolean; isThreadLocked?: boolean; isThreadTopicGated?: boolean; - threadTopicInteractionRestriction?: GroupTopicPermissionEnum; + threadTopicInteractionRestrictions?: PermissionEnum[]; }): GetThreadActionTooltipTextResponse => { if (!isCommunityMember) { return getActionTooltipForNonCommunityMember; @@ -71,8 +72,10 @@ export const getThreadActionTooltipText = ({ if (isThreadArchived) return 'Thread is archived'; if (isThreadLocked) return 'Thread is locked'; if (isThreadTopicGated) return 'Topic is gated'; - if (threadTopicInteractionRestriction) { - return `Topic members are only allowed to ${TOPIC_PERMISSIONS[threadTopicInteractionRestriction]}`; + if (threadTopicInteractionRestrictions) { + return `Topic members are only allowed to ${convertGranularPermissionsToAccumulatedPermissions( + threadTopicInteractionRestrictions, + )}`; } return ''; }; diff --git a/packages/commonwealth/client/scripts/hooks/useTopicGating.ts b/packages/commonwealth/client/scripts/hooks/useTopicGating.ts index 1875fd3a00a..5eb80c682c1 100644 --- a/packages/commonwealth/client/scripts/hooks/useTopicGating.ts +++ b/packages/commonwealth/client/scripts/hooks/useTopicGating.ts @@ -1,8 +1,8 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { useRefreshMembershipQuery } from 'state/api/groups'; import Permissions from '../utils/Permissions'; -type TopicPermission = { id: number; permission: GroupTopicPermissionEnum }; +type TopicPermission = { id: number; permissions: PermissionEnum[] }; type UseTopicGatingProps = { communityId: string; @@ -31,7 +31,9 @@ const useTopicGating = ({ const existing = acc.find((item) => item.id === current.id); if (!existing) { acc.push(current); - } else if (current.permission.length > existing.permission.length) { + // IMP: this logic can break if `PermissionEnum` or the `GroupPermissions` + // schema is changed substantially and might not give off a ts issue. + } else if (current.permissions.length > existing.permissions.length) { // Replace with the current item if it has a longer permission string const index = acc.indexOf(existing); acc[index] = current; diff --git a/packages/commonwealth/client/scripts/state/api/groups/refreshMembership.ts b/packages/commonwealth/client/scripts/state/api/groups/refreshMembership.ts index 2f38f036e3b..f7dc9de1498 100644 --- a/packages/commonwealth/client/scripts/state/api/groups/refreshMembership.ts +++ b/packages/commonwealth/client/scripts/state/api/groups/refreshMembership.ts @@ -1,4 +1,4 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; import { ApiEndpoints, SERVER_URL } from 'state/api/config'; @@ -15,7 +15,7 @@ interface RefreshMembershipProps { export interface Memberships { groupId: number; - topics: { id: number; permission: GroupTopicPermissionEnum }[]; + topics: { id: number; permissions: PermissionEnum[] }[]; isAllowed: boolean; rejectReason?: string; } diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index b638cfd6f06..3cf9e6cb4fa 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -1,4 +1,4 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { notifyError } from 'controllers/app/notifications'; import { SessionKeyError } from 'controllers/server/sessions'; import { parseCustomStages } from 'helpers'; @@ -222,12 +222,12 @@ export const NewThreadForm = () => { const disabledActionsTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, isThreadTopicGated: isRestrictedMembership, - threadTopicInteractionRestriction: + threadTopicInteractionRestrictions: !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_THREAD, ) - ? foundTopicPermissions?.permission + ? foundTopicPermissions?.permissions : undefined, }); @@ -422,12 +422,12 @@ export const NewThreadForm = () => { {canShowTopicPermissionBanner && foundTopicPermissions && !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_THREAD, ) && ( setCanShowTopicPermissionBanner(false)} /> diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index 9e2a5c0d793..1563801a30e 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -1,4 +1,4 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { notifyError } from 'controllers/app/notifications'; import { SessionKeyError } from 'controllers/server/sessions'; import { parseCustomStages } from 'helpers'; @@ -206,12 +206,12 @@ export const NewThreadForm = () => { const disabledActionsTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, isThreadTopicGated: isRestrictedMembership, - threadTopicInteractionRestriction: + threadTopicInteractionRestrictions: !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_THREAD, ) - ? foundTopicPermissions?.permission + ? foundTopicPermissions?.permissions : undefined, }); @@ -396,12 +396,12 @@ export const NewThreadForm = () => { {canShowTopicPermissionBanner && foundTopicPermissions && !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_THREAD, ) && ( setCanShowTopicPermissionBanner(false)} /> diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx index df0226e0738..d0af21acb68 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx @@ -1,4 +1,4 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { getThreadActionTooltipText } from 'helpers/threads'; import { truncate } from 'helpers/truncate'; import useTopicGating from 'hooks/useTopicGating'; @@ -215,23 +215,26 @@ export const CWContentPage = ({ const disabledReactPermissionTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, - threadTopicInteractionRestriction: + threadTopicInteractionRestrictions: !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE, + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_COMMENT_REACTION, + ) && + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_THREAD_REACTION, ) - ? foundTopicPermissions?.permission + ? foundTopicPermissions?.permissions : undefined, }); const disabledCommentPermissionTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, - threadTopicInteractionRestriction: + threadTopicInteractionRestrictions: !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_COMMENT, ) - ? foundTopicPermissions?.permission + ? foundTopicPermissions?.permissions : undefined, }); diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/CWGatedTopicPermissionLevelBanner.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/CWGatedTopicPermissionLevelBanner.tsx index 9ecdce4349c..15c4e6f2031 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/CWGatedTopicPermissionLevelBanner.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWGatedTopicPermissionLevelBanner/CWGatedTopicPermissionLevelBanner.tsx @@ -1,8 +1,9 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; import { useCommonNavigate } from 'navigation/helpers'; import React from 'react'; -import { TOPIC_PERMISSIONS } from 'views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants'; +// eslint-disable-next-line max-len +import { convertGranularPermissionsToAccumulatedPermissions } from 'views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/helpers'; import { MixpanelClickthroughEvent, MixpanelClickthroughPayload, @@ -12,12 +13,12 @@ import CWBanner from '../new_designs/CWBanner'; interface CWGatedTopicPermissionLevelBannerProps { onClose: () => void; - topicPermission: GroupTopicPermissionEnum; + topicPermissions: PermissionEnum[]; } const CWGatedTopicPermissionLevelBanner = ({ onClose = () => {}, - topicPermission, + topicPermissions, }: CWGatedTopicPermissionLevelBannerProps) => { const navigate = useCommonNavigate(); @@ -31,7 +32,7 @@ const CWGatedTopicPermissionLevelBanner = ({ return ( { isThreadArchived: !!thread?.archivedAt, isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, - threadTopicInteractionRestriction: + }); + + const disabledCommentActionTooltipText = getThreadActionTooltipText({ + isCommunityMember: Permissions.isCommunityMember(thread.communityId), + threadTopicInteractionRestrictions: !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, // on this page we only show comment option + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_COMMENT, // on this page we only show comment option ) - ? foundTopicPermissions?.permission + ? foundTopicPermissions?.permissions : undefined, }); @@ -94,7 +98,7 @@ const FeedThread = ({ thread }: { thread: Thread }) => { { navigate( @@ -105,7 +109,11 @@ const FeedThread = ({ thread }: { thread: Thread }) => { }} threadHref={discussionLink} onCommentBtnClick={() => navigate(`${discussionLink}?focusComments=true`)} - disabledActionsTooltipText={disabledActionsTooltipText} + disabledActionsTooltipText={ + disabledCommentActionTooltipText + ? disabledCommentActionTooltipText + : disabledActionsTooltipText + } customStages={community.custom_stages} hideReactionButton hideUpvotesDrawer diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/Update/UpdateCommunityGroupPage.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/Update/UpdateCommunityGroupPage.tsx index a61adc5f918..680e5c6375b 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/Update/UpdateCommunityGroupPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/Update/UpdateCommunityGroupPage.tsx @@ -21,6 +21,7 @@ import { import { convertRequirementAmountFromWeiToTokens } from '../../common/helpers'; import { DeleteGroupModal } from '../DeleteGroupModal'; import { GroupForm } from '../common/GroupForm'; +import { convertGranularPermissionsToAccumulatedPermissions } from '../common/GroupForm/helpers'; import { makeGroupDataBaseAPIPayload } from '../common/helpers'; import './UpdateCommunityGroupPage.scss'; @@ -131,7 +132,9 @@ const UpdateCommunityGroupPage = ({ groupId }: { groupId: string }) => { topics: (foundGroup.topics || []).map((topic) => ({ label: topic.name, value: topic.id, - permission: topic.permission, + permission: convertGranularPermissionsToAccumulatedPermissions( + topic.permissions || [], + ), })), }} onSubmit={(values) => { diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx index d9f70414617..0c52bb76d9d 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx @@ -31,6 +31,7 @@ import { REVERSED_TOPIC_PERMISSIONS, TOPIC_PERMISSIONS, } from './constants'; +import { convertAccumulatedPermissionsToGranularPermissions } from './helpers'; import { FormSubmitValues, GroupFormProps, @@ -213,7 +214,7 @@ const GroupForm = ({ if (initialValues.topics) { setTopicPermissionsSubForms( initialValues.topics.map((t) => ({ - permission: TOPIC_PERMISSIONS[t.permission], + permission: t.permission, topic: { id: parseInt(`${t.value}`), name: t.label }, })), ); @@ -388,7 +389,9 @@ const GroupForm = ({ ...values, topics: topicPermissionsSubForms.map((t) => ({ id: t.topic.id, - permission: REVERSED_TOPIC_PERMISSIONS[t.permission], + permissions: convertAccumulatedPermissionsToGranularPermissions( + REVERSED_TOPIC_PERMISSIONS[t.permission], + ), })), requirementsToFulfill, requirements: requirementSubForms.map((x) => x.values), diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants.ts b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants.ts index cc27814347b..d87892352d3 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/constants.ts @@ -1,4 +1,4 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { GroupTopicPermissionEnum } from './index.types'; export const REQUIREMENTS_TO_FULFILL = { ALL_REQUIREMENTS: 'ALL', @@ -12,6 +12,9 @@ export const TOPIC_PERMISSIONS = { 'Upvote & Comment & Post', }; +export type TopicPermissions = + (typeof TOPIC_PERMISSIONS)[keyof typeof TOPIC_PERMISSIONS]; + type ReversedTopicPermissions = { [K in keyof typeof TOPIC_PERMISSIONS as (typeof TOPIC_PERMISSIONS)[K]]: K; }; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/helpers.ts b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/helpers.ts new file mode 100644 index 00000000000..f537029a80d --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/helpers.ts @@ -0,0 +1,59 @@ +import { PermissionEnum } from '@hicommonwealth/schemas'; +import { TOPIC_PERMISSIONS, TopicPermissions } from './constants'; +import { GroupTopicPermissionEnum } from './index.types'; + +export const convertAccumulatedPermissionsToGranularPermissions = ( + permission: GroupTopicPermissionEnum, +): PermissionEnum[] => { + const basePermissions = [ + PermissionEnum.CREATE_COMMENT_REACTION, + PermissionEnum.CREATE_THREAD_REACTION, + ]; + + switch (permission) { + case GroupTopicPermissionEnum.UPVOTE: + return basePermissions; + case GroupTopicPermissionEnum.UPVOTE_AND_COMMENT: + return [...basePermissions, PermissionEnum.CREATE_COMMENT]; + case GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST: + return [ + ...basePermissions, + PermissionEnum.CREATE_COMMENT, + PermissionEnum.CREATE_THREAD, + ]; + default: + return []; + } +}; + +export const convertGranularPermissionsToAccumulatedPermissions = ( + permissions: PermissionEnum[], +): TopicPermissions => { + if ( + permissions.includes(PermissionEnum.CREATE_COMMENT) && + permissions.includes(PermissionEnum.CREATE_COMMENT_REACTION) && + permissions.includes(PermissionEnum.CREATE_THREAD_REACTION) && + permissions.includes(PermissionEnum.CREATE_THREAD) + ) { + return TOPIC_PERMISSIONS[ + GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST + ]; + } + + if ( + permissions.includes(PermissionEnum.CREATE_COMMENT) && + permissions.includes(PermissionEnum.CREATE_COMMENT_REACTION) && + permissions.includes(PermissionEnum.CREATE_THREAD_REACTION) + ) { + return TOPIC_PERMISSIONS[GroupTopicPermissionEnum.UPVOTE_AND_COMMENT]; + } + + if ( + permissions.includes(PermissionEnum.CREATE_COMMENT_REACTION) && + permissions.includes(PermissionEnum.CREATE_THREAD_REACTION) + ) { + return TOPIC_PERMISSIONS[GroupTopicPermissionEnum.UPVOTE]; + } + + return TOPIC_PERMISSIONS.UPVOTE_AND_COMMENT_AND_POST; +}; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types.ts b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types.ts index 17f04e35fa4..21b5783bed9 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/index.types.ts @@ -1,6 +1,12 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { TOPIC_PERMISSIONS } from './constants'; +export enum GroupTopicPermissionEnum { + UPVOTE = 'UPVOTE', + UPVOTE_AND_COMMENT = 'UPVOTE_AND_COMMENT', + UPVOTE_AND_COMMENT_AND_POST = 'UPVOTE_AND_COMMENT_AND_POST', +} + export type RequirementSubFormsState = { defaultValues?: RequirementSubTypeWithLabel; values: RequirementSubType; @@ -54,7 +60,7 @@ export type RequirementSubFormType = { export type GroupFormTopicSubmitValues = { id: number; - permission: GroupTopicPermissionEnum; + permissions: PermissionEnum[]; }; export type GroupResponseValuesType = { @@ -71,7 +77,7 @@ export type GroupInitialValuesTypeWithLabel = { groupDescription?: string; requirements?: RequirementSubTypeWithLabel[]; requirementsToFulfill?: 'ALL' | number; - topics: (LabelType & { permission: GroupTopicPermissionEnum })[]; + topics: (LabelType & { permission: TopicPermissions })[]; }; export type FormSubmitValues = { diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.tsx index 31aa6c2a5d7..17067a7461d 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/GroupCard.tsx @@ -8,7 +8,7 @@ import { CWText } from 'views/components/component_kit/cw_text'; import { CWTag } from 'views/components/component_kit/new_designs/CWTag'; import { formatAddressShort } from '../../../../../../helpers'; import CWPagination from '../../../../../components/component_kit/new_designs/CWPagination/CWPagination'; -import { TOPIC_PERMISSIONS } from '../../../Groups/common/GroupForm/constants'; +import { convertGranularPermissionsToAccumulatedPermissions } from '../../../Groups/common/GroupForm/helpers'; import './GroupCard.scss'; import RequirementCard from './RequirementCard/RequirementCard'; import { GroupCardProps } from './types'; @@ -155,7 +155,9 @@ const GroupCard = ({ {t.name}
diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts index 954b4c038d5..3444c2477b1 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupCard/types.ts @@ -1,5 +1,5 @@ +import { PermissionEnum } from '@hicommonwealth/schemas'; import MinimumProfile from 'models/MinimumProfile'; -import { TopicPermissions } from '../../../Groups/common/GroupForm/index.types'; export type RequirementCardProps = { requirementType: string; @@ -17,7 +17,7 @@ export type GroupCardProps = { requirements?: RequirementCardProps[]; // This represents erc requirements requirementsToFulfill: 'ALL' | number; allowLists?: string[]; - topics: { id: number; name: string; permission?: TopicPermissions }[]; + topics: { id: number; name: string; permissions?: PermissionEnum[] }[]; canEdit?: boolean; onEditClick?: () => void; profiles?: Map; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx index 585b836a54b..77f0ffc1612 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Members/GroupsSection/GroupsSection.tsx @@ -92,7 +92,7 @@ const GroupsSection = ({ topics={(group?.topics || []).map((x) => ({ id: x.id, name: x.name, - permission: x.permission, + permissions: x.permissions, }))} canEdit={canManageGroups} onEditClick={() => navigate(`/members/groups/${group.id}/update`)} diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx index 35c2a4abe34..332efefd0b1 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx @@ -530,6 +530,11 @@ export const CommentTree = ({ parentCommentId={parentCommentId} rootThread={thread} canComment={canComment} + tooltipText={ + !canComment && disabledActionsTooltipText + ? disabledActionsTooltipText + : '' + } /> )} diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index 9a552caf48c..be63bf09eb6 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -1,7 +1,4 @@ -import { - GroupTopicPermissionEnum, - TopicWeightedVoting, -} from '@hicommonwealth/schemas'; +import { PermissionEnum, TopicWeightedVoting } from '@hicommonwealth/schemas'; import { getProposalUrlPath } from 'identifiers'; import { getScopePrefix, useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useRef, useState } from 'react'; @@ -234,24 +231,18 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { isThreadArchived: !!thread?.archivedAt, isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, - threadTopicInteractionRestriction: - !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE, - ) - ? foundTopicPermissions?.permission - : undefined, }); const disabledReactPermissionTooltipText = getThreadActionTooltipText( { isCommunityMember: !!user.activeAccount, - threadTopicInteractionRestriction: + threadTopicInteractionRestrictions: !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE, + !foundTopicPermissions?.permissions?.includes( + // this should be updated if we start displaying recent comments on this page + PermissionEnum.CREATE_THREAD_REACTION, ) - ? foundTopicPermissions?.permission + ? foundTopicPermissions?.permissions : undefined, }, ); @@ -259,12 +250,12 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { const disabledCommentPermissionTooltipText = getThreadActionTooltipText({ isCommunityMember: !!user.activeAccount, - threadTopicInteractionRestriction: + threadTopicInteractionRestrictions: !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_COMMENT, ) - ? foundTopicPermissions?.permission + ? foundTopicPermissions?.permissions : undefined, }); diff --git a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx index 21f6cd9ba02..574abdb5fd4 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx @@ -1,4 +1,4 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { slugify } from '@hicommonwealth/shared'; import { getThreadActionTooltipText } from 'helpers/threads'; import useTopicGating from 'hooks/useTopicGating'; @@ -118,12 +118,12 @@ export const TopicSummaryRow = ({ isThreadArchived: !!thread?.archivedAt, isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, - threadTopicInteractionRestriction: + threadTopicInteractionRestrictions: !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, // on this page we only show comment option + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_COMMENT, // on this page we only show comment option ) - ? foundTopicPermissions?.permission + ? foundTopicPermissions?.permissions : undefined, }); diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index 8fc60f0cbee..2dc1cd8caba 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -1,4 +1,4 @@ -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { ContentType, getThreadUrl } from '@hicommonwealth/shared'; import { notifyError } from 'controllers/app/notifications'; import { extractDomain, isDefaultStage } from 'helpers'; @@ -331,12 +331,12 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { isThreadArchived: !!thread?.archivedAt, isThreadLocked: !!thread?.lockedAt, isThreadTopicGated: isRestrictedMembership, - threadTopicInteractionRestriction: + threadTopicInteractionRestrictions: !isAdmin && - !foundTopicPermissions?.permission?.includes( - GroupTopicPermissionEnum.UPVOTE_AND_COMMENT, + !foundTopicPermissions?.permissions?.includes( + PermissionEnum.CREATE_COMMENT, ) - ? foundTopicPermissions?.permission + ? foundTopicPermissions?.permissions : undefined, }); diff --git a/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts b/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts index fcb5003a829..7bb193623fa 100644 --- a/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts +++ b/packages/commonwealth/server/controllers/server_groups_methods/get_groups.ts @@ -4,7 +4,7 @@ import { MembershipAttributes, TopicAttributes, } from '@hicommonwealth/model'; -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { Op, WhereOptions } from 'sequelize'; import { ServerGroupsController } from '../server_groups_controller'; @@ -15,7 +15,7 @@ export type GetGroupsOptions = { }; export type TopicAttributesWithPermission = TopicAttributes & { - permission: GroupTopicPermissionEnum; + permissions: PermissionEnum[]; }; type GroupWithExtras = GroupAttributes & { @@ -25,9 +25,9 @@ type GroupWithExtras = GroupAttributes & { export type GetGroupsResult = GroupWithExtras[]; export type GroupInstanceWithTopicPermissions = GroupInstance & { - GroupTopicPermissions: { + GroupPermissions: { topic_id: number; - allowed_actions: GroupTopicPermissionEnum; + allowed_actions: PermissionEnum[]; }[]; }; @@ -41,7 +41,7 @@ export async function __getGroups( }, include: [ { - model: this.models.GroupTopicPermission, + model: this.models.GroupPermission, attributes: ['topic_id', 'allowed_actions'], }, ], @@ -94,11 +94,10 @@ export async function __getGroups( .filter((t) => t.group_ids!.includes(group.id!)) .map((t) => { const temp: TopicAttributesWithPermission = { ...t.toJSON() }; - temp.permission = ( - (group as GroupInstanceWithTopicPermissions) - .GroupTopicPermissions || [] + temp.permissions = ( + (group as GroupInstanceWithTopicPermissions).GroupPermissions || [] ).find((gtp) => gtp.topic_id === t.id) - ?.allowed_actions as GroupTopicPermissionEnum; + ?.allowed_actions as PermissionEnum[]; return temp; }), })); diff --git a/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts b/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts index e7dc20f43ba..948b28e74ec 100644 --- a/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts +++ b/packages/commonwealth/server/controllers/server_groups_methods/refresh_membership.ts @@ -4,7 +4,7 @@ import { MembershipRejectReason, UserInstance, } from '@hicommonwealth/model'; -import { GroupTopicPermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum } from '@hicommonwealth/schemas'; import { Op } from 'sequelize'; import { refreshMembershipsForAddress } from '../../util/requirementsModule/refreshMembershipsForAddress'; import { ServerGroupsController } from '../server_groups_controller'; @@ -36,7 +36,7 @@ export async function __refreshMembership( }, include: [ { - model: this.models.GroupTopicPermission, + model: this.models.GroupPermission, attributes: ['topic_id', 'allowed_actions'], }, ], @@ -75,10 +75,10 @@ export async function __refreshMembership( .filter((t) => t.group_ids!.includes(membership.group_id)) .map((t) => ({ id: t.id, - permission: (groups as GroupInstanceWithTopicPermissions[]) + permissions: (groups as GroupInstanceWithTopicPermissions[]) .find((g) => g.id === membership.group_id) - ?.GroupTopicPermissions?.find((gtp) => gtp.topic_id === t.id) - ?.allowed_actions as GroupTopicPermissionEnum, + ?.GroupPermissions?.find((gtp) => gtp.topic_id === t.id) + ?.allowed_actions as PermissionEnum[], })), allowed: !membership.reject_reason, rejectReason: membership.reject_reason, diff --git a/packages/commonwealth/server/migrations/20241010102720-add-group-topic-permissions-table.js b/packages/commonwealth/server/migrations/20241010102720-add-group-topic-permissions-table.js deleted file mode 100644 index e6109b1c8a4..00000000000 --- a/packages/commonwealth/server/migrations/20241010102720-add-group-topic-permissions-table.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -module.exports = { - up: async (queryInterface, Sequelize) => { - return queryInterface.sequelize.transaction(async (t) => { - await queryInterface.createTable( - 'GroupTopicPermissions', - { - group_id: { - type: Sequelize.INTEGER, - allowNull: false, - primaryKey: true, - references: { model: 'Groups', key: 'id' }, - onUpdate: 'CASCADE', - onDelete: 'CASCADE', - }, - topic_id: { - type: Sequelize.INTEGER, - allowNull: false, - primaryKey: true, - references: { model: 'Topics', key: 'id' }, - onUpdate: 'CASCADE', - onDelete: 'CASCADE', - }, - allowed_actions: { type: Sequelize.STRING, allowNull: false }, - created_at: { type: Sequelize.DATE, allowNull: false }, - updated_at: { type: Sequelize.DATE, allowNull: false }, - }, - { - timestamps: true, - transactions: t, - }, - ); - }); - }, - - down: async (queryInterface, Sequelize) => { - await queryInterface.sequelize.transaction(async (transaction) => { - await queryInterface.dropTable('GroupTopicPermissions', { transaction }); - }); - }, -}; diff --git a/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js b/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js deleted file mode 100644 index 9383d7783e2..00000000000 --- a/packages/commonwealth/server/migrations/20241010195545-migrate-existing-group-topic-permissions.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -/** @type {import('sequelize-cli').Migration} */ -module.exports = { - async up(queryInterface, Sequelize) { - await queryInterface.sequelize.transaction(async (t) => { - await queryInterface.sequelize.query( - ` - INSERT INTO "GroupTopicPermissions" - (group_id, topic_id, allowed_actions, created_at, updated_at) - SELECT - unnest(t.group_ids) AS group_id, - t.id AS topic_id, - 'UPVOTE_AND_COMMENT_AND_POST' AS allowed_actions, - NOW() AS created_at, - NOW() AS updated_at - FROM "Topics" t - WHERE - ARRAY_LENGTH(t.group_ids, 1) IS NOT NULL - AND ARRAY_LENGTH(t.group_ids, 1) > 0; - `, - { transaction: t }, - ); - }); - }, - - async down(queryInterface, Sequelize) { - // not really-possible/recommended to rollback since "GroupTopicPermissions" might have more entries - }, -}; diff --git a/packages/commonwealth/server/migrations/20241015145424-add-topic_id-for-each-group_id-in-GroupPermissions.js b/packages/commonwealth/server/migrations/20241015145424-add-topic_id-for-each-group_id-in-GroupPermissions.js new file mode 100644 index 00000000000..1ce2fbb5bff --- /dev/null +++ b/packages/commonwealth/server/migrations/20241015145424-add-topic_id-for-each-group_id-in-GroupPermissions.js @@ -0,0 +1,69 @@ +'use strict'; + +module.exports = { + up: async (queryInterface, Sequelize) => { + return queryInterface.sequelize.transaction(async (t) => { + await queryInterface.removeConstraint( + 'GroupPermissions', + 'GroupPermissions_group_id_fkey', + { transaction: t }, + ); + + await queryInterface.addColumn( + 'GroupPermissions', + 'topic_id', + { + type: Sequelize.INTEGER, + allowNull: false, + primaryKey: true, + references: { model: 'Topics', key: 'id' }, + onUpdate: 'CASCADE', + onDelete: 'CASCADE', + }, + { transaction: t }, + ); + + await queryInterface.changeColumn( + 'GroupPermissions', + 'group_id', + { + type: Sequelize.INTEGER, + allowNull: false, + primaryKey: true, + references: { model: 'Groups', key: 'id' }, + onUpdate: 'CASCADE', + onDelete: 'CASCADE', + }, + { transaction: t }, + ); + + await queryInterface.addConstraint('GroupPermissions', { + type: 'unique', + fields: ['group_id', 'topic_id'], + name: 'GroupPermissions_unique_composite_constraint', + transaction: t, + }); + }); + }, + + down: async (queryInterface, Sequelize) => { + await queryInterface.sequelize.transaction(async (t) => { + await queryInterface.removeColumn('GroupPermissions', 'topic_id', { + transaction: t, + }); + await queryInterface.changeColumn( + 'GroupPermissions', + 'group_id', + { + type: Sequelize.INTEGER, + allowNull: true, + primaryKey: true, + references: { model: 'Groups', key: 'id' }, + onUpdate: 'CASCADE', + onDelete: 'CASCADE', + }, + { transaction: t }, + ); + }); + }, +}; diff --git a/packages/commonwealth/server/migrations/20241015181202-migrate-existing-group-topic-permissions.js b/packages/commonwealth/server/migrations/20241015181202-migrate-existing-group-topic-permissions.js new file mode 100644 index 00000000000..2835f567d55 --- /dev/null +++ b/packages/commonwealth/server/migrations/20241015181202-migrate-existing-group-topic-permissions.js @@ -0,0 +1,53 @@ +'use strict'; +// TODO - remove this +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.sequelize.transaction(async (t) => { + await queryInterface.sequelize.query( + ` + DO $$ + BEGIN IF NOT EXISTS ( + SELECT 1 + FROM pg_type + WHERE typname = 'enum_GroupPermissions_allowed_actions' + ) + THEN + CREATE TYPE enum_GroupPermissions_allowed_actions AS ENUM ( + 'CREATE_COMMENT_REACTION', + 'CREATE_THREAD_REACTION', + 'CREATE_COMMENT', + 'CREATE_THREAD' + ); + END IF; + END $$; + + + INSERT INTO "GroupPermissions" + (group_id, topic_id, allowed_actions, created_at, updated_at) + SELECT + unnest(t.group_ids) AS group_id, + t.id AS topic_id, + ARRAY[ + 'CREATE_COMMENT_REACTION', + 'CREATE_THREAD_REACTION', + 'CREATE_COMMENT', + 'CREATE_THREAD' + ]::"enum_GroupPermissions_allowed_actions"[] + AS allowed_actions, + NOW() AS created_at, + NOW() AS updated_at + FROM "Topics" t + WHERE + ARRAY_LENGTH(t.group_ids, 1) IS NOT NULL + AND ARRAY_LENGTH(t.group_ids, 1) > 0; + `, + { transaction: t }, + ); + }); + }, + + async down(queryInterface, Sequelize) { + // not really-possible/recommended to rollback since "GroupPermissions" might have more entries + }, +}; From e178ebf7dee2438c05c8d10e1487ebbf6876f24f Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 00:25:15 +0500 Subject: [PATCH 149/425] Removed unused permission --- libs/schemas/src/entities/group-permission.schemas.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/schemas/src/entities/group-permission.schemas.ts b/libs/schemas/src/entities/group-permission.schemas.ts index c4d0c365ddc..5de7d64ddcd 100644 --- a/libs/schemas/src/entities/group-permission.schemas.ts +++ b/libs/schemas/src/entities/group-permission.schemas.ts @@ -6,7 +6,6 @@ export enum PermissionEnum { CREATE_COMMENT = 'CREATE_COMMENT', CREATE_THREAD_REACTION = 'CREATE_THREAD_REACTION', CREATE_COMMENT_REACTION = 'CREATE_COMMENT_REACTION', - UPDATE_POLL = 'UPDATE_POLL', } export type GroupPermissionAction = keyof typeof PermissionEnum; From d4d3934e0d02f91ed443ac983b8478d00c6c93f9 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 00:28:33 +0500 Subject: [PATCH 150/425] Updated community lifecycle test --- libs/model/test/community/community-lifecycle.spec.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libs/model/test/community/community-lifecycle.spec.ts b/libs/model/test/community/community-lifecycle.spec.ts index 358603b9cf3..0e16c5f3c6f 100644 --- a/libs/model/test/community/community-lifecycle.spec.ts +++ b/libs/model/test/community/community-lifecycle.spec.ts @@ -8,7 +8,7 @@ import { query, } from '@hicommonwealth/core'; import { - GroupTopicPermissionEnum, + PermissionEnum, TopicWeightedVoting, } from '@hicommonwealth/schemas'; import { ChainBase, ChainType } from '@hicommonwealth/shared'; @@ -43,7 +43,7 @@ const chance = Chance(); function buildCreateGroupPayload( community_id: string, - topics: { id: number; permission: GroupTopicPermissionEnum }[] = [], + topics: { id: number; permissions: PermissionEnum[] }[] = [], ) { return { community_id, @@ -364,15 +364,15 @@ describe('Community lifecycle', () => { payload: buildCreateGroupPayload(community.id, [ { id: 1, - permission: GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + permissions: [PermissionEnum.CREATE_COMMENT, PermissionEnum.CREATE_THREAD, PermissionEnum.CREATE_COMMENT_REACTION,PermissionEnum.CREATE_THREAD_REACTION], }, { id: 2, - permission: GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + permissions: [PermissionEnum.CREATE_COMMENT, PermissionEnum.CREATE_THREAD, PermissionEnum.CREATE_COMMENT_REACTION,PermissionEnum.CREATE_THREAD_REACTION], }, { id: 3, - permission: GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + permissions: [PermissionEnum.CREATE_COMMENT, PermissionEnum.CREATE_THREAD, PermissionEnum.CREATE_COMMENT_REACTION,PermissionEnum.CREATE_THREAD_REACTION], }, ]), }), From df9924500f1c0c534c909e790397fb947fe1af7f Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 00:41:04 +0500 Subject: [PATCH 151/425] Updated thread lifecycle test --- libs/model/test/thread/thread-lifecycle.spec.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/libs/model/test/thread/thread-lifecycle.spec.ts b/libs/model/test/thread/thread-lifecycle.spec.ts index 4d04763e4df..7cb6385a622 100644 --- a/libs/model/test/thread/thread-lifecycle.spec.ts +++ b/libs/model/test/thread/thread-lifecycle.spec.ts @@ -171,13 +171,8 @@ describe('Thread lifecycle', () => { }); await seed('GroupPermission', { group_id: commentGroupId, - allowed_actions: [schemas.PermissionEnum.CREATE_COMMENT], - }); - await seed('GroupTopicPermission', { - group_id: threadGroupId, topic_id: _community?.topics?.[0]?.id || 0, - allowed_actions: - schemas.GroupTopicPermissionEnum.UPVOTE_AND_COMMENT_AND_POST, + allowed_actions: [schemas.PermissionEnum.CREATE_COMMENT], }); community = _community!; From 7852a3eaaf285cc9cdf56f98c7bb2c5bc64e3bac Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 01:01:42 +0500 Subject: [PATCH 152/425] Create group in bulks --- .../src/community/CreateGroup.command.ts | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/libs/model/src/community/CreateGroup.command.ts b/libs/model/src/community/CreateGroup.command.ts index 514265c9bf4..8f73346811a 100644 --- a/libs/model/src/community/CreateGroup.command.ts +++ b/libs/model/src/community/CreateGroup.command.ts @@ -13,6 +13,8 @@ export const CreateGroupErrors = { InvalidTopics: 'Invalid topics', }; +type GroupsPayload = { group_id: number; topic_id: number; allowed_actions: schemas.PermissionEnum[] }; + export function CreateGroup(): Command< typeof schemas.CreateGroup, AuthContext @@ -72,20 +74,16 @@ export function CreateGroup(): Command< ); // add topic level interaction permissions for current group - await Promise.all( - (payload.topics || [])?.map(async (t) => { - if (group.id) { - await models.GroupPermission.create( - { - group_id: group.id, - topic_id: t.id, - allowed_actions: t.permissions, - }, - { transaction }, - ); - } - }), - ); + const groupPermissions = (payload.topics || []).map((t) => { + if (group.id) { + return { + group_id: group.id, + topic_id: t.id, + allowed_actions: t.permissions, + }; + } + }).filter(Boolean) as GroupsPayload[]; + await models.GroupPermission.bulkCreate(groupPermissions, { transaction }); } return group.toJSON(); }, From 1fb9fa8ded082c17b48d91330f46ac9fbe945c05 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 01:06:16 +0500 Subject: [PATCH 153/425] Added back update poll permission --- libs/schemas/src/entities/group-permission.schemas.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/schemas/src/entities/group-permission.schemas.ts b/libs/schemas/src/entities/group-permission.schemas.ts index 5de7d64ddcd..c466c5d489e 100644 --- a/libs/schemas/src/entities/group-permission.schemas.ts +++ b/libs/schemas/src/entities/group-permission.schemas.ts @@ -6,6 +6,7 @@ export enum PermissionEnum { CREATE_COMMENT = 'CREATE_COMMENT', CREATE_THREAD_REACTION = 'CREATE_THREAD_REACTION', CREATE_COMMENT_REACTION = 'CREATE_COMMENT_REACTION', + UPDATE_POLL = 'UPDATE_POLL' } export type GroupPermissionAction = keyof typeof PermissionEnum; From b193e6d303a772670a08c2c194f2c1d9c6582ed9 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 01:08:20 +0500 Subject: [PATCH 154/425] Revert bulk group create --- .../src/community/CreateGroup.command.ts | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/libs/model/src/community/CreateGroup.command.ts b/libs/model/src/community/CreateGroup.command.ts index 8f73346811a..514265c9bf4 100644 --- a/libs/model/src/community/CreateGroup.command.ts +++ b/libs/model/src/community/CreateGroup.command.ts @@ -13,8 +13,6 @@ export const CreateGroupErrors = { InvalidTopics: 'Invalid topics', }; -type GroupsPayload = { group_id: number; topic_id: number; allowed_actions: schemas.PermissionEnum[] }; - export function CreateGroup(): Command< typeof schemas.CreateGroup, AuthContext @@ -74,16 +72,20 @@ export function CreateGroup(): Command< ); // add topic level interaction permissions for current group - const groupPermissions = (payload.topics || []).map((t) => { - if (group.id) { - return { - group_id: group.id, - topic_id: t.id, - allowed_actions: t.permissions, - }; - } - }).filter(Boolean) as GroupsPayload[]; - await models.GroupPermission.bulkCreate(groupPermissions, { transaction }); + await Promise.all( + (payload.topics || [])?.map(async (t) => { + if (group.id) { + await models.GroupPermission.create( + { + group_id: group.id, + topic_id: t.id, + allowed_actions: t.permissions, + }, + { transaction }, + ); + } + }), + ); } return group.toJSON(); }, From f1fd855659e480cd18466a2048c91e7c60bde997 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 01:13:07 +0500 Subject: [PATCH 155/425] Fix type --- .../scripts/views/pages/discussions/CommentTree/CommentTree.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx index 332efefd0b1..296cedcecf3 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx @@ -531,7 +531,7 @@ export const CommentTree = ({ rootThread={thread} canComment={canComment} tooltipText={ - !canComment && disabledActionsTooltipText + !canComment && typeof disabledActionsTooltipText === 'string' ? disabledActionsTooltipText : '' } From bd6acd7e6a9b5ba8bc93440d5fe55c30ec38bbdb Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Tue, 15 Oct 2024 16:15:44 -0400 Subject: [PATCH 156/425] replace global activity cache with generic query caching --- libs/adapters/src/trpc/handlers.ts | 39 +++++- libs/core/src/ports/interfaces.ts | 1 + .../model/src/feed/GetGlobalActivity.query.ts | 5 +- libs/model/src/feed/GetUserActivity.query.ts | 2 +- ...ctivityCache.ts => getUserActivityFeed.ts} | 127 +----------------- libs/model/src/index.ts | 1 - packages/commonwealth/main.ts | 7 - .../server/api/external-router.ts | 29 ++-- packages/commonwealth/server/api/feed.ts | 4 +- packages/commonwealth/server/api/threads.ts | 13 +- .../controllers/server_comments_controller.ts | 7 +- .../controllers/server_threads_controller.ts | 7 +- .../server/routes/viewGlobalActivity.ts | 16 --- .../commonwealth/server/routing/router.ts | 15 +-- 14 files changed, 78 insertions(+), 195 deletions(-) rename libs/model/src/{globalActivityCache.ts => getUserActivityFeed.ts} (50%) delete mode 100644 packages/commonwealth/server/routes/viewGlobalActivity.ts diff --git a/libs/adapters/src/trpc/handlers.ts b/libs/adapters/src/trpc/handlers.ts index 3506758b015..91a6c2a7017 100644 --- a/libs/adapters/src/trpc/handlers.ts +++ b/libs/adapters/src/trpc/handlers.ts @@ -1,11 +1,14 @@ import { + CacheNamespaces, Events, INVALID_ACTOR_ERROR, INVALID_INPUT_ERROR, INVALID_STATE_ERROR, + cache, command as coreCommand, query as coreQuery, handleEvent, + logger, type EventSchemas, type EventsHandlerMetadata, type Metadata, @@ -14,6 +17,8 @@ import { TRPCError } from '@trpc/server'; import { ZodSchema, ZodUndefined, z } from 'zod'; import { Commit, Tag, Track, buildproc, procedure } from './middleware'; +const log = logger(import.meta); + const trpcerror = (error: unknown): TRPCError => { if (error instanceof Error) { const { name, message, ...other } = error; @@ -89,6 +94,7 @@ export const command = < * @param factory query factory * @param tag query tag used for OpenAPI spec grouping * @param forceSecure whether to force secure requests for rate-limited external-router + * @param ttlSecs cache response ttl in seconds * @returns tRPC query procedure */ export const query = < @@ -98,7 +104,10 @@ export const query = < >( factory: () => Metadata, tag: Tag, - forceSecure?: boolean, + options?: { + forceSecure?: boolean; + ttlSecs?: number; + }, ) => { const md = factory(); return buildproc({ @@ -106,10 +115,23 @@ export const query = < name: factory.name, md, tag, - forceSecure, + forceSecure: options?.forceSecure, }).query(async ({ ctx, input }) => { try { - return await coreQuery( + const cacheKey = options?.ttlSecs + ? `${factory.name}_${JSON.stringify(input)}` + : undefined; + if (cacheKey) { + const cachedReponse = await cache().getKey( + CacheNamespaces.Query_Response, + cacheKey, + ); + if (cachedReponse) { + log.info(`Returning cached response for ${cacheKey}`); + return JSON.parse(cachedReponse); + } + } + const response = await coreQuery( md, { actor: ctx.actor, @@ -117,6 +139,17 @@ export const query = < }, false, ); + if (cacheKey) { + void cache() + .setKey( + CacheNamespaces.Query_Response, + cacheKey, + JSON.stringify(response), + options?.ttlSecs, + ) + .then(() => log.info(`Cached response for ${cacheKey}`)); + } + return response; } catch (error) { throw trpcerror(error); } diff --git a/libs/core/src/ports/interfaces.ts b/libs/core/src/ports/interfaces.ts index 4a50c29732f..974b1a645d4 100644 --- a/libs/core/src/ports/interfaces.ts +++ b/libs/core/src/ports/interfaces.ts @@ -78,6 +78,7 @@ export enum CacheNamespaces { Activity_Cache = 'activity_cache', Rate_Limiter = 'rate_limiter', Api_key_auth = 'api_key_auth', + Query_Response = 'query_response', } /** diff --git a/libs/model/src/feed/GetGlobalActivity.query.ts b/libs/model/src/feed/GetGlobalActivity.query.ts index f0f8deeec99..b118d877201 100644 --- a/libs/model/src/feed/GetGlobalActivity.query.ts +++ b/libs/model/src/feed/GetGlobalActivity.query.ts @@ -1,13 +1,12 @@ import { Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { GlobalActivityCache } from '../globalActivityCache'; +import { getUserActivityFeed } from '../getUserActivityFeed'; export function GetGlobalActivity(): Query { return { ...schemas.ActivityFeed, auth: [], secure: false, - body: async () => - await GlobalActivityCache.getInstance().getGlobalActivity(), + body: async () => await getUserActivityFeed({}), }; } diff --git a/libs/model/src/feed/GetUserActivity.query.ts b/libs/model/src/feed/GetUserActivity.query.ts index 3cabbca27bb..06b301e46d7 100644 --- a/libs/model/src/feed/GetUserActivity.query.ts +++ b/libs/model/src/feed/GetUserActivity.query.ts @@ -1,6 +1,6 @@ import { Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; -import { getUserActivityFeed } from '../globalActivityCache'; +import { getUserActivityFeed } from '../getUserActivityFeed'; export function GetUserActivity(): Query { return { diff --git a/libs/model/src/globalActivityCache.ts b/libs/model/src/getUserActivityFeed.ts similarity index 50% rename from libs/model/src/globalActivityCache.ts rename to libs/model/src/getUserActivityFeed.ts index 60ed27a0c08..9cf5d74c653 100644 --- a/libs/model/src/globalActivityCache.ts +++ b/libs/model/src/getUserActivityFeed.ts @@ -1,7 +1,5 @@ -import { CacheNamespaces, cache, logger } from '@hicommonwealth/core'; import { ActivityFeed, ActivityThread } from '@hicommonwealth/schemas'; import { QueryTypes } from 'sequelize'; -import { v4 as uuidv4 } from 'uuid'; import { z } from 'zod'; import { models } from './database'; @@ -15,9 +13,7 @@ export async function getUserActivityFeed({ user_id = 0, thread_limit = 50, comment_limit = 3, -}: Omit, 'is_global'> & { - user_id?: number; -}) { +}: z.infer & { user_id?: number }) { const query = ` WITH user_communities AS ( @@ -114,124 +110,3 @@ ORDER BY return threads.map((t) => t.thread); } - -const log = logger(import.meta); - -export class GlobalActivityCache { - private _cacheKey = 'global_activity'; - private _lockName = 'global_activity_cache_locker'; - private static _instance: GlobalActivityCache; - - constructor( - private _cacheTTL: number = 60 * 5, // cache TTL in seconds - ) {} - - static getInstance(cacheTTL?: number): GlobalActivityCache { - if (!GlobalActivityCache._instance) { - GlobalActivityCache._instance = new GlobalActivityCache(cacheTTL); - } - return GlobalActivityCache._instance; - } - - public async start() { - await this.refreshGlobalActivity(); - // eslint-disable-next-line @typescript-eslint/no-misused-promises - setInterval(this.refreshGlobalActivity.bind(this), this._cacheTTL * 1000); - } - - public async getGlobalActivity() { - const activity = await cache().getKey( - CacheNamespaces.Activity_Cache, - this._cacheKey, - ); - if (!activity) { - if (GlobalActivityCache._instance) { - const msg = 'Failed to fetch global activity from Redis'; - log.error(msg); - } - return await getUserActivityFeed({}); - } - return JSON.parse(activity); - } - - public async deleteActivityFromCache(threadId: number): Promise { - const errorMsg = 'Failed to update global activity in Redis'; - - try { - const res = await cache().getKey( - CacheNamespaces.Activity_Cache, - this._cacheKey, - ); - - if (!res) { - log.info('Global Activity Cache is empty'); - return; - } - - let activity = JSON.parse(res); - let updated = false; - activity = activity.filter((a: any) => { - let shouldKeep = true; - if (a.thread_id === threadId) { - updated = true; - shouldKeep = false; - } - return shouldKeep; - }); - - if (!updated) return; - - const result = await cache().setKey( - CacheNamespaces.Activity_Cache, - this._cacheKey, - JSON.stringify(activity), - ); - if (!result) { - log.error(errorMsg); - } - } catch (e: any) { - log.error(errorMsg, e); - } - } - - private async refreshGlobalActivity(): Promise { - try { - const lockAcquired = await this.acquireLock(); - - if (lockAcquired === false) { - log.info('Unable to acquire lock. Skipping refresh...'); - return; - } - - const activity = await getUserActivityFeed({}); - const result = await cache().setKey( - CacheNamespaces.Activity_Cache, - this._cacheKey, - JSON.stringify(activity), - ); - - if (!result) { - const msg = 'Failed to save global activity in Redis'; - log.error(msg); - return; - } - - log.info('Activity cache successfully refreshed'); - } catch (e: any) { - const msg = 'Failed to refresh the global cache'; - log.error(msg, e); - } - } - - private async acquireLock() { - return await cache().setKey( - CacheNamespaces.Activity_Cache, - this._lockName, - uuidv4(), - // shorten by 5 seconds to eliminate any discrepancies - // between setInterval delay and Redis TTL - this._cacheTTL - 5, - true, - ); - } -} diff --git a/libs/model/src/index.ts b/libs/model/src/index.ts index aac4bcb42ee..c465e12e0f5 100644 --- a/libs/model/src/index.ts +++ b/libs/model/src/index.ts @@ -31,6 +31,5 @@ export type { E2E_TestEntities } from './tester'; export * from './chainEventSignatures'; export * from './config'; export * from './database'; -export * from './globalActivityCache'; export * from './models'; export * from './utils'; diff --git a/packages/commonwealth/main.ts b/packages/commonwealth/main.ts index 0aacd89bcfb..5bad18566d8 100644 --- a/packages/commonwealth/main.ts +++ b/packages/commonwealth/main.ts @@ -1,7 +1,6 @@ import { CacheDecorator, setupErrorHandlers } from '@hicommonwealth/adapters'; import { logger } from '@hicommonwealth/core'; import type { DB } from '@hicommonwealth/model'; -import { GlobalActivityCache } from '@hicommonwealth/model'; import sgMail from '@sendgrid/mail'; import compression from 'compression'; import SessionSequelizeStore from 'connect-session-sequelize'; @@ -153,11 +152,6 @@ export async function main( setupMiddleware(); setupPassport(db); - // TODO: decouple as global singleton - const globalActivityCache = GlobalActivityCache.getInstance(); - // initialize async to avoid blocking startup - if (!noGlobalActivityCache) globalActivityCache.start(); - // Declare Validation Middleware Service // middleware to use for all requests const dbValidationService: DatabaseValidationService = @@ -168,7 +162,6 @@ export async function main( app, db, viewCountCache, - globalActivityCache, dbValidationService, cacheDecorator, ); diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 1a10e9033bf..7d07060ccee 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -36,17 +36,26 @@ const { createComment, updateComment, deleteComment, createCommentReaction } = const { getNewContent } = user.trpcRouter; const api = { - getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User, true), - getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User, true), + getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User, { + forceSecure: true, + ttlSecs: 60 * 5, + }), + getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User, { + forceSecure: true, + }), getNewContent, - getCommunities: trpc.query( - Community.GetCommunities, - trpc.Tag.Community, - true, - ), - getCommunity: trpc.query(Community.GetCommunity, trpc.Tag.Community, true), - getMembers: trpc.query(Community.GetMembers, trpc.Tag.Community, true), - getComments: trpc.query(Comment.GetComments, trpc.Tag.Comment, true), + getCommunities: trpc.query(Community.GetCommunities, trpc.Tag.Community, { + forceSecure: true, + }), + getCommunity: trpc.query(Community.GetCommunity, trpc.Tag.Community, { + forceSecure: true, + }), + getMembers: trpc.query(Community.GetMembers, trpc.Tag.Community, { + forceSecure: true, + }), + getComments: trpc.query(Comment.GetComments, trpc.Tag.Comment, { + forceSecure: true, + }), createCommunity, updateCommunity, createTopic, diff --git a/packages/commonwealth/server/api/feed.ts b/packages/commonwealth/server/api/feed.ts index f97c222894e..aa14140eafa 100644 --- a/packages/commonwealth/server/api/feed.ts +++ b/packages/commonwealth/server/api/feed.ts @@ -2,6 +2,8 @@ import { trpc } from '@hicommonwealth/adapters'; import { Feed } from '@hicommonwealth/model'; export const trpcRouter = trpc.router({ - getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User), + getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User, { + ttlSecs: 60 * 5, + }), getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User), }); diff --git a/packages/commonwealth/server/api/threads.ts b/packages/commonwealth/server/api/threads.ts index db78c142144..42fe481a1f7 100644 --- a/packages/commonwealth/server/api/threads.ts +++ b/packages/commonwealth/server/api/threads.ts @@ -1,5 +1,6 @@ import { trpc } from '@hicommonwealth/adapters'; -import { GlobalActivityCache, Reaction, Thread } from '@hicommonwealth/model'; +import { CacheNamespaces, cache } from '@hicommonwealth/core'; +import { Reaction, Thread } from '@hicommonwealth/model'; import { MixpanelCommunityInteractionEvent } from '../../shared/analytics/types'; import { applyCanvasSignedDataMiddleware } from '../federation'; @@ -36,11 +37,13 @@ export const trpcRouter = trpc.router({ deleteThread: trpc.command( Thread.DeleteThread, trpc.Tag.Thread, - async (_, output) => { - // Using track output middleware to invalidate gac + async () => { + // Using track output middleware to invalidate global activity cache // TODO: Generalize output middleware to cover (analytics, gac invalidation, canvas, etc) - const gac = GlobalActivityCache.getInstance(); - gac && (await gac.deleteActivityFromCache(output.thread_id)); + void cache().deleteKey( + CacheNamespaces.Query_Response, + 'GetGlobalActivity', + ); return undefined; }, applyCanvasSignedDataMiddleware, diff --git a/packages/commonwealth/server/controllers/server_comments_controller.ts b/packages/commonwealth/server/controllers/server_comments_controller.ts index 101d5dca915..dacfcb2a9a9 100644 --- a/packages/commonwealth/server/controllers/server_comments_controller.ts +++ b/packages/commonwealth/server/controllers/server_comments_controller.ts @@ -1,4 +1,4 @@ -import { DB, GlobalActivityCache } from '@hicommonwealth/model'; +import { DB } from '@hicommonwealth/model'; import { SearchCommentsOptions, SearchCommentsResult, @@ -10,10 +10,7 @@ import { * */ export class ServerCommentsController { - constructor( - public models: DB, - public globalActivityCache?: GlobalActivityCache, - ) {} + constructor(public models: DB) {} /** * Returns comment search results. diff --git a/packages/commonwealth/server/controllers/server_threads_controller.ts b/packages/commonwealth/server/controllers/server_threads_controller.ts index d979eb7cadb..1386b768d83 100644 --- a/packages/commonwealth/server/controllers/server_threads_controller.ts +++ b/packages/commonwealth/server/controllers/server_threads_controller.ts @@ -1,4 +1,4 @@ -import { DB, GlobalActivityCache } from '@hicommonwealth/model'; +import { DB } from '@hicommonwealth/model'; import { CountThreadsOptions, CountThreadsResult, @@ -34,10 +34,7 @@ import { * Implements methods related to threads */ export class ServerThreadsController { - constructor( - public models: DB, - public globalActivityCache?: GlobalActivityCache, - ) {} + constructor(public models: DB) {} async getThreadsByIds( this: ServerThreadsController, diff --git a/packages/commonwealth/server/routes/viewGlobalActivity.ts b/packages/commonwealth/server/routes/viewGlobalActivity.ts deleted file mode 100644 index 4f46af1f2ca..00000000000 --- a/packages/commonwealth/server/routes/viewGlobalActivity.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { DB } from '@hicommonwealth/model'; -import { GlobalActivityCache } from '@hicommonwealth/model'; -import type { TypedRequestBody } from '../types'; -import { success } from '../types'; - -const viewGlobalActivity = async ( - models: DB, - globalActivityCache: GlobalActivityCache, - req: TypedRequestBody>, - res, -) => { - const activity = await globalActivityCache.getGlobalActivity(); - return success(res, activity); -}; - -export default viewGlobalActivity; diff --git a/packages/commonwealth/server/routing/router.ts b/packages/commonwealth/server/routing/router.ts index 4117cdc2b62..4766ea0e53f 100644 --- a/packages/commonwealth/server/routing/router.ts +++ b/packages/commonwealth/server/routing/router.ts @@ -39,7 +39,6 @@ import setDefaultRole from '../routes/setDefaultRole'; import upgradeMember, { upgradeMemberValidation, } from '../routes/upgradeMember'; -import viewGlobalActivity from '../routes/viewGlobalActivity'; import getUploadSignature from '../routes/getUploadSignature'; @@ -51,7 +50,7 @@ import updateCommunityCustomDomain from '../routes/updateCommunityCustomDomain'; import updateCommunityPriority from '../routes/updateCommunityPriority'; import type ViewCountCache from '../util/viewCountCache'; -import { type DB, type GlobalActivityCache } from '@hicommonwealth/model'; +import { type DB } from '@hicommonwealth/model'; import banAddress from '../routes/banAddress'; import setAddressWallet from '../routes/setAddressWallet'; @@ -125,14 +124,13 @@ function setupRouter( app: Express, models: DB, viewCountCache: ViewCountCache, - globalActivityCache: GlobalActivityCache, databaseValidationService: DatabaseValidationService, cacheDecorator: CacheDecorator, ) { // controllers const serverControllers: ServerControllers = { - threads: new ServerThreadsController(models, globalActivityCache), - comments: new ServerCommentsController(models, globalActivityCache), + threads: new ServerThreadsController(models), + comments: new ServerCommentsController(models), analytics: new ServerAnalyticsController(), profiles: new ServerProfilesController(models), communities: new ServerCommunitiesController(models), @@ -491,13 +489,6 @@ function setupRouter( getUploadSignature.bind(this, models), ); - registerRoute( - router, - 'post', - '/viewGlobalActivity', - viewGlobalActivity.bind(this, models, globalActivityCache), - ); - registerRoute( router, 'post', From af8921497af05d0b59a7bd73f1842cc130560572 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 01:17:41 +0500 Subject: [PATCH 157/425] Fix model test --- libs/model/test/thread/thread-lifecycle.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/model/test/thread/thread-lifecycle.spec.ts b/libs/model/test/thread/thread-lifecycle.spec.ts index 7cb6385a622..8efbe52a47a 100644 --- a/libs/model/test/thread/thread-lifecycle.spec.ts +++ b/libs/model/test/thread/thread-lifecycle.spec.ts @@ -163,6 +163,7 @@ describe('Thread lifecycle', () => { }); await seed('GroupPermission', { group_id: threadGroupId, + topic_id: _community?.topics?.[0]?.id || 0, allowed_actions: [ schemas.PermissionEnum.CREATE_THREAD, schemas.PermissionEnum.CREATE_THREAD_REACTION, From 242aa7b92f58ff127840f74dbe5b5e6ef0465cfe Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Tue, 15 Oct 2024 16:29:27 -0400 Subject: [PATCH 158/425] fix lint errors --- .../client/scripts/state/api/feeds/fetchUserActivity.ts | 5 +---- packages/commonwealth/main.ts | 2 -- packages/commonwealth/server/api/threads.ts | 4 ++-- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts b/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts index d1cfd6cf701..6863416f830 100644 --- a/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts +++ b/packages/commonwealth/client/scripts/state/api/feeds/fetchUserActivity.ts @@ -6,10 +6,7 @@ const GLOBAL_ACTIVITY_STALE_TIME = 5 * 60 * 1_000; // 5 minutes (backend caches export const useFetchGlobalActivityQuery = () => { return trpc.feed.getGlobalActivity.useQuery( - { - thread_limit: 50, - comment_limit: 3, - }, + {}, { staleTime: GLOBAL_ACTIVITY_STALE_TIME, cacheTime: USER_ACTIVITY_CACHE_TIME, diff --git a/packages/commonwealth/main.ts b/packages/commonwealth/main.ts index 5bad18566d8..448b6e72358 100644 --- a/packages/commonwealth/main.ts +++ b/packages/commonwealth/main.ts @@ -40,12 +40,10 @@ export async function main( db: DB, { port, - noGlobalActivityCache = true, withLoggingMiddleware = false, withPrerender = false, }: { port: number; - noGlobalActivityCache?: boolean; withLoggingMiddleware?: boolean; withPrerender?: boolean; }, diff --git a/packages/commonwealth/server/api/threads.ts b/packages/commonwealth/server/api/threads.ts index 42fe481a1f7..cee71742a6a 100644 --- a/packages/commonwealth/server/api/threads.ts +++ b/packages/commonwealth/server/api/threads.ts @@ -42,9 +42,9 @@ export const trpcRouter = trpc.router({ // TODO: Generalize output middleware to cover (analytics, gac invalidation, canvas, etc) void cache().deleteKey( CacheNamespaces.Query_Response, - 'GetGlobalActivity', + 'GetGlobalActivity_{}', // this is the global activity cache key ); - return undefined; + return Promise.resolve(undefined); }, applyCanvasSignedDataMiddleware, ), From 86c602d374438440032b533750091aa372f97a01 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Tue, 15 Oct 2024 16:35:56 -0400 Subject: [PATCH 159/425] fix lint errors --- packages/commonwealth/server.ts | 1 - packages/commonwealth/server/api/external-router.ts | 2 +- packages/commonwealth/server/api/feed.ts | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/server.ts b/packages/commonwealth/server.ts index 48cc9edb8ad..0704f3ed3d7 100644 --- a/packages/commonwealth/server.ts +++ b/packages/commonwealth/server.ts @@ -76,7 +76,6 @@ const start = async () => { main(app, models, { port: config.PORT, - noGlobalActivityCache: config.NO_GLOBAL_ACTIVITY_CACHE, withLoggingMiddleware: true, withPrerender: config.APP_ENV === 'production' && !config.NO_PRERENDER, }) diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 7d07060ccee..742475cc0da 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -38,7 +38,7 @@ const { getNewContent } = user.trpcRouter; const api = { getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User, { forceSecure: true, - ttlSecs: 60 * 5, + ttlSecs: config.NO_GLOBAL_ACTIVITY_CACHE ? undefined : 60 * 5, }), getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User, { forceSecure: true, diff --git a/packages/commonwealth/server/api/feed.ts b/packages/commonwealth/server/api/feed.ts index aa14140eafa..b5a9d49a66b 100644 --- a/packages/commonwealth/server/api/feed.ts +++ b/packages/commonwealth/server/api/feed.ts @@ -1,9 +1,10 @@ import { trpc } from '@hicommonwealth/adapters'; import { Feed } from '@hicommonwealth/model'; +import { config } from '../../server/config'; export const trpcRouter = trpc.router({ getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User, { - ttlSecs: 60 * 5, + ttlSecs: config.NO_GLOBAL_ACTIVITY_CACHE ? undefined : 60 * 5, }), getUserActivity: trpc.query(Feed.GetUserActivity, trpc.Tag.User), }); From f9fca18a425a56f5f88a6d46cc064148b9cd574e Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Tue, 15 Oct 2024 13:41:48 -0700 Subject: [PATCH 160/425] Tell knock about the timezone... --- .../KnockNotifications/KnockNotifications.tsx | 28 +++- packages/commonwealth/package.json | 1 + pnpm-lock.yaml | 130 ++++++++---------- 3 files changed, 86 insertions(+), 73 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx b/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx index a8fd724ad34..941322ec298 100644 --- a/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx +++ b/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx @@ -1,3 +1,4 @@ +import Knock from '@knocklabs/client'; import { KnockFeedProvider, KnockProvider, @@ -5,7 +6,7 @@ import { NotificationIconButton, } from '@knocklabs/react'; import '@knocklabs/react-notification-feed/dist/index.css'; -import React, { useRef, useState } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import useUserStore from 'state/ui/user'; import './KnockNotifications.scss'; @@ -16,12 +17,37 @@ const KNOCK_PUBLIC_API_KEY = const KNOCK_IN_APP_FEED_ID = process.env.KNOCK_IN_APP_FEED_ID || 'fc6e68e5-b7b9-49c1-8fab-6dd7e3510ffb'; +const knock = new Knock(KNOCK_PUBLIC_API_KEY); + +const getBrowserTimezone = (): string => { + return Intl.DateTimeFormat().resolvedOptions().timeZone; +}; + export const KnockNotifications = () => { const user = useUserStore(); const [isVisible, setIsVisible] = useState(false); const notifButtonRef = useRef(null); + useEffect(() => { + if (!user.id) { + return; + } + + const timezone = getBrowserTimezone(); + async function doAsync() { + knock.authenticate(`${user.id}`, user.knockJWT); + + await knock.user.identify({ + id: user.id, + email: user.email, + timezone, + }); + } + + doAsync().catch(console.error); + }, [user.email, user.id, user.knockJWT]); + if (user.id === 0) { return null; } diff --git a/packages/commonwealth/package.json b/packages/commonwealth/package.json index fc1aa9cceb5..d46ed58cb68 100644 --- a/packages/commonwealth/package.json +++ b/packages/commonwealth/package.json @@ -116,6 +116,7 @@ "@keplr-wallet/types": "^0.12.23", "@keplr-wallet/unit": "^0.12.23", "@knocklabs/node": "^0.6.13", + "@knocklabs/client": "^0.10.13", "@knocklabs/react": "^0.2.15", "@knocklabs/react-notification-feed": "^0.8.15", "@lexical/rich-text": "^0.17.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 939120b7137..9d750816a5d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -904,6 +904,9 @@ importers: '@keplr-wallet/unit': specifier: ^0.12.23 version: 0.12.86 + '@knocklabs/client': + specifier: ^0.10.13 + version: 0.10.13(react@18.3.1) '@knocklabs/node': specifier: ^0.6.13 version: 0.6.13 @@ -2700,14 +2703,6 @@ packages: resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.25.0': - resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} - engines: {node: '>=6.9.0'} - - '@babel/runtime@7.25.6': - resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.25.7': resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} engines: {node: '>=6.9.0'} @@ -3876,8 +3871,8 @@ packages: '@keplr-wallet/unit@0.12.86': resolution: {integrity: sha512-0csxBbrxHbAJsjn5VQgyTMViVi0FF/wkIWAFvyhagagP+o/vkIM8oWRHXnHy2tJLyDboSsww83kiOPV5PiHbJw==} - '@knocklabs/client@0.10.6': - resolution: {integrity: sha512-LrlBKPuOOLHCi4crPlfLsw1mBhciOlt3DzAv86XQiwhpvj0r2tdz+elLcGII0n/SSWv1CGw3+NR3gYlui++pJw==} + '@knocklabs/client@0.10.13': + resolution: {integrity: sha512-h57WEYk/c0xUdFDWSVMbb/nJQ+ehstE8OtZcxb33autPbyzz4Fr6SIO/Zgw/nzw//EA/W33dYiHiChPWvIQH8A==} '@knocklabs/client@0.8.21': resolution: {integrity: sha512-uPaUAwbg9Bi0UIPIYOE4v4GiasKezZNQ/ge9KST2wlSHAfpKWrHf7s85H4mD7IGkVc0xkokF4RZ4lqr7cy48wg==} @@ -3903,8 +3898,8 @@ packages: react: ^16.11.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.11.0 || ^17.0.0 || ^18.0.0 - '@knocklabs/types@0.1.3': - resolution: {integrity: sha512-8WnEqvcR7ZWPccI/gHdE3mFRWVcbS//QRIRLkcjet0YGX2MROb+ddJ6N9tmZtsz7HcwzU23QE/kgsc2ErnGGfQ==} + '@knocklabs/types@0.1.4': + resolution: {integrity: sha512-KdEESYtIYDaBy9CTNKco7MJ+PcX9wfWt3WVNBKHrrARX++Fa/gn1Zn8WQ5K39hckXm/c2AL6WhNjGv6ovkxwFw==} '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -17977,14 +17972,6 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.25.0': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/runtime@7.25.6': - dependencies: - regenerator-runtime: 0.14.1 - '@babel/runtime@7.25.7': dependencies: regenerator-runtime: 0.14.1 @@ -18955,7 +18942,7 @@ snapshots: '@emotion/babel-plugin@11.11.0': dependencies: '@babel/helper-module-imports': 7.24.3 - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.4 @@ -18984,7 +18971,7 @@ snapshots: '@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.4 @@ -20016,12 +20003,12 @@ snapshots: big-integer: 1.6.52 utility-types: 3.11.0 - '@knocklabs/client@0.10.6(react@18.3.1)': + '@knocklabs/client@0.10.13(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@knocklabs/types': 0.1.3 + '@babel/runtime': 7.25.7 + '@knocklabs/types': 0.1.4 '@types/phoenix': 1.6.4 - axios: 1.6.8 + axios: 1.7.5 axios-retry: 3.9.1 eventemitter2: 6.4.9 jwt-decode: 4.0.0 @@ -20033,8 +20020,8 @@ snapshots: '@knocklabs/client@0.8.21(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - axios: 1.6.8 + '@babel/runtime': 7.25.7 + axios: 1.7.5 axios-retry: 3.9.1 eventemitter2: 6.4.9 jwt-decode: 4.0.0 @@ -20050,7 +20037,7 @@ snapshots: '@knocklabs/react-core@0.2.15(react@18.3.1)': dependencies: - '@knocklabs/client': 0.10.6(react@18.3.1) + '@knocklabs/client': 0.10.13(react@18.3.1) date-fns: 3.6.0 react: 18.3.1 swr: 2.2.5(react@18.3.1) @@ -20074,7 +20061,7 @@ snapshots: '@knocklabs/react@0.2.17(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@knocklabs/client': 0.10.6(react@18.3.1) + '@knocklabs/client': 0.10.13(react@18.3.1) '@knocklabs/react-core': 0.2.15(react@18.3.1) '@popperjs/core': 2.11.8 '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -20089,7 +20076,7 @@ snapshots: - '@types/react-dom' - debug - '@knocklabs/types@0.1.3': {} + '@knocklabs/types@0.1.4': {} '@leichtgewicht/ip-codec@2.0.5': {} @@ -21037,7 +21024,7 @@ snapshots: '@mui/utils@5.15.14(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 '@types/prop-types': 15.7.12 prop-types: 15.8.1 react: 18.3.1 @@ -21352,7 +21339,7 @@ snapshots: '@polkadot/extension-inject@0.40.4(@polkadot/api@6.0.5)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 '@polkadot/api': 6.0.5 '@polkadot/extension-inject@0.46.9(@polkadot/api@6.0.5)(@polkadot/util@12.6.2)(bufferutil@4.0.8)(utf-8-validate@5.0.10)': @@ -21779,13 +21766,13 @@ snapshots: '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/primitive@1.1.0': {} '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -21816,7 +21803,7 @@ snapshots: '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -21829,7 +21816,7 @@ snapshots: '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -21870,7 +21857,7 @@ snapshots: '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -21897,7 +21884,7 @@ snapshots: '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -21910,7 +21897,7 @@ snapshots: '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -21937,7 +21924,7 @@ snapshots: '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -21952,7 +21939,7 @@ snapshots: '@radix-ui/react-popover@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -21976,7 +21963,7 @@ snapshots: '@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -22013,7 +22000,7 @@ snapshots: '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -22033,7 +22020,7 @@ snapshots: '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 @@ -22054,7 +22041,7 @@ snapshots: '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -22128,7 +22115,7 @@ snapshots: '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -22204,7 +22191,7 @@ snapshots: '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -22217,7 +22204,7 @@ snapshots: '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -22232,7 +22219,7 @@ snapshots: '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -22247,7 +22234,7 @@ snapshots: '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -22266,7 +22253,7 @@ snapshots: '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/rect': 1.0.1 react: 18.3.1 optionalDependencies: @@ -22281,7 +22268,7 @@ snapshots: '@radix-ui/react-use-size@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -22296,7 +22283,7 @@ snapshots: '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -22315,7 +22302,7 @@ snapshots: '@radix-ui/rect@1.0.1': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 '@radix-ui/rect@1.1.0': {} @@ -23658,7 +23645,7 @@ snapshots: '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.7 '@noble/curves': 1.5.0 '@noble/hashes': 1.4.0 '@solana/buffer-layout': 4.0.1 @@ -26013,7 +26000,7 @@ snapshots: axios-retry@3.9.1: dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 is-retry-allowed: 2.2.0 axios@0.21.4: @@ -26040,11 +26027,10 @@ snapshots: axios@1.7.5: dependencies: follow-redirects: 1.15.6 - form-data: 4.0.0 + form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - optional: true babel-core@7.0.0-bridge.0(@babel/core@7.24.5): dependencies: @@ -26052,7 +26038,7 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 cosmiconfig: 7.1.0 resolve: 1.22.8 @@ -27130,7 +27116,7 @@ snapshots: date-fns@2.30.0: dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 date-fns@3.6.0: {} @@ -27380,7 +27366,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 csstype: 3.1.3 dom-serializer@0.1.1: @@ -27445,7 +27431,7 @@ snapshots: downshift@7.6.2(react@18.3.1): dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 compute-scroll-into-view: 2.0.4 prop-types: 15.8.1 react: 18.3.1 @@ -29178,15 +29164,15 @@ snapshots: i18next-browser-languagedetector@7.1.0: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 i18next@22.5.1: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 i18next@23.11.5: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 iconv-lite@0.4.24: dependencies: @@ -30792,7 +30778,7 @@ snapshots: metro-runtime@0.80.10: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.25.7 flow-enums-runtime: 0.0.6 metro-runtime@0.80.12: @@ -33031,7 +33017,7 @@ snapshots: react-popper-tooltip@4.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 '@popperjs/core': 2.11.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -33055,7 +33041,7 @@ snapshots: react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react-native@0.75.1(@babel/core@7.25.7)(@babel/preset-env@7.25.3(@babel/core@7.25.7))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 '@types/react-redux': 7.1.33 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -33143,7 +33129,7 @@ snapshots: react-textarea-autosize@8.5.3(@types/react@18.3.3)(react@18.3.1): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 react: 18.3.1 use-composed-ref: 1.3.0(react@18.3.1) use-latest: 1.2.1(@types/react@18.3.3)(react@18.3.1) @@ -33158,7 +33144,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -33269,7 +33255,7 @@ snapshots: redux@4.2.1: dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.25.7 reflect.getprototypeof@1.0.6: dependencies: From 1ad0b6587a62d8f47bd093c1c80647d5fde264ce Mon Sep 17 00:00:00 2001 From: Marcin Date: Wed, 16 Oct 2024 09:31:58 +0200 Subject: [PATCH 161/425] Add namespace handling to topic flow and update WVMethodSelection logic. --- .../CommunityManagement/Topics/Topics.tsx | 38 ++++++++++++++++++- .../WVMethodSelection/WVMethodSelection.tsx | 17 ++++++--- .../pages/CommunityManagement/Topics/utils.ts | 1 + .../CommunityStakeStep/CommunityStakeStep.tsx | 10 ++++- 4 files changed, 59 insertions(+), 7 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/Topics.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/Topics.tsx index 573b51d34c5..329344a53dd 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/Topics.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/Topics.tsx @@ -6,6 +6,7 @@ import CWFormSteps from 'views/components/component_kit/new_designs/CWFormSteps' import CWPageLayout from 'views/components/component_kit/new_designs/CWPageLayout'; import StakeIntegration from 'views/pages/CommunityManagement/StakeIntegration'; +import CommunityStakeStep from '../../CreateCommunity/steps/CommunityStakeStep'; import TopicDetails from './TopicDetails'; import WVConsent from './WVConsent'; import WVERC20Details from './WVERC20Details'; @@ -14,7 +15,9 @@ import { CreateTopicStep, getCreateTopicSteps } from './utils'; import { notifyError } from 'controllers/app/notifications'; import { useCommonNavigate } from 'navigation/helpers'; +import { useGetCommunityByIdQuery } from 'state/api/communities'; import { useCreateTopicMutation } from 'state/api/topics'; +import useUserStore from 'state/ui/user'; import './Topics.scss'; @@ -52,6 +55,19 @@ export const Topics = () => { const navigate = useCommonNavigate(); const { mutateAsync: createTopic } = useCreateTopicMutation(); + const { data: community } = useGetCommunityByIdQuery({ + id: app.activeChainId() || '', + includeNodeInfo: true, + }); + + const user = useUserStore(); + + const selectedAddress = user.addresses.find( + (x) => + x.address === user.activeAccount?.address && + x.community?.id === community?.id, + ); + const handleSetTopicFormData = (data: Partial) => { setTopicFormData((prevState) => ({ ...prevState, ...data })); }; @@ -113,7 +129,27 @@ export const Topics = () => { /> ); case CreateTopicStep.WVMethodSelection: - return ; + return ( + + ); + case CreateTopicStep.WVNamespaceEnablement: + return ( + + setCreateCommunityStep(CreateTopicStep.WVERC20Details) + } + createdCommunityName={community?.name} + createdCommunityId={community?.id || ''} + onTopicFlowStepChange={setCreateCommunityStep} + selectedAddress={selectedAddress!} + chainId={String(community?.ChainNode?.eth_chain_id)} + onlyNamespace + isTopicFlow + /> + ); case CreateTopicStep.WVERC20Details: return ( void; + hasNamespace: boolean; } enum WVMethod { @@ -22,18 +23,24 @@ enum WVMethod { Stake = 'Stake', } -const WVMethodSelection = ({ onStepChange }: WVMethodSelectionProps) => { +const WVMethodSelection = ({ + onStepChange, + hasNamespace, +}: WVMethodSelectionProps) => { const [selectedWVMethod, setSelectedWVMethod] = useState( null, ); const handleContinue = () => { - if (selectedWVMethod === WVMethod.ERC20) { - onStepChange(CreateTopicStep.WVERC20Details); - return; + if (selectedWVMethod === WVMethod.Stake) { + return onStepChange(CreateTopicStep.WVStake); } - onStepChange(CreateTopicStep.WVStake); + onStepChange( + hasNamespace + ? CreateTopicStep.WVERC20Details + : CreateTopicStep.WVNamespaceEnablement, + ); }; const canEnableStake = chainIdsWithStakeEnabled.includes( diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/utils.ts b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/utils.ts index c07776a9e5e..f9d49f9f54b 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/utils.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/utils.ts @@ -4,6 +4,7 @@ export enum CreateTopicStep { TopicDetails = 'TopicDetails', WVMethodSelection = 'WVMethodSelection', WVConsent = 'WVConsent', + WVNamespaceEnablement = 'WVNamespaceEnablement', WVERC20Details = 'WVERC20Details', WVStake = 'WVStake', } diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx index 20bcbf2088b..fb8f670bf9c 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx @@ -53,7 +53,15 @@ const CommunityStakeStep = ({ }; const onSuccessSignTransactions = () => { - isTopicFlow ? refetchStakeQuery?.() : goToSuccessStep(); + if (isTopicFlow) { + if (onlyNamespace) { + return goToSuccessStep(); + } else { + return refetchStakeQuery?.(); + } + } + + goToSuccessStep(); }; const onCancelSignTransactions = () => { From a9da4f99d5d6dbc2fe24c9f3d3dab6b78d93452c Mon Sep 17 00:00:00 2001 From: Marcin Date: Wed, 16 Oct 2024 10:02:17 +0200 Subject: [PATCH 162/425] 9552 Update FeatureHint based on weightedTopicsEnabled flag. --- .../CommunityInformationStep.tsx | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityInformationStep/CommunityInformationStep.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityInformationStep/CommunityInformationStep.tsx index e2f4090eb8e..c8d2b5b8874 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityInformationStep/CommunityInformationStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityInformationStep/CommunityInformationStep.tsx @@ -1,6 +1,7 @@ import { notifyError } from 'controllers/app/notifications'; import useAppStatus from 'hooks/useAppStatus'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; +import { useFlag } from 'hooks/useFlag'; import React from 'react'; import { BaseMixpanelPayload, @@ -34,6 +35,7 @@ const CommunityInformationStep = ({ handleSelectedChainId, }: CommunityInformationStepProps) => { const { isAddedToHomeScreen } = useAppStatus(); + const weightedTopicsEnabled = useFlag('weightedTopics'); const { trackAnalytics } = useBrowserAnalyticsTrack< MixpanelLoginPayload | BaseMixpanelPayload @@ -109,9 +111,22 @@ const CommunityInformationStep = ({ Date: Wed, 16 Oct 2024 15:24:38 +0500 Subject: [PATCH 163/425] Fix migration --- ...d-topic_id-for-each-group_id-in-GroupPermissions.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/server/migrations/20241015145424-add-topic_id-for-each-group_id-in-GroupPermissions.js b/packages/commonwealth/server/migrations/20241015145424-add-topic_id-for-each-group_id-in-GroupPermissions.js index 1ce2fbb5bff..84591ed65a0 100644 --- a/packages/commonwealth/server/migrations/20241015145424-add-topic_id-for-each-group_id-in-GroupPermissions.js +++ b/packages/commonwealth/server/migrations/20241015145424-add-topic_id-for-each-group_id-in-GroupPermissions.js @@ -3,6 +3,12 @@ module.exports = { up: async (queryInterface, Sequelize) => { return queryInterface.sequelize.transaction(async (t) => { + await queryInterface.removeConstraint( + 'GroupPermissions', + 'GroupPermissions_pkey', + { transaction: t }, + ); + await queryInterface.removeConstraint( 'GroupPermissions', 'GroupPermissions_group_id_fkey', @@ -38,9 +44,9 @@ module.exports = { ); await queryInterface.addConstraint('GroupPermissions', { - type: 'unique', + type: 'primary key', fields: ['group_id', 'topic_id'], - name: 'GroupPermissions_unique_composite_constraint', + name: 'GroupPermissions_pkey', transaction: t, }); }); From 08ee28f1c420613a160cde8f49e1517db7f7fb0c Mon Sep 17 00:00:00 2001 From: Marcin Date: Wed, 16 Oct 2024 13:48:25 +0200 Subject: [PATCH 164/425] Refactor: Replace chainId with nodeEthChainId. Fix token finder --- .../state/api/tokens/getTokenMetadata.ts | 20 ++++++++++--------- .../components/TokenFinder/useTokenFinder.ts | 6 +++--- .../FundContestDrawer/useFundContestForm.ts | 2 +- .../Contests/ManageContest/ManageContest.tsx | 4 ++-- .../steps/DetailsFormStep/DetailsFormStep.tsx | 3 +-- .../Topics/WVERC20Details/WVERC20Details.tsx | 16 +++++++-------- .../pages/discussions/DiscussionsPage.tsx | 4 +--- 7 files changed, 26 insertions(+), 29 deletions(-) diff --git a/packages/commonwealth/client/scripts/state/api/tokens/getTokenMetadata.ts b/packages/commonwealth/client/scripts/state/api/tokens/getTokenMetadata.ts index e2dd2f44b81..879135472a5 100644 --- a/packages/commonwealth/client/scripts/state/api/tokens/getTokenMetadata.ts +++ b/packages/commonwealth/client/scripts/state/api/tokens/getTokenMetadata.ts @@ -4,7 +4,7 @@ import { fetchCachedNodes } from 'state/api/nodes'; interface UseTokenMetadataQueryProps { tokenId: string; - chainId: number; + nodeEthChainId: number; apiEnabled?: boolean; } @@ -17,15 +17,17 @@ export type GetTokenMetadataResponse = { const getTokenMetadata = async ({ tokenId, - chainId, + nodeEthChainId, }: UseTokenMetadataQueryProps): Promise => { - const ethereumNode = fetchCachedNodes()?.find((n) => n?.id === chainId); + const node = fetchCachedNodes()?.find( + (n) => n?.ethChainId === nodeEthChainId, + ); - if (!ethereumNode) { - throw new Error('Ethereum node not found'); + if (!node) { + throw new Error('Node not found'); } - const response = await axios.post(ethereumNode.url, { + const response = await axios.post(node.url, { params: [tokenId], method: 'alchemy_getTokenMetadata', }); @@ -35,12 +37,12 @@ const getTokenMetadata = async ({ const useTokenMetadataQuery = ({ tokenId, - chainId, + nodeEthChainId, apiEnabled = true, }: UseTokenMetadataQueryProps) => { return useQuery({ - queryKey: [tokenId, chainId], - queryFn: () => getTokenMetadata({ tokenId, chainId }), + queryKey: [tokenId, nodeEthChainId], + queryFn: () => getTokenMetadata({ tokenId, nodeEthChainId }), enabled: !!tokenId && apiEnabled, retry: false, }); diff --git a/packages/commonwealth/client/scripts/views/components/TokenFinder/useTokenFinder.ts b/packages/commonwealth/client/scripts/views/components/TokenFinder/useTokenFinder.ts index 06b93b06d07..42aa9cf029f 100644 --- a/packages/commonwealth/client/scripts/views/components/TokenFinder/useTokenFinder.ts +++ b/packages/commonwealth/client/scripts/views/components/TokenFinder/useTokenFinder.ts @@ -3,17 +3,17 @@ import { useTokenMetadataQuery } from 'state/api/tokens'; import { useDebounce } from 'usehooks-ts'; type UseTokenFinderProps = { - chainId: number; + nodeEthChainId: number; }; -const useTokenFinder = ({ chainId }: UseTokenFinderProps) => { +const useTokenFinder = ({ nodeEthChainId }: UseTokenFinderProps) => { const [tokenValue, setTokenValue] = useState(''); const debouncedTokenValue = useDebounce(tokenValue, 500); const { data: tokenMetadata, isLoading: tokenMetadataLoading } = useTokenMetadataQuery({ tokenId: debouncedTokenValue, - chainId, + nodeEthChainId, }); const getTokenError = () => { diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts index d89e355ee10..36086376b58 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts @@ -31,7 +31,7 @@ const useFundContestForm = ({ }: UseFundContestFormProps) => { const [tokenAmount, setTokenAmount] = useState(INITIAL_AMOUNT); const { data: tokenMetadata } = useTokenMetadataQuery({ - chainId: chainNodeId, + nodeEthChainId: ethChainId, tokenId: fundingTokenAddress || '', }); const { data: tokenUsdRateData } = useFetchTokenUsdRateQuery({ diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/ManageContest.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/ManageContest.tsx index 98d2a6e8e16..d8bbf8ef885 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/ManageContest.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/ManageContest.tsx @@ -37,10 +37,10 @@ const ManageContest = ({ contestAddress }: ManageContestProps) => { contestAddress, }); - const chainId = app.chain.meta.ChainNode?.id || 0; + const nodeEthChainId = app.chain.meta.ChainNode?.eth_chain_id || 0; const { data: tokenMetadata } = useTokenMetadataQuery({ tokenId: contestFormData?.fundingTokenAddress || '', - chainId, + nodeEthChainId, apiEnabled: !!contestFormData?.fundingTokenAddress, }); diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx index df11a0a264e..92604be93a9 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx @@ -97,7 +97,6 @@ const DetailsFormStep = ({ const { mutateAsync: updateContest } = useUpdateContestMutation(); - const chainId = app.chain.meta.ChainNode?.id || 0; const { tokenValue, setTokenValue, @@ -106,7 +105,7 @@ const DetailsFormStep = ({ tokenMetadata, tokenMetadataLoading, } = useTokenFinder({ - chainId: chainId, + nodeEthChainId: app.chain.meta.ChainNode?.eth_chain_id || 0, }); const communityId = app.activeChainId() || ''; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVERC20Details/WVERC20Details.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVERC20Details/WVERC20Details.tsx index 2c3bc91c284..ab4e65a17a5 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVERC20Details/WVERC20Details.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVERC20Details/WVERC20Details.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; -import { commonProtocol } from '@hicommonwealth/shared'; +import app from 'state'; import { alphabeticallySortedChains } from 'views/components/CommunityInformationForm/constants'; import { CWDivider } from 'views/components/component_kit/cw_divider'; import { CWText } from 'views/components/component_kit/cw_text'; @@ -16,8 +16,6 @@ import TokenFinder, { useTokenFinder } from 'views/components/TokenFinder'; import { HandleCreateTopicProps } from 'views/pages/CommunityManagement/Topics/Topics'; import './WVERC20Details.scss'; -const ETH_CHAIN_NODE_ID = 37; - interface WVConsentProps { onStepChange: (step: CreateTopicStep) => void; onCreateTopic: (props: HandleCreateTopicProps) => Promise; @@ -25,8 +23,9 @@ interface WVConsentProps { const WVERC20Details = ({ onStepChange, onCreateTopic }: WVConsentProps) => { const options = alphabeticallySortedChains.filter((c) => c.hasStakeEnabled); + const defaultChain = options.find( - (o) => o.value === commonProtocol.ValidChains.Base, + (o) => o.value === app.chain.meta.ChainNode?.eth_chain_id, ); const [selectedChain, setSelectedChain] = useState(defaultChain); @@ -39,7 +38,7 @@ const WVERC20Details = ({ onStepChange, onCreateTopic }: WVConsentProps) => { tokenMetadataLoading, tokenValue, } = useTokenFinder({ - chainId: ETH_CHAIN_NODE_ID, + nodeEthChainId: app.chain.meta.ChainNode?.eth_chain_id || 0, }); const editMode = false; @@ -72,13 +71,12 @@ const WVERC20Details = ({ onStepChange, onCreateTopic }: WVConsentProps) => { Connect ERC20 token - Supported chains + Your community chain - The following are the pre-selected chain(s) all token features will be - interacting with. + All token features will be interacting with following chain. { const { data: tokenMetadata } = useTokenMetadataQuery({ tokenId: topicObj?.tokenAddress || '', - chainId: ETH_CHAIN_NODE_ID, + nodeEthChainId: app?.chain.meta?.ChainNode?.eth_chain_id || 0, }); const { fetchNextPage, data, isInitialLoading, hasNextPage } = From 6d2b7806355542d57bbe25dccec82a94f911a4f5 Mon Sep 17 00:00:00 2001 From: Marcin Date: Wed, 16 Oct 2024 14:53:07 +0200 Subject: [PATCH 165/425] Update popover content for ERC20 and Stake options with detailed descriptions. --- .../WVMethodSelection/WVMethodSelection.tsx | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVMethodSelection/WVMethodSelection.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVMethodSelection/WVMethodSelection.tsx index 61e2a1b19a0..ce9723cf6e2 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVMethodSelection/WVMethodSelection.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVMethodSelection/WVMethodSelection.tsx @@ -66,7 +66,16 @@ const WVMethodSelection = ({ onSelect={setSelectedWVMethod} label="Connect ERC20 token" description="Only ERC20s" - popover={{ title: 'Example', body: <>lorem ipsum }} + popover={{ + title: 'ERC20', + body: ( + + Use any ERC 20 token that is on the same chain as your + community. ERC20s can be used for weighted voting and running + contests + + ), + }} isSelected={selectedWVMethod === WVMethod.ERC20} /> @@ -77,7 +86,16 @@ const WVMethodSelection = ({ description="Use non-transferable tokens" popover={ canEnableStake - ? { title: 'Example', body: <>lorem ipsum } + ? { + title: 'Stake', + body: ( + + Community Stake lets you buy a stake in your community + using a fungible non transferable token. This token can + be used for weighted voting and running contests + + ), + } : { title: 'Disabled', body: 'Stake is not supported on your network', From 250b9f2cf6051561dd6ea9e8c18842e44b1f9bde Mon Sep 17 00:00:00 2001 From: Marcin Date: Wed, 16 Oct 2024 15:58:01 +0200 Subject: [PATCH 166/425] Update descriptions to specify 'onchain' features and clarify chain selection. --- .../Topics/WVERC20Details/WVERC20Details.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVERC20Details/WVERC20Details.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVERC20Details/WVERC20Details.tsx index ab4e65a17a5..2115e354156 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVERC20Details/WVERC20Details.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/WVERC20Details/WVERC20Details.tsx @@ -73,7 +73,8 @@ const WVERC20Details = ({ onStepChange, onCreateTopic }: WVConsentProps) => { Your community chain - All token features will be interacting with following chain. + All onchain features will be interacting with the following chain. Chain + selection is only available when the community is created { Primary token - Any token features such as voting or tipping require your community to + Any onchain features such as voting or tipping require your community to connect a primary token. Date: Wed, 16 Oct 2024 16:01:29 +0200 Subject: [PATCH 167/425] Remove useFlag import and weightedTopicsEnabled; refactor handleOptInEnablingStake. --- .../steps/CommunityStakeStep/CommunityStakeStep.tsx | 7 +++++-- .../views/pages/CreateCommunity/useCreateCommunity.ts | 3 --- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx index fb8f670bf9c..57df3c13408 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityStakeStep/CommunityStakeStep.tsx @@ -41,8 +41,11 @@ const CommunityStakeStep = ({ symbol: symbol || (createdCommunityName || '').toUpperCase().slice(0, 4), }); - const handleOptInEnablingStake = ({ namespace, symbol }) => { - setCommunityStakeData({ namespace, symbol }); + const handleOptInEnablingStake = (stakeData: { + namespace: string; + symbol: string; + }) => { + setCommunityStakeData(stakeData); setEnableStakePage(false); }; diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/useCreateCommunity.ts b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/useCreateCommunity.ts index f0856743fd7..1f4120681b4 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/useCreateCommunity.ts +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/useCreateCommunity.ts @@ -1,4 +1,3 @@ -import { useFlag } from 'hooks/useFlag'; import AddressInfo from 'models/AddressInfo'; import { useState } from 'react'; import { chainIdsWithStakeEnabled } from 'views/components/CommunityInformationForm/constants'; @@ -13,8 +12,6 @@ const useCreateCommunity = () => { { type: null, chainBase: null }, ); - const weightedTopicsEnabled = useFlag('weightedTopics'); - // @ts-expect-error StrictNullChecks const [selectedAddress, setSelectedAddress] = useState(null); const [selectedChainId, setSelectedChainId] = useState(null); From d6809c7b4b4e1f4131c8ee05ec758f76a0dc244a Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Wed, 16 Oct 2024 10:34:27 -0700 Subject: [PATCH 168/425] remove topic chain node --- libs/model/src/models/associations.ts | 3 +-- libs/model/src/models/topic.ts | 11 ---------- libs/model/src/services/stakeHelper.ts | 14 +++++-------- .../20241016173039-remove-topic-chain-node.js | 20 +++++++++++++++++++ 4 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 packages/commonwealth/server/migrations/20241016173039-remove-topic-chain-node.js diff --git a/libs/model/src/models/associations.ts b/libs/model/src/models/associations.ts index 0ef84150c9f..6807b32f7d5 100644 --- a/libs/model/src/models/associations.ts +++ b/libs/model/src/models/associations.ts @@ -34,8 +34,7 @@ export const buildAssociations = (db: DB) => { db.ChainNode.withMany(db.Community) .withMany(db.EvmEventSource) - .withOne(db.LastProcessedEvmBlock) - .withMany(db.Topic); + .withOne(db.LastProcessedEvmBlock); db.ContractAbi.withMany(db.EvmEventSource, { foreignKey: 'abi_id' }); diff --git a/libs/model/src/models/topic.ts b/libs/model/src/models/topic.ts index 0969f8988f1..4ff1ce7b49d 100644 --- a/libs/model/src/models/topic.ts +++ b/libs/model/src/models/topic.ts @@ -1,7 +1,6 @@ import { Topic } from '@hicommonwealth/schemas'; import Sequelize from 'sequelize'; import { z } from 'zod'; -import { ChainNodeAttributes } from './chain_node'; import type { CommunityAttributes } from './community'; import type { ThreadAttributes } from './thread'; import type { ModelInstance } from './types'; @@ -10,7 +9,6 @@ export type TopicAttributes = z.infer & { // associations community?: CommunityAttributes; threads?: ThreadAttributes[] | TopicAttributes['id'][]; - ChainNode?: ChainNodeAttributes; }; export type TopicInstance = ModelInstance; @@ -50,15 +48,6 @@ export default ( }, telegram: { type: Sequelize.STRING, allowNull: true }, weighted_voting: { type: Sequelize.STRING, allowNull: true }, - chain_node_id: { - type: Sequelize.INTEGER, - allowNull: true, - references: { - model: 'ChainNodes', - key: 'id', - }, - onUpdate: 'CASCADE', - }, token_address: { type: Sequelize.STRING, allowNull: true }, token_symbol: { type: Sequelize.STRING, allowNull: true }, vote_weight_multiplier: { type: Sequelize.INTEGER, allowNull: true }, diff --git a/libs/model/src/services/stakeHelper.ts b/libs/model/src/services/stakeHelper.ts index 313d979b789..240fa46cbf0 100644 --- a/libs/model/src/services/stakeHelper.ts +++ b/libs/model/src/services/stakeHelper.ts @@ -48,15 +48,15 @@ export async function getVotingWeight( mustExist('Topic', topic); const { community } = topic; - mustExist('Community', community); + const chain_node = community.ChainNode; + mustExist('Chain Node Eth Chain Id', chain_node?.eth_chain_id); + if (topic.weighted_voting === TopicWeightedVoting.Stake) { mustExist('Community Namespace Address', community.namespace_address); const stake = topic.community?.CommunityStakes?.at(0); mustExist('Community Stake', stake); - const chain_node = community.ChainNode; - mustExist('Chain Node Eth Chain Id', chain_node?.eth_chain_id); const stakeBalances = await contractHelpers.getNamespaceBalance( community.namespace_address, @@ -70,18 +70,14 @@ export async function getVotingWeight( return commonProtocol.calculateVoteWeight(stakeBalance, stake.vote_weight); } else if (topic.weighted_voting === TopicWeightedVoting.ERC20) { - const { - ChainNode: chain_node, - token_address, - vote_weight_multiplier, - } = topic; + const { token_address, vote_weight_multiplier } = topic; mustExist('Topic Chain Node Eth Chain Id', chain_node?.eth_chain_id); const balances = await tokenBalanceCache.getBalances({ balanceSourceType: BalanceSourceType.ERC20, addresses: [address], sourceOptions: { - evmChainId: chain_node?.eth_chain_id, + evmChainId: chain_node.eth_chain_id, contractAddress: token_address!, }, cacheRefresh: true, diff --git a/packages/commonwealth/server/migrations/20241016173039-remove-topic-chain-node.js b/packages/commonwealth/server/migrations/20241016173039-remove-topic-chain-node.js new file mode 100644 index 00000000000..89dfeeb1cb2 --- /dev/null +++ b/packages/commonwealth/server/migrations/20241016173039-remove-topic-chain-node.js @@ -0,0 +1,20 @@ +'use strict'; + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.removeColumn('Topics', 'chain_node_id'); + }, + + async down(queryInterface, Sequelize) { + await queryInterface.addColumn('Topics', 'chain_node_id', { + type: Sequelize.INTEGER, + allowNull: true, + references: { + model: 'ChainNodes', + key: 'id', + }, + onUpdate: 'CASCADE', + }); + }, +}; From 732e44f78144e5836fe5616d33d84abe97afe21e Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Wed, 16 Oct 2024 10:35:33 -0700 Subject: [PATCH 169/425] fixes --- libs/model/src/services/stakeHelper.ts | 4 ---- libs/schemas/src/entities/topic.schemas.ts | 3 --- 2 files changed, 7 deletions(-) diff --git a/libs/model/src/services/stakeHelper.ts b/libs/model/src/services/stakeHelper.ts index 240fa46cbf0..97189c26e64 100644 --- a/libs/model/src/services/stakeHelper.ts +++ b/libs/model/src/services/stakeHelper.ts @@ -38,10 +38,6 @@ export async function getVotingWeight( }, ], }, - { - model: models.ChainNode, - required: false, - }, ], }); diff --git a/libs/schemas/src/entities/topic.schemas.ts b/libs/schemas/src/entities/topic.schemas.ts index 3d6b9b0290d..eb0b7416d72 100644 --- a/libs/schemas/src/entities/topic.schemas.ts +++ b/libs/schemas/src/entities/topic.schemas.ts @@ -39,9 +39,6 @@ export const Topic = z.object({ group_ids: z.array(PG_INT).default([]), default_offchain_template_backup: z.string().nullish(), weighted_voting: z.nativeEnum(TopicWeightedVoting).nullish(), - chain_node_id: PG_INT.nullish().describe( - 'token chain node ID, used for ERC20 topics', - ), token_address: z .string() .nullish() From cccf4d1f015950cd68289379ca2618b5dc6e2008 Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 16 Oct 2024 08:32:28 -0700 Subject: [PATCH 170/425] Fixed datadog --- Dockerfile.datadog | 2 ++ scripts/datadog-entrypoint.sh | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Dockerfile.datadog b/Dockerfile.datadog index 1563a60318b..60b6aa2d250 100644 --- a/Dockerfile.datadog +++ b/Dockerfile.datadog @@ -25,4 +25,6 @@ RUN apt-get update && apt-get -y install --reinstall datadog-agent # Expose DogStatsD and trace-agent ports EXPOSE 8125/udp 8126/tcp +RUN mkdir -p /var/run/datadog + COPY datadog-config/ /etc/datadog-agent/ \ No newline at end of file diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index 97f518f497a..25a7c3edfd4 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/sh -if [ "$APP_ENV" = "production" ]; then +if [ "$APP_ENV" = "production" ] || [ "$APP_ENV" = "frick" ]; then datadog-agent run & /opt/datadog-agent/embedded/bin/trace-agent --config=/etc/datadog-agent/datadog.yaml & /opt/datadog-agent/embedded/bin/process-agent --config=/etc/datadog-agent/datadog.yaml & @@ -12,4 +12,4 @@ if [ -z "$1" ]; then exit 1 fi -exec "$@" \ No newline at end of file +exec "$@" From 5a5063647b005e779b6b4684997205b180e3210f Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 16 Oct 2024 11:01:41 -0700 Subject: [PATCH 171/425] Fixed datadog --- scripts/datadog-entrypoint.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index 25a7c3edfd4..fc8c6514eb4 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -1,5 +1,7 @@ #!/bin/sh +DD_HOSTNAME=$(hostname) + if [ "$APP_ENV" = "production" ] || [ "$APP_ENV" = "frick" ]; then datadog-agent run & /opt/datadog-agent/embedded/bin/trace-agent --config=/etc/datadog-agent/datadog.yaml & From 8705e4a5185fc5608f10692ba4e722fcbc0d7ed2 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Wed, 16 Oct 2024 11:03:56 -0700 Subject: [PATCH 172/425] remove unused code in CreateTopic --- libs/model/src/community/CreateTopic.command.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/model/src/community/CreateTopic.command.ts b/libs/model/src/community/CreateTopic.command.ts index 35f7aaf4cd4..65c17dab2f2 100644 --- a/libs/model/src/community/CreateTopic.command.ts +++ b/libs/model/src/community/CreateTopic.command.ts @@ -63,7 +63,6 @@ export function CreateTopic(): Command< options = { ...options, weighted_voting: payload.weighted_voting, - chain_node_id: payload.chain_node_id || undefined, token_address: payload.token_address || undefined, token_symbol: payload.token_symbol || undefined, vote_weight_multiplier: payload.vote_weight_multiplier || undefined, From 77602f56e3f5ce5febfd175ac1d120ea1bee29f2 Mon Sep 17 00:00:00 2001 From: kassad Date: Wed, 16 Oct 2024 11:04:39 -0700 Subject: [PATCH 173/425] Fixed datadog --- scripts/datadog-entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index fc8c6514eb4..37ad3669869 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -1,8 +1,8 @@ #!/bin/sh -DD_HOSTNAME=$(hostname) +export DD_HOSTNAME=$(hostname) -if [ "$APP_ENV" = "production" ] || [ "$APP_ENV" = "frick" ]; then +if [ "$APP_ENV" = "production" ]; then datadog-agent run & /opt/datadog-agent/embedded/bin/trace-agent --config=/etc/datadog-agent/datadog.yaml & /opt/datadog-agent/embedded/bin/process-agent --config=/etc/datadog-agent/datadog.yaml & From e032149f9d834af35a21ca8ca87579e892dc8ff2 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 11:29:01 -0700 Subject: [PATCH 174/425] Changed to new buttons... --- .../toolbars/BlockSelectorButton.tsx | 42 +++++++++++++++--- .../toolbars/CWHeadingButton.tsx | 44 ++++++++++++------- .../toolbars/ToolbarForDesktop.tsx | 8 ++-- 3 files changed, 66 insertions(+), 28 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 7338bbfea8a..2fb5e2ab6f0 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -1,5 +1,9 @@ -import { currentBlockType$, useCellValue } from 'commonwealth-mdxeditor'; -import React from 'react'; +import { + BlockType, + currentBlockType$, + useCellValue, +} from 'commonwealth-mdxeditor'; +import React, { useCallback } from 'react'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; import CWPopover, { usePopover, @@ -7,25 +11,49 @@ import CWPopover, { import './BlockSelectorButton.scss'; +function blockTypeToIconName(blockType: BlockType) { + switch (blockType) { + case 'paragraph': + return 'p'; + case 'quote': + return 'q'; + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': + case '': + return blockType; + } +} + export const BlockSelectorButton = () => { const formattingPopoverProps = usePopover(); const currentBlockType = useCellValue(currentBlockType$); + const handleClick = useCallback( + (event: React.MouseEvent) => { + formattingPopoverProps.handleInteraction(event); + }, + [formattingPopoverProps], + ); + return (
- - - - + + + +
} {...formattingPopoverProps} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx index 0b652ab6d4f..c103911a1fb 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx @@ -12,36 +12,46 @@ import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip' export type HeadingButtonProps = Readonly<{ blockType: 'h1' | 'h2' | 'h3' | 'quote'; + onClick?: (event: React.MouseEvent) => void; }>; export const CWHeadingButton = (props: HeadingButtonProps) => { - const { blockType } = props; + const { blockType, onClick } = props; const currentBlockType = useCellValue(currentBlockType$); const convertSelectionToNode = usePublisher(convertSelectionToNode$); const active = currentBlockType === blockType; - const toggleFormat = useCallback(() => { - if (!active) { - switch (blockType) { - case 'h1': - case 'h2': - case 'h3': - convertSelectionToNode(() => $createHeadingNode(blockType)); - break; - case 'quote': - convertSelectionToNode(() => $createQuoteNode()); - break; + const toggleFormat = useCallback( + (event: React.MouseEvent) => { + if (!active) { + switch (blockType) { + case 'h1': + case 'h2': + case 'h3': + convertSelectionToNode(() => $createHeadingNode(blockType)); + break; + case 'quote': + convertSelectionToNode(() => $createQuoteNode()); + break; + } + } else { + convertSelectionToNode(() => $createParagraphNode()); } - } else { - convertSelectionToNode(() => $createParagraphNode()); - } - }, [active, blockType, convertSelectionToNode]); + + onClick?.(event); + }, + [active, blockType, convertSelectionToNode, onClick], + ); + + // TODO: there's a bug in handleInteraction here where it's not going away + // TODO: same thing with onMouseLeave. It doesn't reliably seem to nuke + // the tooltipl return ( ( { fallback: () => ( <>
- - - + + +
From a7affeba419af05d75e192ece20abd9fcefa1728 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 23:36:18 +0500 Subject: [PATCH 175/425] Fix empty space in CWCommunitySelector --- .../new_designs/CWCommunitySelector/CWCommunitySelector.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWCommunitySelector/CWCommunitySelector.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWCommunitySelector/CWCommunitySelector.tsx index b32e07f173c..152012d1bb2 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWCommunitySelector/CWCommunitySelector.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWCommunitySelector/CWCommunitySelector.tsx @@ -66,7 +66,7 @@ const CWCommunitySelector = ({ )}
- {description} + {description && {description}}
); From 2ca1483ff6303f13f096ee0c740f4a84201a221d Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 23:38:44 +0500 Subject: [PATCH 176/425] Added `LaunchIdeaCard` component --- .../LaunchIdeaCard/LaunchIdeaCard.scss | 55 +++++++++++++++++++ .../LaunchIdeaCard/LaunchIdeaCard.tsx | 42 ++++++++++++++ .../views/components/LaunchIdeaCard/index.tsx | 3 + .../component_kit/cw_icons/cw_icon_lookup.ts | 2 + .../TokenLaunchButton/TokenLaunchButton.tsx | 26 +++++++-- .../views/pages/Communities/Communities.tsx | 5 ++ 6 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.scss create mode 100644 packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/index.tsx diff --git a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.scss b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.scss new file mode 100644 index 00000000000..f86d73648eb --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.scss @@ -0,0 +1,55 @@ +@import '../../../../styles/shared'; + +.LaunchIdeaCard { + position: relative; + background-color: white; + border-radius: 4px; + + ::before { + content: ''; + position: absolute; + top: -2px; + left: -2px; + margin: auto; + width: calc(100% + 2px); + height: calc(100% + 2px); + background: linear-gradient( + 90deg, + rgba(255, 31, 0, 1) 0%, + rgba(255, 128, 215, 1) 50%, + rgba(0, 121, 204, 1) 100% + ); + background-repeat: no-repeat; + border: 1px solid transparent; + z-index: -1; + border-radius: 9px; + } + + .gradiant-container { + display: flex; + flex-direction: column; + gap: 12px; + padding: 16px; + border-radius: 4px; + background: linear-gradient( + 90deg, + rgba(255, 31, 0, 0.3) 0%, + rgba(255, 128, 215, 0.3) 50%, + rgba(0, 121, 204, 0.3) 100% + ); + + .cta-elements { + display: flex; + align-items: center; + gap: 12px; + + .randomize-cta-text { + color: $neutral-700; + } + + .TokenLaunchButton { + padding: 0 !important; + } + } + } +} diff --git a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx new file mode 100644 index 00000000000..2070592cbfc --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { CWText } from 'views/components/component_kit/cw_text'; +import { CWButton } from '../component_kit/new_designs/CWButton'; +import { CWTextInput } from '../component_kit/new_designs/CWTextInput'; +import TokenLaunchButton from '../sidebar/TokenLaunchButton'; +import './LaunchIdeaCard.scss'; + +type LaunchIdeaCardProps = { + onTokenLaunchClick?: () => void; + onRandomizeClick?: () => void; +}; + +const LaunchIdeaCard = ({ + onTokenLaunchClick, + onRandomizeClick, +}: LaunchIdeaCardProps) => { + return ( +
+
+ Launch an idea + +
+ + Try our randomizer button to launch tokens fast! + + + + +
+
+
+ ); +}; + +export default LaunchIdeaCard; diff --git a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/index.tsx b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/index.tsx new file mode 100644 index 00000000000..5c51f9c2ef0 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/index.tsx @@ -0,0 +1,3 @@ +import LaunchIdeaCard from './LaunchIdeaCard'; + +export default LaunchIdeaCard; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts index 6bf24e89a6d..e7b459cc51b 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts @@ -12,6 +12,7 @@ import { BellSimpleRinging, BellSimpleSlash, BookOpenText, + Brain, CaretDoubleLeft, CaretDoubleRight, CaretDown, @@ -93,6 +94,7 @@ import { withPhosphorIcon } from './cw_phosphor_icons'; export const iconLookup = { bold: withPhosphorIcon(TextB), + brain: withPhosphorIcon(Brain), italic: withPhosphorIcon(TextItalic), underline: withPhosphorIcon(TextUnderline), strikethrough: withPhosphorIcon(TextStrikethrough), diff --git a/packages/commonwealth/client/scripts/views/components/sidebar/TokenLaunchButton/TokenLaunchButton.tsx b/packages/commonwealth/client/scripts/views/components/sidebar/TokenLaunchButton/TokenLaunchButton.tsx index 04a847df7d5..0711c784a9e 100644 --- a/packages/commonwealth/client/scripts/views/components/sidebar/TokenLaunchButton/TokenLaunchButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/sidebar/TokenLaunchButton/TokenLaunchButton.tsx @@ -10,14 +10,27 @@ import { } from '../../../../../../shared/analytics/types'; import useAppStatus from '../../../../hooks/useAppStatus'; import { useBrowserAnalyticsTrack } from '../../../../hooks/useBrowserAnalyticsTrack'; -import { ButtonHeight } from '../../component_kit/new_designs/CWButton/CWButton'; +import { + ButtonHeight, + ButtonWidth, +} from '../../component_kit/new_designs/CWButton/CWButton'; import './TokenLaunchButton.scss'; type TokenLaunchButtonProps = { buttonHeight?: ButtonHeight; + buttonWidth?: ButtonWidth; + buttonType?: 'reset' | 'submit' | 'button'; + disabled?: boolean; + onClick?: () => void; }; -const TokenLaunchButton = ({ buttonHeight }: TokenLaunchButtonProps) => { +const TokenLaunchButton = ({ + buttonHeight, + buttonWidth, + buttonType = 'button', + disabled, + onClick, +}: TokenLaunchButtonProps) => { const navigate = useCommonNavigate(); const { isAddedToHomeScreen } = useAppStatus(); @@ -41,9 +54,14 @@ const TokenLaunchButton = ({ buttonHeight }: TokenLaunchButtonProps) => { {} : handleLaunchTokenCommunity) + } />
); diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx index 2ec7b0f5c10..e90367e3a22 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx @@ -13,6 +13,7 @@ import { z } from 'zod'; import { useFetchTokenUsdRateQuery } from '../../../state/api/communityStake/index'; import { trpc } from '../../../utils/trpcClient'; import { NewCommunityCard } from '../../components/CommunityCard'; +import LaunchIdeaCard from '../../components/LaunchIdeaCard'; import { CWText } from '../../components/component_kit/cw_text'; import { CWButton } from '../../components/component_kit/new_designs/CWButton'; import CWCircleMultiplySpinner from '../../components/component_kit/new_designs/CWCircleMultiplySpinner'; @@ -84,6 +85,7 @@ const CommunitiesPage = () => { const ethUsdRate = ethUsdRateData?.data?.data?.amount; const [isFilterDrawerOpen, setIsFilterDrawerOpen] = useState(false); + const [isTokenLaunchDrawerOpen, setIsTokenLaunchDrawerOpen] = useState(false); const isLoading = isLoadingTags || @@ -197,6 +199,9 @@ const CommunitiesPage = () => { onFiltersChange={(newFilters) => setFilters(newFilters)} />
+ setIsTokenLaunchDrawerOpen(true)} + />
{isLoading && communitiesList.length === 0 ? ( From 12b248d1e661ec1688945fe796a94cacb40e81c2 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 23:39:35 +0500 Subject: [PATCH 177/425] Clear `user.addressSelectorSelectedAddress` state on `useCreateTokenMutation` success --- .../client/scripts/state/api/token/createToken.ts | 9 ++++++++- .../SignTokenTransactions/SignTokenTransactions.tsx | 5 ----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/commonwealth/client/scripts/state/api/token/createToken.ts b/packages/commonwealth/client/scripts/state/api/token/createToken.ts index 592d92b7082..912460ec215 100644 --- a/packages/commonwealth/client/scripts/state/api/token/createToken.ts +++ b/packages/commonwealth/client/scripts/state/api/token/createToken.ts @@ -1,7 +1,14 @@ import { trpc } from 'utils/trpcClient'; +import useUserStore from '../../ui/user'; const useCreateTokenMutation = () => { - return trpc.token.createToken.useMutation(); + const user = useUserStore(); + + return trpc.token.createToken.useMutation({ + onSuccess: async () => { + user.setData({ addressSelectorSelectedAddress: undefined }); + }, + }); }; export default useCreateTokenMutation; diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/SignatureStep/SignTokenTransactions/SignTokenTransactions.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/SignatureStep/SignTokenTransactions/SignTokenTransactions.tsx index fae2a57323d..97839b4d42c 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/SignatureStep/SignTokenTransactions/SignTokenTransactions.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/SignatureStep/SignTokenTransactions/SignTokenTransactions.tsx @@ -38,7 +38,6 @@ const SignTokenTransactions = ({ const handleSign = async () => { try { - // this condition will never be triggered, adding this to avoid typescript errors if (selectedAddress?.address) { user.setData({ addressSelectorSelectedAddress: selectedAddress.address, @@ -75,10 +74,6 @@ const SignTokenTransactions = ({ token_name: payload.name, }); - user.setData({ - addressSelectorSelectedAddress: undefined, - }); - onSuccess(); } catch (e) { // this will be displayed in the action step as `errorText`, no need to notify here From bd0418812c73a77215a061a6dc917de93bd1d147 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 23:39:56 +0500 Subject: [PATCH 178/425] Fix comment --- .../CommunityInformationStep/CommunityInformationStep.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/CommunityInformationStep/CommunityInformationStep.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/CommunityInformationStep/CommunityInformationStep.tsx index 13bfed5a402..4485e71d8e0 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/CommunityInformationStep/CommunityInformationStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/CommunityInformationStep/CommunityInformationStep.tsx @@ -66,13 +66,14 @@ const CommunityInformationStep = ({ const baseNode = nodes?.find( (n) => n.ethChainId === commonProtocol.ValidChains.SepoliaBase, ); + + // this condition will never be triggered, adding this to avoid typescript errors if (!baseNode || !baseNode.ethChainId) { notifyError('Could not find base chain node'); return; } try { - // this condition will never be triggered, adding this to avoid typescript errors if (selectedAddress?.address) { user.setData({ addressSelectorSelectedAddress: selectedAddress.address, From f277159de3a4cf3ab5c4a9bf7003e8799615c60e Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 23:41:21 +0500 Subject: [PATCH 179/425] Updated `TokenInformationForm` and made it more generic --- .../TokenInformationForm.scss | 15 +++ .../TokenInformationForm.tsx | 104 ++++++++---------- .../TokenInformationForm/helpers.ts | 21 ++++ .../TokenInformationForm/index.ts | 3 + .../TokenInformationForm/types.ts | 3 + 5 files changed, 90 insertions(+), 56 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/helpers.ts create mode 100644 packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/index.ts diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.scss b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.scss index 06f321bad4d..e09468dd25a 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.scss +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.scss @@ -7,6 +7,21 @@ width: 100%; max-width: 596px; + @include extraSmall { + gap: 16px; + } + + .grid-row { + display: grid; + align-items: flex-start; + grid-template-columns: 1fr 1fr; + gap: 16px; + + @include extraSmall { + grid-template-columns: 1fr; + } + } + .optional-label { font-family: $font-family-silka; color: $neutral-500; diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx index 0f824d6f966..839f642b7f0 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx @@ -1,4 +1,5 @@ import { ChainBase } from '@hicommonwealth/shared'; +import clsx from 'clsx'; import useAppStatus from 'hooks/useAppStatus'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; import useRunOnceOnCondition from 'hooks/useRunOnceOnCondition'; @@ -29,9 +30,9 @@ import { CWModal } from 'views/components/component_kit/new_designs/CWModal'; import { CWTextInput } from 'views/components/component_kit/new_designs/CWTextInput'; import { AuthModal } from 'views/modals/AuthModal'; import NewCommunityAdminModal from 'views/modals/NewCommunityAdminModal'; -import { openConfirmation } from 'views/modals/confirmation_modal'; import { communityTypeOptions } from 'views/pages/CreateCommunity/steps/CommunityTypeStep/helpers'; import './TokenInformationForm.scss'; +import { triggerTokenLaunchFormAbort } from './helpers'; import { FormSubmitValues, TokenInformationFormProps } from './types'; import { tokenInformationFormValidationSchema } from './validation'; @@ -40,6 +41,8 @@ const TokenInformationForm = ({ onCancel, onAddressSelected, selectedAddress, + containerClassName, + customFooter, }: TokenInformationFormProps) => { const user = useUserStore(); const [baseOption] = communityTypeOptions; @@ -123,30 +126,13 @@ const TokenInformationForm = ({ }, [selectedAddress, handleSubmit]); const handleCancel = () => { - openConfirmation({ - title: 'Are you sure you want to cancel?', - description: 'Your details will not be saved. Cancel create token flow?', - buttons: [ - { - label: 'Yes, cancel', - buttonType: 'destructive', - buttonHeight: 'sm', - onClick: () => { - trackAnalytics({ - event: - MixpanelCommunityCreationEvent.CREATE_TOKEN_COMMUNITY_CANCELLED, - isPWA: isAddedToHomeScreen, - }); + triggerTokenLaunchFormAbort(() => { + trackAnalytics({ + event: MixpanelCommunityCreationEvent.CREATE_TOKEN_COMMUNITY_CANCELLED, + isPWA: isAddedToHomeScreen, + }); - onCancel(); - }, - }, - { - label: 'No, continue', - buttonType: 'primary', - buttonHeight: 'sm', - }, - ], + onCancel(); }); }; @@ -170,7 +156,7 @@ const TokenInformationForm = ({ ref={formMethodsRef} validationSchema={tokenInformationFormValidationSchema} onSubmit={handleSubmit} - className="TokenInformationForm" + className={clsx('TokenInformationForm', containerClassName)} >
@@ -189,23 +175,25 @@ const TokenInformationForm = ({ />
- setTokenName(e.target.value?.trim())} - customError={isTokenNameTaken ? 'Token name is already taken' : ''} - /> +
+ setTokenName(e.target.value?.trim())} + customError={isTokenNameTaken ? 'Token name is already taken' : ''} + /> - + +
{/* Action buttons */} -
- - -
+ {customFooter ? ( + customFooter({ isProcessingProfileImage }) + ) : ( +
+ + +
+ )} void) => { + openConfirmation({ + title: 'Are you sure you want to cancel?', + description: 'Your details will not be saved. Cancel create token flow?', + buttons: [ + { + label: 'Yes, cancel', + buttonType: 'destructive', + buttonHeight: 'sm', + onClick: onAbortConfirm, + }, + { + label: 'No, continue', + buttonType: 'primary', + buttonHeight: 'sm', + }, + ], + }); +}; diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/index.ts b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/index.ts new file mode 100644 index 00000000000..ea9d67d873f --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/index.ts @@ -0,0 +1,3 @@ +import TokenInformationForm from './TokenInformationForm'; + +export default TokenInformationForm; diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts index af4a9fa174e..cdbcda50701 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts @@ -1,4 +1,5 @@ import AddressInfo from 'models/AddressInfo'; +import { ReactNode } from 'react'; export type FormSubmitValues = { tokenChain: string; @@ -13,4 +14,6 @@ export type TokenInformationFormProps = { onCancel: () => void; selectedAddress?: AddressInfo; onAddressSelected: (address: AddressInfo) => void; + containerClassName?: string; + customFooter?: (props: { isProcessingProfileImage: boolean }) => ReactNode; }; From 69af36582cad906f3232791be9fb709a650b0110 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 23:42:16 +0500 Subject: [PATCH 180/425] Block user from closing token launch form during draft state --- .../client/scripts/views/pages/LaunchToken/LaunchToken.tsx | 7 +++++-- .../{useCreateCommunity.ts => useCreateTokenCommunity.ts} | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) rename packages/commonwealth/client/scripts/views/pages/LaunchToken/{useCreateCommunity.ts => useCreateTokenCommunity.ts} (94%) diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/LaunchToken.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/LaunchToken.tsx index e608a5a9a25..4c87aba8f52 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/LaunchToken.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/LaunchToken.tsx @@ -1,3 +1,4 @@ +import useBeforeUnload from 'hooks/useBeforeUnload'; import { useCommonNavigate } from 'navigation/helpers'; import React from 'react'; import CWFormSteps from 'views/components/component_kit/new_designs/CWFormSteps'; @@ -10,7 +11,7 @@ import CommunityInformationStep from './steps/CommunityInformationStep'; import SignatureStep from './steps/SignatureStep'; import SuccessStep from './steps/SuccessStep'; import TokenInformationStep from './steps/TokenInformationStep'; -import useCreateCommunity from './useCreateCommunity'; +import useCreateTokenCommunity from './useCreateTokenCommunity'; import { CreateTokenCommunityStep, getFormSteps } from './utils'; const LaunchToken = () => { @@ -27,10 +28,12 @@ const LaunchToken = () => { setCreatedCommunityId, isTokenLaunched, setIsTokenLaunched, - } = useCreateCommunity(); + } = useCreateTokenCommunity(); const { isAddedToHomeScreen } = useAppStatus(); + useBeforeUnload(!!draftTokenInfo && !isTokenLaunched); + useBrowserAnalyticsTrack({ payload: { event: MixpanelCommunityCreationEvent.CREATE_TOKEN_COMMUNITY_VISITED, diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/useCreateCommunity.ts b/packages/commonwealth/client/scripts/views/pages/LaunchToken/useCreateTokenCommunity.ts similarity index 94% rename from packages/commonwealth/client/scripts/views/pages/LaunchToken/useCreateCommunity.ts rename to packages/commonwealth/client/scripts/views/pages/LaunchToken/useCreateTokenCommunity.ts index 18b5b9f7649..8e716b93e81 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/useCreateCommunity.ts +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/useCreateTokenCommunity.ts @@ -6,7 +6,7 @@ import { fetchCachedNodes } from 'state/api/nodes'; import { TokenInfo } from './types'; import { CreateTokenCommunityStep, handleChangeStep } from './utils'; -const useCreateCommunity = () => { +const useCreateTokenCommunity = () => { // get base chain node info const nodes = fetchCachedNodes(); const baseNode = nodes?.find( @@ -45,4 +45,4 @@ const useCreateCommunity = () => { }; }; -export default useCreateCommunity; +export default useCreateTokenCommunity; From 5c25e6fb7cf57f0cafd5432bc6a56b2a664db42c Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 23:43:01 +0500 Subject: [PATCH 181/425] Added `PageCounter` component --- .../components/PageCounter/PageCounter.scss | 17 +++++++ .../components/PageCounter/PageCounter.tsx | 46 +++++++++++++++++++ .../views/components/PageCounter/index.tsx | 3 ++ .../new_designs/CWButton/CWButton.tsx | 2 +- 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.scss create mode 100644 packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/PageCounter/index.tsx diff --git a/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.scss b/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.scss new file mode 100644 index 00000000000..4933a8e6ca0 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.scss @@ -0,0 +1,17 @@ +@import '../../../../styles/shared'; + +.PageCounter { + display: flex; + flex-direction: row; + width: fit-content; + align-items: center; + gap: 12px; + + .counter { + display: flex; + + .Text { + color: $neutral-500; + } + } +} diff --git a/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.tsx b/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.tsx new file mode 100644 index 00000000000..5a35ba0ae86 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import { CWText } from '../component_kit/cw_text'; +import CWIconButton from '../component_kit/new_designs/CWIconButton'; +import './PageCounter.scss'; + +type PageCounterProps = { + totalPages: number; + activePage?: number; + onPageChange?: (pageNumber: number) => void; +}; + +const PageCounter = ({ + activePage = 1, + totalPages, + onPageChange, +}: PageCounterProps) => { + return ( +
+ {totalPages > 1 && ( + onPageChange?.(activePage - 1)} + /> + )} + + + {activePage} / {totalPages} + + + {totalPages > 1 && ( + onPageChange?.(activePage + 1)} + /> + )} +
+ ); +}; + +export default PageCounter; diff --git a/packages/commonwealth/client/scripts/views/components/PageCounter/index.tsx b/packages/commonwealth/client/scripts/views/components/PageCounter/index.tsx new file mode 100644 index 00000000000..b224c441e77 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/PageCounter/index.tsx @@ -0,0 +1,3 @@ +import PageCounter from './PageCounter'; + +export default PageCounter; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWButton/CWButton.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWButton/CWButton.tsx index 5c4c308aab2..1aece7daa00 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWButton/CWButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWButton/CWButton.tsx @@ -11,7 +11,7 @@ import './CWButton.scss'; export type ButtonType = 'primary' | 'secondary' | 'tertiary' | 'destructive'; export type ButtonHeight = 'lg' | 'med' | 'sm'; -type ButtonWidth = 'narrow' | 'wide' | 'full'; +export type ButtonWidth = 'narrow' | 'wide' | 'full'; type ButtonAlt = 'green' | 'rorange'; type ButtonStyleProps = { From 39ab1db8028cef02b91005368b8a65c2080946fe Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 23:46:06 +0500 Subject: [PATCH 182/425] Added `QuickTokenLaunchForm` --- .../client/scripts/state/api/config.ts | 1 + .../state/api/general/generateImage.ts | 38 +++ .../QuickTokenLaunchForm.scss | 48 +++ .../QuickTokenLaunchForm.tsx | 302 ++++++++++++++++++ .../QuickTokenLaunchForm/index.tsx | 2 + 5 files changed, 391 insertions(+) create mode 100644 packages/commonwealth/client/scripts/state/api/general/generateImage.ts create mode 100644 packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss create mode 100644 packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx create mode 100644 packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/index.tsx diff --git a/packages/commonwealth/client/scripts/state/api/config.ts b/packages/commonwealth/client/scripts/state/api/config.ts index e5f90d699a1..b60d18ca607 100644 --- a/packages/commonwealth/client/scripts/state/api/config.ts +++ b/packages/commonwealth/client/scripts/state/api/config.ts @@ -38,6 +38,7 @@ export const ApiEndpoints = { VIEW_COUNT: '/viewCount', FETCH_USER_ACTIVITY: '/viewUserActivity', FETCH_GLOBAL_ACTIVITY: '/viewGlobalActivity', + GENERATE_IMAGE: '/generateImage', }; export const ContractMethods = { diff --git a/packages/commonwealth/client/scripts/state/api/general/generateImage.ts b/packages/commonwealth/client/scripts/state/api/general/generateImage.ts new file mode 100644 index 00000000000..38955d079b3 --- /dev/null +++ b/packages/commonwealth/client/scripts/state/api/general/generateImage.ts @@ -0,0 +1,38 @@ +import { useQuery } from '@tanstack/react-query'; +import axios from 'axios'; +import { ApiEndpoints, SERVER_URL } from 'state/api/config'; +import { userStore } from '../../ui/user'; + +interface GenerateImageProps { + prompt: string; +} + +export const generateImage = async ({ + prompt, +}: GenerateImageProps): Promise => { + const res = await axios.post(`${SERVER_URL}/${ApiEndpoints.GENERATE_IMAGE}`, { + description: prompt, + jwt: userStore.getState().jwt, + }); + + return res.data.result.imageUrl; +}; + +type GenerateImageQueryProps = { + apiCallEnabled?: boolean; +} & GenerateImageProps; + +const useGenerateImageQuery = ({ + prompt, + apiCallEnabled, +}: GenerateImageQueryProps) => { + return useQuery({ + // eslint-disable-next-line @tanstack/query/exhaustive-deps + queryKey: [ApiEndpoints.GENERATE_IMAGE, prompt], + queryFn: () => generateImage({ prompt }), + staleTime: Infinity, + enabled: apiCallEnabled, + }); +}; + +export default useGenerateImageQuery; diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss new file mode 100644 index 00000000000..49f610a030f --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss @@ -0,0 +1,48 @@ +@import '../../../../../../styles/shared.scss'; + +.QuickTokenLaunchForm { + div.h3 { + margin-bottom: 16px; + } + + .display-none { + display: none !important; + } + + .CircleMultiplySpinner { + > .container { + display: flex; + height: 70vh; + } + } + + .shortened-token-information-form { + max-width: unset; + + .CommunitySelector { + max-width: unset; + padding: 16px !important; + } + + .cta-elements { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + gap: 16px; + + > .TokenLaunchButton { + padding: 0; + } + + @include mediumSmallMid { + gap: 12px; + flex-direction: column; + + > .TokenLaunchButton { + margin-left: auto; + } + } + } + } +} diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx new file mode 100644 index 00000000000..1a4b59054a7 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -0,0 +1,302 @@ +import { ChainBase, commonProtocol } from '@hicommonwealth/shared'; +import clsx from 'clsx'; +import { notifyError } from 'controllers/app/notifications'; +import useBeforeUnload from 'hooks/useBeforeUnload'; +import React, { useState } from 'react'; +import { slugifyPreserveDashes } from 'shared/utils'; +import { useUpdateCommunityMutation } from 'state/api/communities'; +import useCreateCommunityMutation, { + buildCreateCommunityInput, +} from 'state/api/communities/createCommunity'; +import { generateImage } from 'state/api/general/generateImage'; +import { useLaunchTokenMutation } from 'state/api/launchPad'; +import { useCreateTokenMutation } from 'state/api/token'; +import useUserStore from 'state/ui/user'; +import PageCounter from 'views/components/PageCounter'; +import { CWText } from 'views/components/component_kit/cw_text'; +import CWBanner from 'views/components/component_kit/new_designs/CWBanner'; +import { CWButton } from 'views/components/component_kit/new_designs/CWButton'; +import CWCircleMultiplySpinner from 'views/components/component_kit/new_designs/CWCircleMultiplySpinner'; +import TokenLaunchButton from 'views/components/sidebar/TokenLaunchButton'; +import { generateCommunityNameFromToken } from '../../../LaunchToken/steps/CommunityInformationStep/utils'; +import SuccessStep from '../../../LaunchToken/steps/SuccessStep'; +import TokenInformationForm from '../../../LaunchToken/steps/TokenInformationStep/TokenInformationForm'; +import { FormSubmitValues } from '../../../LaunchToken/steps/TokenInformationStep/TokenInformationForm/types'; +import useCreateTokenCommunity from '../../../LaunchToken/useCreateTokenCommunity'; +import './QuickTokenLaunchForm.scss'; + +type QuickTokenLaunchFormProps = { + onCancel: () => void; + onCommunityCreated: (communityId: string) => void; +}; + +export const QuickTokenLaunchForm = ({ + onCancel, + onCommunityCreated, +}: QuickTokenLaunchFormProps) => { + const [randomizeAttempts] = useState<{ data: Object }[]>([]); + const [isCreatingQuickToken, setIsCreatingQuickToken] = useState(false); + const [ + createdCommunityIdsToTokenInfoMap, + setCreatedCommunityIdsToTokenInfoMap, + ] = useState({}); + + const { + selectedAddress, + setSelectedAddress, + baseNode, + createdCommunityId, + setCreatedCommunityId, + } = useCreateTokenCommunity(); + + const { mutateAsync: launchToken } = useLaunchTokenMutation(); + + const { mutateAsync: createToken } = useCreateTokenMutation(); + + const { mutateAsync: updateCommunity } = useUpdateCommunityMutation({ + communityId: createdCommunityId || '', // this will exist by the time update community is called + }); + + const user = useUserStore(); + + const { mutateAsync: createCommunityMutation } = useCreateCommunityMutation(); + + useBeforeUnload(isCreatingQuickToken); + + const handleSubmit = (tokenInfo: FormSubmitValues) => { + if (isCreatingQuickToken) return; + + const handleAsync = async () => { + setIsCreatingQuickToken(true); + + try { + // this check will never be triggered, addding to avoid ts issues + if (!baseNode || !baseNode.ethChainId) { + notifyError('Could not find base chain node'); + return; + } + + // this check will never be triggered, addding to avoid ts issues + if (!selectedAddress?.address) { + notifyError('Could not find selected address'); + return; + } + + const sanitizedTokenInfo = { + name: tokenInfo.tokenName.trim(), + symbol: tokenInfo.tokenTicker.trim(), + description: tokenInfo.tokenDescription.trim() || '', + imageURL: tokenInfo.tokenImageURL.trim() || '', + }; + + // 1. check if this same token info was submitted before and a community per that info was created + let communityId = + createdCommunityIdsToTokenInfoMap[ + sanitizedTokenInfo.name + sanitizedTokenInfo.symbol + ] || ''; + if (!communityId) { + // 1.1 generate basic community info from `sanitizedTokenInfo` + const generatedCommunityInfo = { + communityName: generateCommunityNameFromToken({ + tokenName: sanitizedTokenInfo.name || '', + tokenSymbol: sanitizedTokenInfo.symbol || '', + }), + communityDescription: + sanitizedTokenInfo.description || + `Community for '${sanitizedTokenInfo.name}' token`, + communityProfileImageURL: sanitizedTokenInfo.imageURL || '', + }; + + // 1.2 image is required for community, generate via OpenAI if not present + if (!generatedCommunityInfo.communityProfileImageURL) { + generatedCommunityInfo.communityProfileImageURL = + await generateImage({ + prompt: `Generate an image for a web3 token named "${ + sanitizedTokenInfo.name + }" having a ticker/symbol of "${sanitizedTokenInfo.symbol}"`, + }); + } + + // 1.3 create community with communityId, and make `communityId` unique if it already exists + communityId = slugifyPreserveDashes( + generatedCommunityInfo.communityName.toLowerCase(), + ); + while (true) { + // 1.4 create the community with the specific `selectedAddress` in header + user.setData({ + // this gets reset after creating community + addressSelectorSelectedAddress: selectedAddress.address, + }); + const communityPayload = buildCreateCommunityInput({ + id: communityId, + name: generatedCommunityInfo.communityName, + chainBase: ChainBase.Ethereum, + description: generatedCommunityInfo.communityDescription, + iconUrl: generatedCommunityInfo.communityProfileImageURL, + socialLinks: [], + chainNodeId: baseNode.id, + }); + const response = await createCommunityMutation(communityPayload) + .then(() => true) + .catch((e) => { + const errorMsg = e?.message?.toLowerCase() || ''; + if ( + !( + errorMsg.includes('name') && + errorMsg.includes('already') && + errorMsg.includes('exists') + ) + ) { + // this is not a unique community name error, abort token creation + return 'invalid_state'; + } + return false; + }); + + if (response === 'invalid_state') return; + + if (response === true) { + // store community id for this submitted token info, incase user submits + // the form again we won't create another community for the same token info + setCreatedCommunityIdsToTokenInfoMap((prev) => ({ + ...prev, + [sanitizedTokenInfo.name + sanitizedTokenInfo.symbol]: + communityId, + })); + + break; + } + + // Note: we just add 1's until `communityId` is unique. + // better algo could be used but this case would be rare. + generatedCommunityInfo.communityName += `1`; + communityId = slugifyPreserveDashes( + generatedCommunityInfo.communityName.toLowerCase(), + ); + } + } + + // 2. attempt Launch token on chain + await launchToken({ + chainRpc: baseNode.url, + ethChainId: baseNode.ethChainId, + name: sanitizedTokenInfo.name, + symbol: sanitizedTokenInfo.symbol, + walletAddress: selectedAddress.address, + }); + + // 3. store `tokenInfo` on db + user.setData({ + // this gets reset after creating token on api + addressSelectorSelectedAddress: selectedAddress.address, + }); + await createToken({ + base: ChainBase.Ethereum, + chain_node_id: baseNode.id, + name: sanitizedTokenInfo.name, + symbol: sanitizedTokenInfo.symbol, + icon_url: sanitizedTokenInfo.imageURL, + description: sanitizedTokenInfo.description, + community_id: communityId, + launchpad_contract_address: + // this will always exist, adding 0 to avoid typescript issues + commonProtocol.factoryContracts[baseNode.ethChainId].launchpad, + }); + + // 4. update community to reference the created token + user.setData({ + // this gets reset after updating community + addressSelectorSelectedAddress: selectedAddress.address, + }); + await updateCommunity({ + id: communityId, + token_name: sanitizedTokenInfo.name, + ...(sanitizedTokenInfo.description && { + description: sanitizedTokenInfo.description, + }), + ...(sanitizedTokenInfo.imageURL && { + icon_url: sanitizedTokenInfo.imageURL, + }), + }); + + setCreatedCommunityId(communityId); + onCommunityCreated(communityId); + } catch (e) { + console.error(`Error creating token: `, e, e.name); + + if (e?.name === 'TransactionBlockTimeoutError') { + notifyError('Transaction not timely signed. Please try again!'); + } else if ( + e?.message + ?.toLowerCase() + .includes('user denied transaction signature') + ) { + notifyError('Transaction rejected!'); + } else { + notifyError('Failed to create token!'); + } + } finally { + setIsCreatingQuickToken(false); + } + }; + + handleAsync().catch(console.error); + }; + + return ( +
+ {!createdCommunityId && ( + + {isCreatingQuickToken ? 'Launching your idea' : 'Launch an idea'} + + )} + + {isCreatingQuickToken && } + + {createdCommunityId ? ( + + ) : ( + ( + <> + +
+ {/* TODO: https://github.com/hicommonwealth/commonwealth/issues/8863 */} + {}} + /> + + {/* TODO: https://github.com/hicommonwealth/commonwealth/issues/8863 */} + + + +
+ + )} + /> + )} +
+ ); +}; diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/index.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/index.tsx new file mode 100644 index 00000000000..4dca4cf1285 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/index.tsx @@ -0,0 +1,2 @@ +import { QuickTokenLaunchForm } from './QuickTokenLaunchForm'; +export default QuickTokenLaunchForm; From 2c4ed289a16a3c7e90c17a37c322f380e5b62cd9 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Wed, 16 Oct 2024 23:47:40 +0500 Subject: [PATCH 183/425] Added `QuickTokenLaunchForm` with drawer in communities explore page --- .../views/pages/Communities/Communities.tsx | 5 ++ .../TokenLaunchDrawer/TokenLaunchDrawer.scss | 42 +++++++++++ .../TokenLaunchDrawer/TokenLaunchDrawer.tsx | 73 +++++++++++++++++++ .../Communities/TokenLaunchDrawer/index.tsx | 2 + 4 files changed, 122 insertions(+) create mode 100644 packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss create mode 100644 packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx create mode 100644 packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/index.tsx diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx index e90367e3a22..21a31b97968 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx @@ -25,6 +25,7 @@ import ManageCommunityStakeModal from '../../modals/ManageCommunityStakeModal/Ma import './Communities.scss'; import { FiltersDrawer } from './FiltersDrawer/FiltersDrawer'; import { CommunityFilters } from './FiltersDrawer/types'; +import TokenLaunchDrawer from './TokenLaunchDrawer'; import { getCommunityCountsString } from './helpers'; type ExtendedCommunityType = z.infer; @@ -202,6 +203,10 @@ const CommunitiesPage = () => { setIsTokenLaunchDrawerOpen(true)} /> + setIsTokenLaunchDrawerOpen(false)} + />
{isLoading && communitiesList.length === 0 ? ( diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss new file mode 100644 index 00000000000..2759540bd06 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss @@ -0,0 +1,42 @@ +@import '../../../../../styles/shared.scss'; + +.TokenLaunchDrawer { + .Drawer.filter-drawer { + background: $white; + + @include extraSmall { + padding-bottom: 0px !important; + } + + .DrawerTopBar { + padding: 0; + } + + @include mediumSmall { + top: 48px !important; + + > .QuickTokenLaunchForm { + padding: 0 16px; + } + } + + .gradiant-container { + padding: 20px 52px; + height: 100%; + overflow-y: scroll; + padding-bottom: 60px !important; + + @include mediumSmallMid { + padding: 24px; + padding-bottom: 60px !important; + } + + background: linear-gradient( + 90deg, + rgba(255, 31, 0, 0.3) 0%, + rgba(255, 128, 215, 0.3) 50%, + rgba(0, 121, 204, 0.3) 100% + ); + } + } +} diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx new file mode 100644 index 00000000000..43ca937498f --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx @@ -0,0 +1,73 @@ +import useAppStatus from 'hooks/useAppStatus'; +import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; +import React, { useState } from 'react'; +import { + BaseMixpanelPayload, + MixpanelCommunityCreationEvent, + MixpanelLoginPayload, +} from 'shared/analytics/types'; +import CWDrawer, { + CWDrawerTopBar, +} from 'views/components/component_kit/new_designs/CWDrawer'; +import { triggerTokenLaunchFormAbort } from '../../LaunchToken/steps/TokenInformationStep/TokenInformationForm/helpers'; +import QuickTokenLaunchForm from './QuickTokenLaunchForm'; +import './TokenLaunchDrawer.scss'; + +type TokenLaunchDrawerProps = { + isOpen: boolean; + onClose: () => void; +}; + +export const TokenLaunchDrawer = ({ + isOpen, + onClose, +}: TokenLaunchDrawerProps) => { + const { isAddedToHomeScreen } = useAppStatus(); + + const { trackAnalytics } = useBrowserAnalyticsTrack< + MixpanelLoginPayload | BaseMixpanelPayload + >({ + onAction: true, + }); + + const [createdCommunityId, setCreatedCommunityId] = useState(); + + const handleDrawerCloseTrigger = () => { + if (createdCommunityId) { + onClose(); + return; + } + + triggerTokenLaunchFormAbort(() => { + trackAnalytics({ + event: MixpanelCommunityCreationEvent.CREATE_TOKEN_COMMUNITY_CANCELLED, + isPWA: isAddedToHomeScreen, + }); + + onClose(); + }); + }; + + return ( +
+ +
+ {/* TODO: fix this icon overlapping other elements on scroll */} + + + {isOpen && ( + + )} +
+
+
+ ); +}; diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/index.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/index.tsx new file mode 100644 index 00000000000..5dbf8d5aec4 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/index.tsx @@ -0,0 +1,2 @@ +import { TokenLaunchDrawer } from './TokenLaunchDrawer'; +export default TokenLaunchDrawer; From 7fa25354f3222d552a80a68767dab8c822120046 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 11:51:28 -0700 Subject: [PATCH 184/425] basic work on the icon types. --- .../toolbars/BlockSelectorButton.tsx | 25 ++----------------- .../toolbars/CWHeadingButton.tsx | 2 +- .../toolbars/blockTypeToIconName.tsx | 23 +++++++++++++++++ .../component_kit/cw_icons/cw_icon.tsx | 2 ++ .../new_designs/CWIconButton/CWIconButton.tsx | 7 ++++-- 5 files changed, 33 insertions(+), 26 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIconName.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 2fb5e2ab6f0..5dfd79a5992 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -1,33 +1,12 @@ -import { - BlockType, - currentBlockType$, - useCellValue, -} from 'commonwealth-mdxeditor'; +import { currentBlockType$, useCellValue } from 'commonwealth-mdxeditor'; import React, { useCallback } from 'react'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; +import { blockTypeToIconName } from 'views/components/MarkdownEditor/toolbars/blockTypeToIconName'; import CWPopover, { usePopover, } from 'views/components/component_kit/new_designs/CWPopover'; - import './BlockSelectorButton.scss'; -function blockTypeToIconName(blockType: BlockType) { - switch (blockType) { - case 'paragraph': - return 'p'; - case 'quote': - return 'q'; - case 'h1': - case 'h2': - case 'h3': - case 'h4': - case 'h5': - case 'h6': - case '': - return blockType; - } -} - export const BlockSelectorButton = () => { const formattingPopoverProps = usePopover(); diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx index c103911a1fb..c2a602cab1b 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx @@ -47,7 +47,7 @@ export const CWHeadingButton = (props: HeadingButtonProps) => { // TODO: there's a bug in handleInteraction here where it's not going away // TODO: same thing with onMouseLeave. It doesn't reliably seem to nuke - // the tooltipl + // the tooltip return ( ; + case 'h2': + return ; + case 'h3': + return ; + case 'h4': + case 'h5': + case 'h6': + case '': + return ''; + } +} diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon.tsx index 9d0fea42c55..9357a1bcd0c 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon.tsx @@ -14,6 +14,7 @@ export const CWIcon = (props: IconComponentProps) => { iconSize = 'medium', onClick, selected, + weight, ...otherProps } = props; @@ -27,6 +28,7 @@ export const CWIcon = (props: IconComponentProps) => { iconSize={iconSize} onClick={onClick} selected={selected} + weight={weight} {...otherProps} /> ); diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx index f69c8340510..c8df27f9a84 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx @@ -2,6 +2,7 @@ import React from 'react'; import './CWIconButton.scss'; +import { IconComponentProps } from 'views/components/component_kit/cw_icons/types'; import { CWIcon } from '../../cw_icons/cw_icon'; import { IconName } from '../../cw_icons/cw_icon_lookup'; import { getClasses } from '../../helpers'; @@ -12,7 +13,8 @@ type ButtonSize = 'lg' | 'med' | 'sm'; type ButtonStyleProps = { buttonSize?: ButtonSize; iconName: IconName; -} & BaseStyleProps; +} & BaseStyleProps & + Pick; type ButtonProps = ButtonStyleProps & React.HTMLAttributes; @@ -22,6 +24,7 @@ export const CWIconButton = ({ iconName, disabled = false, onClick, + weight, ...otherProps }: ButtonProps) => { return ( @@ -38,7 +41,7 @@ export const CWIconButton = ({ disabled={disabled} {...otherProps} > - + ); }; From 4ed61db61b863ef771b74ed817c73dabd1be3ad5 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 11:57:06 -0700 Subject: [PATCH 185/425] ensure that we have focus each time. --- .../MarkdownEditor/MarkdownEditor.tsx | 1 + .../toolbars/BlockSelectorButton.tsx | 29 +++++++++++++++---- .../toolbars/NewDesktopToolbar.tsx | 9 ++++-- .../toolbars/ToolbarForDesktop.tsx | 5 ++-- .../toolbars/ToolbarForMobile.tsx | 7 +---- 5 files changed, 35 insertions(+), 16 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx index ddee69a639d..7289ee72df2 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.tsx @@ -365,6 +365,7 @@ export const MarkdownEditor = memo(function MarkdownEditor( /> ) : ( ), diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 5dfd79a5992..62e6b321af0 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -7,12 +7,26 @@ import CWPopover, { } from 'views/components/component_kit/new_designs/CWPopover'; import './BlockSelectorButton.scss'; -export const BlockSelectorButton = () => { +type BlockSelectorButtonProps = Readonly<{ + focus: () => void; +}>; + +export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { + const { focus } = props; + const formattingPopoverProps = usePopover(); const currentBlockType = useCellValue(currentBlockType$); const handleClick = useCallback( + (event: React.MouseEvent) => { + formattingPopoverProps.handleInteraction(event); + focus(); + }, + [focus, formattingPopoverProps], + ); + + const handleFormatButtonClick = useCallback( (event: React.MouseEvent) => { formattingPopoverProps.handleInteraction(event); }, @@ -21,7 +35,7 @@ export const BlockSelectorButton = () => { return (
- @@ -29,10 +43,13 @@ export const BlockSelectorButton = () => { className="FormattingPopover" body={
- - - - + + + +
} {...formattingPopoverProps} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx index c3c184b06e4..c804ccdd3d2 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx @@ -2,10 +2,15 @@ import React from 'react'; import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/BlockSelectorButton'; import './NewToolbar.scss'; -export const NewDesktopToolbar = () => { +type NewDesktopToolbarProps = Readonly<{ + focus: () => void; +}>; + +export const NewDesktopToolbar = (props: NewDesktopToolbarProps) => { + const { focus } = props; return (
- +
); }; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index dbe8c1c3fc5..e49446f152e 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -18,14 +18,15 @@ import './ToolbarForDesktop.scss'; type ToolbarForDesktopProps = Readonly<{ onImage?: (file: File) => void; + focus: () => void; }>; export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => { - const { onImage } = props; + const { onImage, focus } = props; return ( <> - +
ReactNode; - - /** - * Focus the toolbar so that it is not blurred when clicking buttons in the - * toolbar. - */ - focus?: () => void; + focus: () => void; onImage?: (file: File) => void; }>; From dcceef4c0592cff0e6f8076a3b1b7b98a23af57c Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 17 Oct 2024 00:01:42 +0500 Subject: [PATCH 186/425] Hide `LaunchIdeaCard` behind feature flag --- .../views/pages/Communities/Communities.tsx | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx index 21a31b97968..34d290c2da4 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx @@ -1,6 +1,7 @@ import { ExtendedCommunity } from '@hicommonwealth/schemas'; import { ChainBase, ChainNetwork } from '@hicommonwealth/shared'; import { findDenominationString } from 'helpers/findDenomination'; +import { useFlag } from 'hooks/useFlag'; import React, { Fragment, useMemo, useRef, useState } from 'react'; import { Link } from 'react-router-dom'; import { Virtuoso } from 'react-virtuoso'; @@ -37,6 +38,8 @@ type ExtendedCommunitySliceType = [ const CommunitiesPage = () => { const containerRef = useRef(); + const tokenizedCommunityEnabled = useFlag('tokenizedCommunity'); + const { setModeOfManageCommunityStakeModal, modeOfManageCommunityStakeModal, @@ -200,13 +203,17 @@ const CommunitiesPage = () => { onFiltersChange={(newFilters) => setFilters(newFilters)} />
- setIsTokenLaunchDrawerOpen(true)} - /> - setIsTokenLaunchDrawerOpen(false)} - /> + {tokenizedCommunityEnabled && ( + <> + setIsTokenLaunchDrawerOpen(true)} + /> + setIsTokenLaunchDrawerOpen(false)} + /> + + )}
{isLoading && communitiesList.length === 0 ? ( From 15c75dfc0dceda0ce08d5cdee3334105e6683d35 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 17 Oct 2024 00:02:19 +0500 Subject: [PATCH 187/425] Fix type --- .../component_kit/new_designs/CWIconButton/CWIconButton.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx index f69c8340510..8e8128a5804 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx @@ -12,6 +12,7 @@ type ButtonSize = 'lg' | 'med' | 'sm'; type ButtonStyleProps = { buttonSize?: ButtonSize; iconName: IconName; + type: 'submit' | 'reset' | 'button'; } & BaseStyleProps; type ButtonProps = ButtonStyleProps & React.HTMLAttributes; From a59379c2b87d33250836632babf81223c6325213 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 17 Oct 2024 00:08:23 +0500 Subject: [PATCH 188/425] Fix type --- .../component_kit/new_designs/CWIconButton/CWIconButton.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx index 8e8128a5804..2b5860f3cbc 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWIconButton/CWIconButton.tsx @@ -12,7 +12,7 @@ type ButtonSize = 'lg' | 'med' | 'sm'; type ButtonStyleProps = { buttonSize?: ButtonSize; iconName: IconName; - type: 'submit' | 'reset' | 'button'; + type?: 'submit' | 'reset' | 'button'; } & BaseStyleProps; type ButtonProps = ButtonStyleProps & React.HTMLAttributes; From 46de9a763b9f029e265a336b19e443f97f3082c0 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 17 Oct 2024 00:14:44 +0500 Subject: [PATCH 189/425] Fix responsiveness for LaunchIdeaCard --- .../LaunchIdeaCard/LaunchIdeaCard.scss | 17 ++++++++++++++++- .../LaunchIdeaCard/LaunchIdeaCard.tsx | 17 +++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.scss b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.scss index f86d73648eb..eb6b46773c8 100644 --- a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.scss +++ b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.scss @@ -38,10 +38,25 @@ rgba(0, 121, 204, 0.3) 100% ); - .cta-elements { + .cta-elements, + .buttons { display: flex; align-items: center; gap: 12px; + } + + @include extraSmall { + .buttons { + flex-direction: column; + align-items: flex-end; + width: 100%; + } + } + + .cta-elements { + @include mediumSmallMid { + flex-direction: column; + } .randomize-cta-text { color: $neutral-700; diff --git a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx index 2070592cbfc..3c8a8a5e440 100644 --- a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx +++ b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx @@ -27,12 +27,17 @@ const LaunchIdeaCard = ({ Try our randomizer button to launch tokens fast! - - +
+ + +
From d609d340172ab0a5d43da568d9240cb58f569377 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 17 Oct 2024 00:15:37 +0500 Subject: [PATCH 190/425] Fix lint --- .../commonwealth/client/scripts/state/api/token/createToken.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/state/api/token/createToken.ts b/packages/commonwealth/client/scripts/state/api/token/createToken.ts index 912460ec215..d08f3d8c451 100644 --- a/packages/commonwealth/client/scripts/state/api/token/createToken.ts +++ b/packages/commonwealth/client/scripts/state/api/token/createToken.ts @@ -5,7 +5,7 @@ const useCreateTokenMutation = () => { const user = useUserStore(); return trpc.token.createToken.useMutation({ - onSuccess: async () => { + onSuccess: () => { user.setData({ addressSelectorSelectedAddress: undefined }); }, }); From b55e0ae94abdcf1cc09eab6064e9222f4f71a4ab Mon Sep 17 00:00:00 2001 From: Salman Date: Thu, 17 Oct 2024 00:26:03 +0500 Subject: [PATCH 191/425] issue#9562/default-avatar-images --- .../assets/img/avatars/default-avatar1.png | Bin 0 -> 38615 bytes .../assets/img/avatars/default-avatar2.png | Bin 0 -> 583201 bytes .../assets/img/avatars/default-avatar3.png | Bin 0 -> 102971 bytes .../assets/img/avatars/default-avatar4.png | Bin 0 -> 76928 bytes .../assets/img/avatars/default-avatar5.png | Bin 0 -> 707378 bytes .../assets/img/avatars/default-avatar6.png | Bin 0 -> 165827 bytes .../client/scripts/utils/avatarUtils.ts | 20 ++++++++++++++++++ .../components/Profile/ProfileHeader.tsx | 14 ++++-------- .../components/component_kit/cw_avatar.tsx | 5 ++++- 9 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar1.png create mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar2.png create mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar3.png create mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar4.png create mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar5.png create mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar6.png create mode 100644 packages/commonwealth/client/scripts/utils/avatarUtils.ts diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar1.png b/packages/commonwealth/client/assets/img/avatars/default-avatar1.png new file mode 100644 index 0000000000000000000000000000000000000000..e76ec9624c86b152052db48d75c365e6f30401d5 GIT binary patch literal 38615 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

YnN5Ss}r$qlf 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 literal 0 HcmV?d00001 diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar2.png b/packages/commonwealth/client/assets/img/avatars/default-avatar2.png new file mode 100644 index 0000000000000000000000000000000000000000..547cabb4524b3e88132572544e65c39c873bf976 GIT binary patch literal 583201 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 N4AyhVt8GiJwJoW$s1E+A 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

-&A{VZ-fhj#bt0Ap87rZl5rmZ217~Ef>3ucAUrqCtJ z`;aH}PQ)x2UKdv)>pqT0{V6)LFc8(VN*EfV!5nWdr+V9V7|s4=)A(k^>#~ zCoq_4U{|4Ew7wV^ctAOd%I69+U0Y{7oy$DfRNz~gK-59aG3gu&qsdJL>NSJvx)+4% z`BcqbN>`{S^NVhdnI-G^wwz|tVs*eLZF1^AMSSXSCyligEyseixuhv^OaHAvKn;!7 zCXd=KkusM4Xu}>ZIfnzT4qUE-Gy+F|o4T;FYX&}&=d#GlvDN;;d+Gen;Kb5-AdfR0 zc$tXN1Uq5Uwj@&`x1q$(l3mCz+g|XDdQzHglXu^SwMF*Wcm+*|{bgs_%M;HU6jL28 zPfp}H3HwHTH|gOOFahmWZp2s-K@iuuOgfwnS6ADde`Qd}%jY2TXn%rIoFUgLBn*`OkmYQKlyRNVQ2@0%Gz|*i8ErhHi>f>w^V7o%sSPH?1t$1{R1xdx2tz6 zL%Wyn#|#F%3D!&D`dB#L7T^2Sd#=s9;`v~i`Y-SWULUE)eBA4?P37sEfBu_SZqN@f z7G?D&3|V)S!yjdOxMtQ_i$(x#K$5>{6JPRs%PauLKNkn8+(e(YAi)EjAt$0#72dpU$)hX9Nw8lJub!MbYdTNm? z%B?}G1!NYcMWZ|s!mN|E7#>#}F>v@~BL?^R)>OFXu_IG?-c*U4`FQ3+9mnTM< z*;am)C2fLdomJ57Z^@V$0NDEP;!n3=EZs!!F>hn18MgkP!IDA&pw7maHe~y~3=SMZ zb??Uua6-A2(U3Ew?&9YtUJ+wb_2no_n_M(n(OS5T0qKs`o$eCn%5VZ!SQeW;a~dGfB(Pv zM?ZU|!k^T0KxYskKd*9hpU7pgf1(?~Y?pudv=c2@tM?`i5S#_yCoS>x%5}-!?Q*t1 z$AGuaZ|DQ(3L22+D>xHl@t&FD!f$>LxwyC|zGq{M9TJ^b=)tQlibxp#tXzr<2ln$l zAmv?I-X3q?(BzV_f_&=GGaE7(mXH>&R`s&(#d}3K__R3RZLR?|b^hD-6fZTRfdlyt zHS~GCQ}1wXm8Et+7=oM zl25P010nKD8?dc^#NP-kb>|a;&+94mqQ{|6H@gh=iJmvv3$#gyXkzhOuk@??-sG6{ zaWet$1KmCz-_KF9>}q)fOSZJtY*hQd9}C*tzZ~ndd^*>Hx5a}{(2S4Fp1B|&i#V?i zu}U**q?`eHvN%o|yfR$Us&hL?a+~8$PxH1xvy21d%0nGp>UnFi9K6H3uF}D(alq2n zN()6ldpN@`+|JTv=_nJd{$#>QTB14xh0R5_V#gJju#^`eT6Ls2OjLDN7OfctanDv? z%>}r=5;g(#eZTXN}ruwC0!*s#;}71fY%jAA%Aur_-LUN2 zREu_bZiiG;U<5x3Yre0~X&RB>1zZ1dnC8 zZJdQLYlA-Y9#cYM^L!OCZ3Tt1;dsz?(C)1f4`IeT0XKA%9?B@Wg=j^FcqnZ35{qvY z1OTRVscZwD%^nz%_YFXAvy~h1IKh-HjIkZwCBV80*U@CJ&O^y)GbTW{x9*DAbns5s z=X8!=0`L3cxD8-^CON(7`l9Ii@(vfx>&x7t^6L8C`Sf@H!tu>dP8n2d2&?bx=>2Ua z`8}p8-^V3y%M~X~_da%nqo-q-gGgM*LT}9iUMy0fdYdwI z34Edd7Lw7=u<1J0Y^9o*UGG}&E1p>|d^KGy<-HDVX*L$5kqCaRrd+YKz;7zE)#4Zn+dEDzX-*m8ga#WE&*RIJmSbBk zK2v5TljLqc{Bsptj;J^~dGA~dmQu=zE?K1xI`)g+%SKo;^_U^i8pn*ENjGWij&$m| zG^S3M%UfTnIG|X6qU%DvJX>X%D;-ukRrx=el^jc6hRrb|&0T*QEcei1@uB*(oBnSMtaz+D zjYx^8r za*86Oeoe;B3_vB33_9gOpzL25n%2Hr)Fht=`7yE6{A{y=Q3(1Bsl|O1fje(D-fhSL zLTMh3D{nS3qYO;yJ#5ALybcZE%*9hh!G;dDIskBtn+n^virMu5s{bzVKj-x(THnOS+w%I-GI=R{WgF*D@r7RR*fU=C z`uBeIkACHk!$#xxT4=aTbg0Eg4o>QrZSABD)CS^HvnM)isdh(0YqNlBO1+|)4$-8o z!*#7xPr2ZFk8rO=8PKvHYTAgyMfs){;Y-lKIt}YpVh};}$-H=P{mD1krgIC?m)7AF z8JQYR4szM(q7Z$9#p0b$8jC;W!>7WEtnmer5#x>iwg+{ikiO?Hy_xV-S>xmWenlVHS~@u|U_f^V4lhjhZr{oVRh#!l0a%S+zqG}Lkt*ASX9ly6eWP`V)`LMA_aS*1_UX;EKcL-xG ziWwZ!x0oO}s{n-OlU%)za64SS_l2|a%U1e(%7!|ZB|O)6YD=Z(#H&uKxm;@#OK{Ydmj{I7rhOf>YO3GW>C_fiP{Mj!sE$T?$VTO9NnZ|Lh_gHFUT=^8 zH6TP;WzZ@5jP#>}M%m=7IGWrHZR^p}C2hI36=80@p{|cDABNjJnw_G{@Y2a}o{4wT zO&Nb<2V88k_%2+=@dWbbq;UR{ZwPNx;VLLuq%DZ#G{_@jfM!oHfP^0JX!;>f2wP0~ zSKqUv!CZXEyI@TFnW5))}{IoBd8<0i9rrTx$7^(lh~pCSP8XEliN=Iht??T`KtU+DG4 zW^g>N-@$)&=-X66pXtP(9L?q24JzHM{;HP_Z~;NOHLS0`P}`y*4i#Muv}pXb73CTO zz0sR+XJEynUCZVUdg=`&*NvRyygAA>7YKYu=OM2rbh#vb$wReEr#jEM5LqRCq-)4v zIOr%G9-l@|d`t$hZaB}J=!cwIz+p{`Ezl%UnsdVs+|Ac}5N3UxA@dBf+&R+#ox$8X zku;~1pLlbP(`*7=2h~2ygg9ZX8n^&F1&7l86!(oJmz|^@Qs26U(4bF01d_0`M|HmX z)Bho^4$G4c>{$yg?F(+wxekL}Pi|H2g4>C^vLdQx5leif6n$cC9X|9jKqyK_xL$7O z2PmZ!Wio8?RFJ{B>-$Kf@`g#DzzYx6U%>~x`J)^|3D{Lri>Hdra-f7cDzc1rz3r=S z5-Q80-HQXw_z$^Qx?fvW+F`0;Ts5|bV_M@V&=&nk%evo|&Cq~I(m?+5{%Z3CuK=0J z!nN>)Y`xO0ArjhQ=if(vyq5Jfwx5HCVDskXZ#Ze zlQ^p8*2cHQTSK48_+Y3E5g2);ZYlrVhGNzKQFchXHPKb?4KCx(llB1qsh+lA^h^ZR zibWr%U1wH_T0q=4-aqh7m93`iv(2xrpeXx#soyA{6AY%dU4lt-8heoDAxv+)B>&nQ z0gREZ!M~V^Ou|{;QYKlF8ECYTQfggn*9mhp@@@kVF-l1Qrv#OBjf}*dS0hagMtn-J zR%MEP6u1$k5r5U4JbZ=MhdSUo@VpM@`{4K#fq|C}Hhe04@22*k`@t^=rHMhd?r6lS3qTC zmK>q*UGz!$6o9yQEwO}G8~k9(E5EqRvmv)i^}gE3BFANr2w5Cz6PwU`T^qMAdz65g zNx!s4sKQ30*@TY^h7DbhrsbG}COcvGYZdg@tkQ+m1-;k3I*1{5zfe>Yxb)!h{ z24SO>g;VTYAeSx6I!~Tb*Mc!+%DiVV{DAfZb_Hc=LsknfZiFc}Hw@DtlVQMG2QpIc ze9}$r(JnMIfwH$Y$<8PLpb-dvg%9jE$)icXZwGQVd9!{xW=Pt$GTI!^UjXzSCkBoa zA}O!TV4#hPjl^{{xFWxppJ3K>Lw-1BeiKg6(QweF z8RY1PZW?%q>vGOCV`1nScAF^z$ayD_@~YEeB+n4u6xPB6XlTkr$B0k!uKS)X5%MvH zHcafZA4G|v8-_eg5LK2+;p%*7h0VV9C*>z?N zv}_cm$T+?>I3i%42Q%+mjdxvV@mUUf!X}JsG}|0!6t6llG|ElposzY{03Y2H-VC;w z@)1GvvcsG=qQ?{-Q<0-~aI}fbx?){hAs z#?fd_JA-6IP+@m;eAYWYjQX8Z2( zqp~7U1^lg!F?eQyR3#h(DqTOm=e?_K1&TRbXY~q%Nc}8Vl*#AhVZq|!;G)N65_CtN zf8oN56>Q&pM=KmcP_{i?CPtHbW0aQijTe_?vNL1Aq;8KT1P`(=wPf%4G%H}`d?8QW zQ(q#YZ5zZHLaV7)+DtdXndZ~3{xn>r5=L?(YqWb-{E|)$vW4Vb+Cu00bt4b7>sdX% zZGkBriCpx_s=H=Dtr|=waFGwfx$b-s2P&gLnWqi2ZCTOi3pQkps?WgPI=e;I6FMLW zUlYHh%f*F&a*JH8K*L;8j;ocutPg7v@KFNcDKR`jgI6w#V{d_> z=!La#WfLyKdlpS%NH|>St}MA+IInT1-a8Y+P#q2z!dT999hh6B?cV==~>4x^@p`VZ=G|;r1s{@)5(yXyKKR_AQ znK0_~x>|G08%EvMt9LIlvyP)3^q7uU*i1TiX){mgfw2{AVfF`YAjT_kFz4l^JGom< z2jLykH*|{`<$FZE2;sP#Vd4`e`OjcvSxaUI8OLlh+CU3j3jJPsUDr3+2bxU1vZ*T6 zV>)!kyK_7b>op!ec~CgD?V_At=`)segbuBXRP|O&7}ps~29I`!1c@PiN!rPl50}r& zj`dx@(WutymaQ`r1y=@>p5K!4%&}b?Do;6bkt-{jE9*wa;(EJR$wq<&jy_ympMf(L zD<%P+?qCO;Dt9nKh8l>|9&@`K)b7i`FM+@$%b9_rL-gFN8Ju@gK!-deU|+3g|ba4msbu`=s(>^6Fb$z*qi{|wfz3TH`-~Q@1Kfu$!_}#WO1d!mt zD)ksJT<+yn4z>63t~qPX$>haXWon>geK}%J%jAh1nf)4f0%lQMV9b$fxW& zWb0@Hgg&X)ei2r80kU!o**8cYok-p5)p%;Ws9P$wRTz61F56dar5*Fq;KKdjZ#Q*W zZtcmmV}=B?oyb67<@Y33&qtWJ2~$G?ykF;8+|Uf6Yw~IJXQ%zH?d2bMr%~;u>KijE zcxK4eSm03(HsEzpq{HtxL=FoV?O)~H`9SC2grC+fWNS9sblPgWL}E679#_dt!&lUP zosVIDL#N`&E4I&EUl}+$#Gdqw4rZ0uE&pB5!hhMdqh}tVbej|X%7%dObPSnT;q?rV z4VX=52J#>{DYvk9+}lg%QSca_n5RAE-D3oOc0Hi{x%}ScW;Nc>KQpnJqv3j-wv0&@m;OGj&-?eD-#^(bf>&r%2%MpzyoL{(QfiU3(⪼JDBkIareI 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≷Z(Z(9i*_09*bWc-O8e({~m9NubNiayDa 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 LXmP##8Y<%dncymP literal 0 HcmV?d00001 diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar3.png b/packages/commonwealth/client/assets/img/avatars/default-avatar3.png new file mode 100644 index 0000000000000000000000000000000000000000..2879c8009ba42b9a7ef26d76ec68f9db94fd4023 GIT binary patch literal 102971 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 literal 0 HcmV?d00001 diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar4.png b/packages/commonwealth/client/assets/img/avatars/default-avatar4.png new file mode 100644 index 0000000000000000000000000000000000000000..38db86fd07e3a025e844e9a6186bb37aea928259 GIT binary patch literal 76928 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

n~Q3jnc!iK;N2(QoKx=Pabe{+|&%k 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

RE<*<&a+e6Lo+c5D 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 AUH||9 literal 0 HcmV?d00001 diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar5.png b/packages/commonwealth/client/assets/img/avatars/default-avatar5.png new file mode 100644 index 0000000000000000000000000000000000000000..c00a686cba689b0dbedf1c42fd0e0db1fc32d33e GIT binary patch literal 707378 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�kP>>$3G# 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%0DKzCo)4x#5;AuP&&Z4Zd!BcsZ948t`;oZAkk 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樋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

r`S{`dbQ{tGR|e>uanI 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

l_|xbJQhj4mvSk;Xd&IJi6tX9 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�u;=r)oqzmnXMm_{ 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 TAt7+UK>y^VlqE~W4gCHO+G?n0 literal 0 HcmV?d00001 diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar6.png b/packages/commonwealth/client/assets/img/avatars/default-avatar6.png new file mode 100644 index 0000000000000000000000000000000000000000..123332c5e6174e08dc7dd0efd04aad9245613f3e GIT binary patch literal 165827 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

  • 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 P9{8xMJc8FKSw;L0dbB$) literal 0 HcmV?d00001 diff --git a/packages/commonwealth/client/scripts/utils/avatarUtils.ts b/packages/commonwealth/client/scripts/utils/avatarUtils.ts new file mode 100644 index 00000000000..4b9200dd7cf --- /dev/null +++ b/packages/commonwealth/client/scripts/utils/avatarUtils.ts @@ -0,0 +1,20 @@ +import avatar1 from './../../assets/img/avatars/default-avatar1.png'; +import avatar2 from './../../assets/img/avatars/default-avatar2.png'; +import avatar3 from './../../assets/img/avatars/default-avatar3.png'; +import avatar4 from './../../assets/img/avatars/default-avatar4.png'; +import avatar5 from './../../assets/img/avatars/default-avatar5.png'; +import avatar6 from './../../assets/img/avatars/default-avatar6.png'; + +const defaultAvatars: string[] = [ + avatar1, + avatar2, + avatar3, + avatar4, + avatar5, + avatar6, +]; + +export const getRandomAvatar = (): string => { + const randomIndex: number = Math.floor(Math.random() * defaultAvatars.length); + return defaultAvatars[randomIndex]; +}; diff --git a/packages/commonwealth/client/scripts/views/components/Profile/ProfileHeader.tsx b/packages/commonwealth/client/scripts/views/components/Profile/ProfileHeader.tsx index 166817edd57..aca3218423d 100644 --- a/packages/commonwealth/client/scripts/views/components/Profile/ProfileHeader.tsx +++ b/packages/commonwealth/client/scripts/views/components/Profile/ProfileHeader.tsx @@ -1,4 +1,3 @@ -import jdenticon from 'jdenticon'; import React from 'react'; import { useNavigate } from 'react-router-dom'; @@ -9,6 +8,7 @@ import { getDecodedString, renderQuillDeltaToText, } from '@hicommonwealth/shared'; +import { getRandomAvatar } from 'client/scripts/utils/avatarUtils'; import useUserStore from 'state/ui/user'; import { MarkdownViewerWithFallback } from 'views/components/MarkdownViewerWithFallback/MarkdownViewerWithFallback'; import { CWButton } from 'views/components/component_kit/new_designs/CWButton'; @@ -38,6 +38,8 @@ const ProfileHeader = ({ profile, isOwner }: ProfileHeaderProps) => { } }; + const avatarToUse = profile?.avatarUrl || getRandomAvatar(); + return (
      @@ -52,15 +54,7 @@ const ProfileHeader = ({ profile, isOwner }: ProfileHeaderProps) => { )}
      - {profile?.avatarUrl ? ( - - ) : ( - - )} +
      diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx index 5bc46686cff..eb5ceefff15 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx @@ -1,3 +1,4 @@ +import { getRandomAvatar } from 'client/scripts/utils/avatarUtils'; import 'components/component_kit/cw_avatar.scss'; import React from 'react'; import Jdenticon from 'react-jdenticon'; @@ -24,13 +25,15 @@ export const CWAvatarSkeleton = ({ size }: BaseAvatarProps) => { export const CWAvatar = (props: AvatarProps) => { const { avatarUrl, size } = props; + const avatarToUse = avatarUrl || getRandomAvatar(); + return (
      ); From 8fa0c9b2c8f2c530a1972f832902706051e5e80d Mon Sep 17 00:00:00 2001 From: israellund Date: Wed, 16 Oct 2024 15:27:21 -0400 Subject: [PATCH 192/425] added Cancel button functionality to child comment --- .../components/Comments/CommentEditor/CommentEditor.tsx | 4 +++- .../scripts/views/components/Comments/CreateComment.tsx | 6 +++++- .../views/pages/discussions/CommentTree/CommentTree.tsx | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/Comments/CommentEditor/CommentEditor.tsx b/packages/commonwealth/client/scripts/views/components/Comments/CommentEditor/CommentEditor.tsx index 5c53217d0c7..38c5dc9ef1d 100644 --- a/packages/commonwealth/client/scripts/views/components/Comments/CommentEditor/CommentEditor.tsx +++ b/packages/commonwealth/client/scripts/views/components/Comments/CommentEditor/CommentEditor.tsx @@ -23,6 +23,7 @@ type CommentEditorProps = { editorValue: string; shouldFocus: boolean; tooltipText?: string; + isReplying?: boolean; }; export const CommentEditor = ({ @@ -38,6 +39,7 @@ export const CommentEditor = ({ editorValue, shouldFocus, tooltipText, + isReplying, }: CommentEditorProps) => { return (
      @@ -72,7 +74,7 @@ export const CommentEditor = ({ />
      - {editorValue.length > 0 && ( + {(editorValue.length > 0 || isReplying) && ( )} { const { saveDraft, restoreDraft, clearDraft } = useDraft( !parentCommentId ? `new-thread-comment-${rootThread.id}` : `new-comment-reply-${parentCommentId}`, ); - + console.log('isReplying from CreateComment', isReplying); const user = useUserStore(); const { checkForSessionKeyRevalidationErrors } = useAuthModalStore(); @@ -136,6 +138,7 @@ export const CreateComment = ({ const handleCancel = (e) => { e.preventDefault(); setContentDelta(createDeltaFromText('')); + if (handleIsReplying) { handleIsReplying(false); } @@ -161,6 +164,7 @@ export const CreateComment = ({ author={author as Account} editorValue={editorValue} tooltipText={tooltipText} + isReplying={isReplying} /> ) : ( diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx index 35c2a4abe34..3cd4e958b7e 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx @@ -264,7 +264,6 @@ export const CommentTree = ({ setIsGloballyEditing(false); } }; - const handleEditStart = (comment: CommentType) => { const editDraft = localStorage.getItem( `${app.activeChainId()}-edit-comment-${comment.id}-storedText`, @@ -530,6 +529,7 @@ export const CommentTree = ({ parentCommentId={parentCommentId} rootThread={thread} canComment={canComment} + isReplying={isReplying} /> )} From 7baee67cb3d595e5b38cd00a2ad8bd4e88abb425 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 12:29:46 -0700 Subject: [PATCH 193/425] use the right icon. --- .../toolbars/BlockSelectorButton.tsx | 6 ++--- ...TypeToIconName.tsx => blockTypeToIcon.tsx} | 8 +++--- .../cw_icons/cw_custom_icons.tsx | 27 +++++++++++++++++++ .../component_kit/cw_icons/cw_icon_lookup.ts | 3 +++ 4 files changed, 36 insertions(+), 8 deletions(-) rename packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/{blockTypeToIconName.tsx => blockTypeToIcon.tsx} (74%) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 62e6b321af0..e15ad7c64ba 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -1,7 +1,7 @@ import { currentBlockType$, useCellValue } from 'commonwealth-mdxeditor'; import React, { useCallback } from 'react'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; -import { blockTypeToIconName } from 'views/components/MarkdownEditor/toolbars/blockTypeToIconName'; +import { blockTypeToIcon } from 'views/components/MarkdownEditor/toolbars/blockTypeToIcon'; import CWPopover, { usePopover, } from 'views/components/component_kit/new_designs/CWPopover'; @@ -35,9 +35,7 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { return (
      - + ; case 'quote': - return 'Q'; + return ; case 'h1': return ; case 'h2': @@ -18,6 +18,6 @@ export function blockTypeToIconName(blockType: BlockType): ReactNode { case 'h5': case 'h6': case '': - return ''; + return null; } } diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_custom_icons.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_custom_icons.tsx index cd6177b2dcb..bbe3b1fb7be 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_custom_icons.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_custom_icons.tsx @@ -1033,3 +1033,30 @@ export const CWEnvelop = ({ ); }; + +export const CWPara = ({ + componentType, + iconSize, + className, + ...otherProps +}: CustomIconProps) => { + return ( + ( + { iconSize, className }, + componentType, + )} + {...otherProps} + width="24" + height="24" + viewBox="0 0 24 24" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + + + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts index 1ea926e5d0e..b13ffdb1b92 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_icon_lookup.ts @@ -88,6 +88,7 @@ import { Warning, } from '@phosphor-icons/react'; import * as CustomIcons from './cw_custom_icons'; +import { CWPara } from './cw_custom_icons'; import * as Icons from './cw_icons'; import { withPhosphorIcon } from './cw_phosphor_icons'; @@ -104,6 +105,8 @@ export const iconLookup = { h1: withPhosphorIcon(TextHOne), h2: withPhosphorIcon(TextHTwo), h3: withPhosphorIcon(TextHThree), + q: withPhosphorIcon(Quotes), + p: CWPara, quote: withPhosphorIcon(Quotes), quotes: withPhosphorIcon(Quotes), table: withPhosphorIcon(Table), From fe13863b12b12936f62fcd0bc2b67369408dc167 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 12:33:43 -0700 Subject: [PATCH 194/425] using a 'p' icon now. --- .../MarkdownEditor/toolbars/BlockSelectorButton.scss | 1 + .../MarkdownEditor/toolbars/BlockSelectorButton.tsx | 1 + .../components/MarkdownEditor/toolbars/CWHeadingButton.tsx | 2 +- .../components/MarkdownEditor/toolbars/blockTypeToIcon.tsx | 2 +- .../components/component_kit/cw_icons/cw_custom_icons.tsx | 5 +---- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss index 66c7729ce83..579e776f189 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss @@ -2,5 +2,6 @@ button { outline: none; border: none; + cursor: pointer; } } diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index e15ad7c64ba..6f97bdd6bf9 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -41,6 +41,7 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { className="FormattingPopover" body={
      + diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx index c2a602cab1b..82fca7fd75f 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx @@ -11,7 +11,7 @@ import CWIconButton from 'views/components/component_kit/new_designs/CWIconButto import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; export type HeadingButtonProps = Readonly<{ - blockType: 'h1' | 'h2' | 'h3' | 'quote'; + blockType: 'h1' | 'h2' | 'h3' | 'quote' | 'p'; onClick?: (event: React.MouseEvent) => void; }>; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIcon.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIcon.tsx index be80042f510..c245c59675f 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIcon.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIcon.tsx @@ -13,7 +13,7 @@ export function blockTypeToIcon(blockType: BlockType): ReactNode { case 'h2': return ; case 'h3': - return ; + return ; case 'h4': case 'h5': case 'h6': diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_custom_icons.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_custom_icons.tsx index bbe3b1fb7be..4a9289db771 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_custom_icons.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_icons/cw_custom_icons.tsx @@ -1053,10 +1053,7 @@ export const CWPara = ({ fill="none" xmlns="http://www.w3.org/2000/svg" > - + ); }; From d2ce0968528793e3453f1d72c4df14bec567f85c Mon Sep 17 00:00:00 2001 From: israellund Date: Wed, 16 Oct 2024 15:43:28 -0400 Subject: [PATCH 195/425] deleted console log lol --- .../client/scripts/views/components/Comments/CreateComment.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/Comments/CreateComment.tsx b/packages/commonwealth/client/scripts/views/components/Comments/CreateComment.tsx index 40f96adf412..5fa53b2a082 100644 --- a/packages/commonwealth/client/scripts/views/components/Comments/CreateComment.tsx +++ b/packages/commonwealth/client/scripts/views/components/Comments/CreateComment.tsx @@ -42,7 +42,7 @@ export const CreateComment = ({ ? `new-thread-comment-${rootThread.id}` : `new-comment-reply-${parentCommentId}`, ); - console.log('isReplying from CreateComment', isReplying); + const user = useUserStore(); const { checkForSessionKeyRevalidationErrors } = useAuthModalStore(); From 7e56b0c11d4cc41e3b746d19940985ea250b26c1 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Wed, 16 Oct 2024 14:06:08 -0700 Subject: [PATCH 196/425] support large erc20 balances --- libs/model/src/services/stakeHelper.ts | 18 +++--- libs/schemas/src/entities/comment.schemas.ts | 2 +- libs/schemas/src/entities/reaction.schemas.ts | 2 +- libs/schemas/src/entities/thread.schemas.ts | 2 +- libs/schemas/src/entities/topic.schemas.ts | 7 ++- libs/shared/package.json | 3 +- .../client/scripts/models/Reaction.ts | 2 +- .../client/scripts/models/Thread.ts | 6 +- .../client/scripts/state/api/feeds/util.ts | 2 +- .../ReactionButton/CommentReactionButton.tsx | 7 ++- .../new_designs/CWUpvoteSmall.tsx | 6 +- .../component_kit/new_designs/cw_upvote.tsx | 7 ++- .../client/scripts/views/components/feed.tsx | 2 +- .../components/Upvotes.showcase.tsx | 6 +- .../ReactionButton/ReactionButton.tsx | 16 +++-- ...16192854-reaction-voting-weight-numeric.js | 50 +++++++++++++++ .../commonwealth/shared/adapters/currency.ts | 61 +++++++++++++++---- pnpm-lock.yaml | 23 ++++--- 18 files changed, 161 insertions(+), 61 deletions(-) create mode 100644 packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js diff --git a/libs/model/src/services/stakeHelper.ts b/libs/model/src/services/stakeHelper.ts index 97189c26e64..5d153d68ddc 100644 --- a/libs/model/src/services/stakeHelper.ts +++ b/libs/model/src/services/stakeHelper.ts @@ -1,7 +1,7 @@ import { InvalidState } from '@hicommonwealth/core'; import { TopicWeightedVoting } from '@hicommonwealth/schemas'; import { BalanceSourceType, commonProtocol } from '@hicommonwealth/shared'; -import { BigNumber } from 'ethers'; +import { BigNumber, utils } from 'ethers'; import { tokenBalanceCache } from '.'; import { config } from '../config'; import { models } from '../database'; @@ -40,17 +40,17 @@ export async function getVotingWeight( }, ], }); - mustExist('Topic', topic); const { community } = topic; mustExist('Community', community); const chain_node = community.ChainNode; - mustExist('Chain Node Eth Chain Id', chain_node?.eth_chain_id); if (topic.weighted_voting === TopicWeightedVoting.Stake) { + mustExist('Chain Node Eth Chain Id', chain_node?.eth_chain_id); mustExist('Community Namespace Address', community.namespace_address); + const stake = topic.community?.CommunityStakes?.at(0); mustExist('Community Stake', stake); @@ -66,20 +66,22 @@ export async function getVotingWeight( return commonProtocol.calculateVoteWeight(stakeBalance, stake.vote_weight); } else if (topic.weighted_voting === TopicWeightedVoting.ERC20) { - const { token_address, vote_weight_multiplier } = topic; - mustExist('Topic Chain Node Eth Chain Id', chain_node?.eth_chain_id); + mustExist('Chain Node Eth Chain Id', chain_node?.eth_chain_id); const balances = await tokenBalanceCache.getBalances({ balanceSourceType: BalanceSourceType.ERC20, addresses: [address], sourceOptions: { evmChainId: chain_node.eth_chain_id, - contractAddress: token_address!, + contractAddress: topic.token_address!, }, cacheRefresh: true, }); - const balance = balances[address]; - return commonProtocol.calculateVoteWeight(balance, vote_weight_multiplier!); + const balance = utils.formatUnits(balances[address], 18); + return commonProtocol.calculateVoteWeight( + balance, + topic.vote_weight_multiplier!, + ); } // no weighted voting diff --git a/libs/schemas/src/entities/comment.schemas.ts b/libs/schemas/src/entities/comment.schemas.ts index 493e4624e24..6cdeaa05b74 100644 --- a/libs/schemas/src/entities/comment.schemas.ts +++ b/libs/schemas/src/entities/comment.schemas.ts @@ -41,7 +41,7 @@ export const Comment = z.object({ .nullish(), reaction_count: PG_INT, - reaction_weights_sum: PG_INT.optional(), + reaction_weights_sum: z.string().nullish(), search: z.union([z.string(), z.record(z.any())]), diff --git a/libs/schemas/src/entities/reaction.schemas.ts b/libs/schemas/src/entities/reaction.schemas.ts index 77ebf3cca5f..8539c940dc1 100644 --- a/libs/schemas/src/entities/reaction.schemas.ts +++ b/libs/schemas/src/entities/reaction.schemas.ts @@ -9,7 +9,7 @@ export const Reaction = z.object({ thread_id: PG_INT.nullish(), comment_id: PG_INT.nullish(), proposal_id: z.number().nullish(), - calculated_voting_weight: PG_INT.nullish(), + calculated_voting_weight: z.string().nullish(), canvas_signed_data: z.any().nullish(), canvas_msg_id: z.string().max(255).nullish(), created_at: z.coerce.date().optional(), diff --git a/libs/schemas/src/entities/thread.schemas.ts b/libs/schemas/src/entities/thread.schemas.ts index bc8cd1b8478..40a5b606f4c 100644 --- a/libs/schemas/src/entities/thread.schemas.ts +++ b/libs/schemas/src/entities/thread.schemas.ts @@ -49,7 +49,7 @@ export const Thread = z.object({ //counts reaction_count: PG_INT.optional(), - reaction_weights_sum: PG_INT.optional(), + reaction_weights_sum: z.string().nullish(), comment_count: PG_INT.optional().optional(), activity_rank_date: z.coerce.date().nullish(), diff --git a/libs/schemas/src/entities/topic.schemas.ts b/libs/schemas/src/entities/topic.schemas.ts index eb0b7416d72..dc3b9757304 100644 --- a/libs/schemas/src/entities/topic.schemas.ts +++ b/libs/schemas/src/entities/topic.schemas.ts @@ -47,9 +47,10 @@ export const Topic = z.object({ .string() .nullish() .describe('token symbol, used for ERC20 topics'), - vote_weight_multiplier: PG_INT.nullish().describe( - 'vote weight multiplier, used for ERC20 topics', - ), + vote_weight_multiplier: z + .number() + .nullish() + .describe('vote weight multiplier, used for ERC20 topics'), created_at: z.coerce.date().optional(), updated_at: z.coerce.date().optional(), diff --git a/libs/shared/package.json b/libs/shared/package.json index 7c738da882e..dc40c06661b 100644 --- a/libs/shared/package.json +++ b/libs/shared/package.json @@ -31,9 +31,10 @@ "@canvas-js/interfaces": "^0.10.10", "@canvas-js/signatures": "^0.10.10", "@cosmjs/encoding": "0.32.3", + "@ethersproject/bignumber": "^5.7.0", "@ipld/dag-json": "^10.2.0", - "@polkadot/util": "12.6.2", "@libp2p/peer-id-factory": "^4.2.4", + "@polkadot/util": "12.6.2", "moment": "^2.23.0", "safe-stable-stringify": "^2.4.2" }, diff --git a/packages/commonwealth/client/scripts/models/Reaction.ts b/packages/commonwealth/client/scripts/models/Reaction.ts index 2943183422e..3745affc2e6 100644 --- a/packages/commonwealth/client/scripts/models/Reaction.ts +++ b/packages/commonwealth/client/scripts/models/Reaction.ts @@ -18,7 +18,7 @@ class Reaction { public readonly profile: UserProfile; - public calculatedVotingWeight: number; + public calculatedVotingWeight: string; // TODO: Do thread/comment/proposal ids ever appear as strings? constructor({ diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index 89f9fce5c3d..fb75903fbc2 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -263,7 +263,7 @@ export class Thread implements IUniqueId { public associatedReactions: AssociatedReaction[]; public associatedContests?: AssociatedContest[]; public recentComments?: Comment[]; - public reactionWeightsSum: number; + public reactionWeightsSum: string; public links: Link[]; public readonly discord_meta: any; public readonly latestActivity: Moment; @@ -353,7 +353,7 @@ export class Thread implements IUniqueId { reactionType?: any[]; // TODO: fix type reactionTimestamps?: string[]; reactionWeights?: number[]; - reaction_weights_sum: number; + reaction_weights_sum: string; ThreadVersionHistories: ThreadVersionHistory[]; Address: any; // TODO: fix type discord_meta?: any; @@ -457,7 +457,7 @@ export class Thread implements IUniqueId { parent_id: null, reactions: [], CommentVersionHistories: [], - reaction_weights_sum: 0, + reaction_weights_sum: '0', canvas_signed_data: null, canvas_msg_id: null, }), diff --git a/packages/commonwealth/client/scripts/state/api/feeds/util.ts b/packages/commonwealth/client/scripts/state/api/feeds/util.ts index b1f8470e7cf..f7a8eea5e67 100644 --- a/packages/commonwealth/client/scripts/state/api/feeds/util.ts +++ b/packages/commonwealth/client/scripts/state/api/feeds/util.ts @@ -67,7 +67,7 @@ export function formatActivityResponse(response: AxiosResponse) { version_history: null, last_commented_on: '', address_last_active: '', - reaction_weights_sum: 0, + reaction_weights_sum: '0', }), ); } diff --git a/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx b/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx index e45d01c5259..23d04be99c8 100644 --- a/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx @@ -1,3 +1,4 @@ +import BigNumber from 'bignumber.js'; import { buildCreateCommentReactionInput } from 'client/scripts/state/api/comments/createReaction'; import { buildDeleteCommentReactionInput } from 'client/scripts/state/api/comments/deleteReaction'; import { useAuthModalStore } from 'client/scripts/state/ui/modals'; @@ -52,8 +53,8 @@ export const CommentReactionButton = ({ (x) => x?.author === activeAddress, ); const reactionWeightsSum = comment.reactions.reduce( - (acc, curr) => acc + (curr.calculatedVotingWeight || 1), - 0, + (acc, curr) => BigNumber.sum(acc, curr.calculatedVotingWeight || 1), + BigNumber(0), ); const handleVoteClick = async (e) => { @@ -117,7 +118,7 @@ export const CommentReactionButton = ({ isOpen={isAuthModalOpen} /> ) => void; @@ -41,13 +41,13 @@ const CWUpvoteSmall = ({ onMouseEnter={popoverProps.handleInteraction} onMouseLeave={popoverProps.handleInteraction} > - {voteCount > 0 && !disabled ? ( + {voteCount && !disabled ? ( <> diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_upvote.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_upvote.tsx index 99594b9b119..bdca2bee156 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_upvote.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_upvote.tsx @@ -1,16 +1,17 @@ import { ArrowFatUp } from '@phosphor-icons/react'; import React, { FC } from 'react'; -import { formatNumberShort } from 'adapters/currency'; +import { formatBigNumberShort } from 'adapters/currency'; import { CWText } from '../cw_text'; import { getClasses } from '../helpers'; import 'components/component_kit/new_designs/cw_upvote.scss'; +import { BigNumber } from 'ethers'; import { AnchorType } from 'views/components/component_kit/new_designs/CWPopover'; import { ComponentType } from '../types'; type CWUpvoteProps = { - voteCount: number; + voteCount: string; active?: boolean; disabled?: boolean; onClick?: (e) => void; @@ -47,7 +48,7 @@ export const CWUpvote: FC = ({ weight={active ? 'fill' : 'regular'} /> - {formatNumberShort(voteCount)} + {formatBigNumberShort(BigNumber.from(voteCount))} ); diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 3784fe063c3..b9cf9bca891 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -159,7 +159,7 @@ function mapThread(thread: z.infer): Thread { userId: thread.user_id, last_edited: thread.updated_at ?? '', last_commented_on: '', - reaction_weights_sum: 0, + reaction_weights_sum: '0', address_last_active: '', ContestActions: [], numberOfComments: thread.number_of_comments, diff --git a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Upvotes.showcase.tsx b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Upvotes.showcase.tsx index 6b6f603e167..65c4ea72b45 100644 --- a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Upvotes.showcase.tsx +++ b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Upvotes.showcase.tsx @@ -16,7 +16,7 @@ const UpvotesShowcase = () => { Small
      @@ -24,7 +24,7 @@ const UpvotesShowcase = () => { popoverContent={
      Upvoters List
      } /> @@ -32,7 +32,7 @@ const UpvotesShowcase = () => { popoverContent={
      Upvoters List
      } /> diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx index 1fdb5af1ca5..662ff54e938 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx @@ -1,3 +1,4 @@ +import BigNumber from 'bignumber.js'; import { buildCreateThreadReactionInput } from 'client/scripts/state/api/threads/createReaction'; import { buildDeleteThreadReactionInput } from 'client/scripts/state/api/threads/deleteReaction'; import { useAuthModalStore } from 'client/scripts/state/ui/modals'; @@ -21,6 +22,8 @@ import { CWUpvote } from 'views/components/component_kit/new_designs/cw_upvote'; import { AuthModal } from 'views/modals/AuthModal'; import { ReactionButtonSkeleton } from './ReactionButtonSkeleton'; +BigNumber.config({ EXPONENTIAL_AT: 100 }); + type ReactionButtonProps = { thread: Thread; size: 'small' | 'big'; @@ -46,9 +49,10 @@ export const ReactionButton = ({ const reactionWeightsSum = thread?.associatedReactions?.reduce( - (acc, curr) => acc + (curr.voting_weight || 1), - 0, - ) || 0; + (acc, curr) => BigNumber.sum(acc, curr.voting_weight || 1), + BigNumber(0), + ) || BigNumber(0); + const activeAddress = user.activeAccount?.address; const thisUserReaction = thread?.associatedReactions?.filter( (r) => r.address === activeAddress, @@ -129,7 +133,7 @@ export const ReactionButton = ({ <> {size === 'small' ? ( @@ -155,7 +159,7 @@ export const ReactionButton = ({ > diff --git a/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js b/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js new file mode 100644 index 00000000000..d032b41fdac --- /dev/null +++ b/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js @@ -0,0 +1,50 @@ +'use strict'; + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.changeColumn( + 'Reactions', + 'calculated_voting_weight', + { + type: Sequelize.NUMERIC(78, 0), // up to 78 digits with no decimal places + allowNull: true, + }, + { transaction }, + ); + await queryInterface.changeColumn( + 'Threads', + 'reaction_weights_sum', + { + type: Sequelize.NUMERIC(78, 0), // up to 78 digits with no decimal places + allowNull: true, + }, + { transaction }, + ); + await queryInterface.changeColumn( + 'Comments', + 'reaction_weights_sum', + { + type: Sequelize.NUMERIC(78, 0), // up to 78 digits with no decimal places + allowNull: true, + }, + { transaction }, + ); + await queryInterface.changeColumn( + 'Topics', + 'vote_weight_multiplier', + { + type: Sequelize.FLOAT, + allowNull: true, + }, + { transaction }, + ); + }); + }, + + async down(queryInterface, Sequelize) { + // irreversible because converting back to integer + // may result in overflow + }, +}; diff --git a/packages/commonwealth/shared/adapters/currency.ts b/packages/commonwealth/shared/adapters/currency.ts index f349894d8d3..87effb34125 100644 --- a/packages/commonwealth/shared/adapters/currency.ts +++ b/packages/commonwealth/shared/adapters/currency.ts @@ -1,4 +1,5 @@ import BN from 'bn.js'; +import { BigNumber } from 'ethers'; // duplicated in helpers.ts export function formatNumberShort(num: number) { @@ -16,18 +17,54 @@ export function formatNumberShort(num: number) { return num > 1_000_000_000_000 ? `${round(num / 1_000_000_000_000)}t` : num > 1_000_000_000 - ? `${round(num / 1_000_000_000)}b` - : num > 1_000_000 - ? `${round(num / 1_000_000)}m` - : num > 1_000 - ? `${round(num / 1_000)}k` - : num > 0.1 - ? round(num) - : num > 0.01 - ? precise(num, 2) - : num > 0.001 - ? precise(num, 1) - : num.toString(); + ? `${round(num / 1_000_000_000)}b` + : num > 1_000_000 + ? `${round(num / 1_000_000)}m` + : num > 1_000 + ? `${round(num / 1_000)}k` + : num > 0.1 + ? round(num) + : num > 0.01 + ? precise(num, 2) + : num > 0.001 + ? precise(num, 1) + : num.toString(); +} + +export function formatBigNumberShort(num: BigNumber) { + const thousand = BigNumber.from(1_000); + const million = BigNumber.from(1_000_000); + const billion = BigNumber.from(1_000_000_000); + const trillion = BigNumber.from(1_000_000_000_000); + + const round = (n: BigNumber, divisor: BigNumber, digits = 2) => { + const divided = n.div(divisor); + const factor = BigNumber.from(10).pow(digits); + return divided.mul(factor).div(factor).toString(); + }; + + const precise = (n: BigNumber, digits = 3) => { + // We need to use floating point for precise formatting + const preciseNum = parseFloat(n.toString()); + return preciseNum.toPrecision(digits); + }; + + // Compare BigNumber values and format accordingly + return num.gt(trillion) + ? `${round(num, trillion)}t` + : num.gt(billion) + ? `${round(num, billion)}b` + : num.gt(million) + ? `${round(num, million)}m` + : num.gt(thousand) + ? `${round(num, thousand)}k` + : num.gt(BigNumber.from(10).pow(1)) + ? round(num, BigNumber.from(1)) + : num.gt(BigNumber.from(10).pow(-1)) + ? precise(num, 2) + : num.gt(BigNumber.from(10).pow(-2)) + ? precise(num, 1) + : num.toString(); } const nf = new Intl.NumberFormat(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79a7841919f..6ca563ae2e3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -738,6 +738,9 @@ importers: '@cosmjs/encoding': specifier: 0.32.3 version: 0.32.3 + '@ethersproject/bignumber': + specifier: ^5.7.0 + version: 5.7.0 '@ipld/dag-json': specifier: ^10.2.0 version: 10.2.0 @@ -15583,8 +15586,8 @@ snapshots: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-bucket-endpoint': 3.577.0 @@ -15641,11 +15644,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0)': + '@aws-sdk/client-sso-oidc@3.577.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15684,7 +15687,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.577.0': @@ -15730,11 +15732,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.577.0': + '@aws-sdk/client-sts@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15773,6 +15775,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.576.0': @@ -15806,7 +15809,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-process': 3.577.0 '@aws-sdk/credential-provider-sso': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) @@ -15863,7 +15866,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/types': 3.0.0 @@ -16001,7 +16004,7 @@ snapshots: '@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/shared-ini-file-loader': 3.0.0 From cca55f2bb7b3dd9f324f5054ae20d7b0048ff357 Mon Sep 17 00:00:00 2001 From: israellund Date: Wed, 16 Oct 2024 18:27:13 -0400 Subject: [PATCH 197/425] changed collorators to names and made clickable --- .../AuthorAndPublishInfo.scss | 9 ++++++ .../AuthorAndPublishInfo.tsx | 29 ++++++++++++------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.scss b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.scss index e05bf8c9bdc..7945635197f 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.scss +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.scss @@ -120,4 +120,13 @@ display: flex; flex-direction: column; gap: 4px; + + .collaborator-user-name { + color: $neutral-600; + } + + .collaborator-user-name:hover { + text-decoration: underline; + text-decoration-color: $neutral-600; + } } diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx index 612ea2df977..f9151a98747 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx @@ -2,6 +2,7 @@ import { PopperPlacementType } from '@mui/base/Popper'; import { threadStageToLabel } from 'helpers'; import moment from 'moment'; import React, { useRef } from 'react'; +import { Link } from 'react-router-dom'; import { useGetCommunityByIdQuery } from 'state/api/communities'; import { ArchiveTrayWithTooltip } from 'views/components/ArchiveTrayWithTooltip'; import { LockWithTooltip } from 'views/components/LockWithTooltip'; @@ -188,17 +189,23 @@ export const AuthorAndPublishInfo = ({ content={
      {/*@ts-expect-error */} - {collaboratorsInfo.map(({ address, community_id, User }) => { - return ( - - ); - })} + {collaboratorsInfo.map( + ({ + User, + }: { + address: string; + community_id: string; + User: { id: number; profile: UserProfile }; + }) => { + return ( + + + {User.profile.name} + + + ); + }, + )}
      } {...popoverProps} From 70d8017b75f37d029d76d0d7fda63ea29972a0b8 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Thu, 17 Oct 2024 01:59:54 +0300 Subject: [PATCH 198/425] datadog script fixes v1 --- Dockerfile.datadog | 1 + datadog-config/datadog.yaml | 4553 +++++++++++++++++++++++++++++++++ scripts/datadog-entrypoint.sh | 163 +- 3 files changed, 4712 insertions(+), 5 deletions(-) diff --git a/Dockerfile.datadog b/Dockerfile.datadog index 60b6aa2d250..186bd2d097d 100644 --- a/Dockerfile.datadog +++ b/Dockerfile.datadog @@ -27,4 +27,5 @@ EXPOSE 8125/udp 8126/tcp RUN mkdir -p /var/run/datadog +# output dir MUST match directory set to DD_CONF_DIR in datadog-entrypoint.sh COPY datadog-config/ /etc/datadog-agent/ \ No newline at end of file diff --git a/datadog-config/datadog.yaml b/datadog-config/datadog.yaml index e69de29bb2d..af5c31ab8c1 100644 --- a/datadog-config/datadog.yaml +++ b/datadog-config/datadog.yaml @@ -0,0 +1,4553 @@ +{{ if .Common }} +######################### +## Basic Configuration ## +######################### + +## @param api_key - string - required +## @env DD_API_KEY - string - required +## The Datadog API key used by your Agent to submit metrics and events to Datadog. +## Create a new API key here: https://app.datadoghq.com/organization-settings/api-keys . +## Read more about API keys here: https://docs.datadoghq.com/account_management/api-app-keys/#api-keys . +#api_key: + +## @param app_key - string - optional +## The application key used to access Datadog's programatic API. +## Create a new application key here: https://app.datadoghq.com/organization-settings/application-keys . +## Read more about application keys here: https://docs.datadoghq.com/account_management/api-app-keys/#application-keys . +# +# app_key: + +## @param site - string - optional - default: datadoghq.com +## @env DD_SITE - string - optional - default: datadoghq.com +## The site of the Datadog intake to send Agent data to. +## Set to 'datadoghq.eu' to send data to the EU site. +## Set to 'us3.datadoghq.com' to send data to the US3 site. +## Set to 'us5.datadoghq.com' to send data to the US5 site. +## Set to 'ap1.datadoghq.com' to send data to the AP1 site. +## Set to 'ddog-gov.com' to send data to the US1-FED site. +# +# site: datadoghq.com + +## @param dd_url - string - optional - default: https://app.datadoghq.com +## @env DD_DD_URL - string - optional - default: https://app.datadoghq.com +## @env DD_URL - string - optional - default: https://app.datadoghq.com +## The host of the Datadog intake server to send metrics to, only set this option +## if you need the Agent to send metrics to a custom URL, it overrides the site +## setting defined in "site". It does not affect APM, Logs or Live Process intake which have their +## own "*_dd_url" settings. +## If DD_DD_URL and DD_URL are both set, DD_DD_URL is used in priority. +# +# dd_url: https://app.datadoghq.com + +## @param proxy - custom object - optional +## @env DD_PROXY_HTTP - string - optional +## @env DD_PROXY_HTTPS - string - optional +## @env DD_PROXY_NO_PROXY - space separated list of strings - optional +## If you need a proxy to connect to the Internet, provide it here (default: +## disabled). Refer to https://docs.datadoghq.com/agent/proxy/ to understand how to use these settings. +## For Logs proxy information, refer to https://docs.datadoghq.com/agent/proxy/#proxy-for-logs +# +# proxy: +# https: http://:@: +# http: http://:@: +# no_proxy: +# - +# - + +## @param skip_ssl_validation - boolean - optional - default: false +## @env DD_SKIP_SSL_VALIDATION - boolean - optional - default: false +## Setting this option to "true" tells the Agent to skip validation of SSL/TLS certificates. +# +# skip_ssl_validation: false + +## @param sslkeylogfile - string - optional - default: "" +## @env DD_SSLKEYLOGFILE - string - optional - default: "" +## sslkeylogfile specifies a destination for TLS master secrets +## in NSS key log format to allow external programs +## such as Wireshark to decrypt TLS connections. +## For more details, see https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format. +## Use of sslkeylogfile compromises security and should only be +## used for debugging. +# sslkeylogfile: "" + + +## @param min_tls_version - string - optional - default: "tlsv1.2" +## @env DD_MIN_TLS_VERSION - string - optional - default: "tlsv1.2" +## This option defines the minimum TLS version that will be used when +## submitting data to the Datadog intake specified in "site" or "dd_url". +## This parameter defaults to "tlsv1.2". +## Possible values are: tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3; values are case- +## insensitive. +# +# min_tls_version: "tlsv1.2" + +## @param hostname - string - optional - default: auto-detected +## @env DD_HOSTNAME - string - optional - default: auto-detected +## Force the hostname name. +# +# hostname: + +## @param hostname_file - string - optional +## @env DD_HOSTNAME_FILE - string - optional +## In some environments, auto-detection of the hostname is not adequate and +## environment variables cannot be used to set the value. In such cases, the +## file on the host can also be used provide an appropriate value. If +## 'hostname' value has been set to a non-empty value, this option is ignored. +# +# hostname_file: /var/lib/cloud/data/instance-id + +## @param hostname_fqdn - boolean - optional - default: false +## @env DD_HOSTNAME_FQDN - boolean - optional - default: false +## When the Agent relies on the OS to determine the hostname, make it use the +## FQDN instead of the short hostname. Recommended value: true +## More information at https://dtdg.co/flag-hostname-fqdn +# +# hostname_fqdn: false + +## @param hostname_trust_uts_namespace - boolean - optional - default: false +## @env DD_HOSTNAME_TRUST_UTS_NAMESPACE - boolean - optional - default: false +## By default the Agent does not trust the hostname value retrieved from non-root UTS namespace, +## as it's usually a generated name, unrelated to the host (e.g. when running in a container). +## When enabled, the Agent will trust the value retrieved from non-root UTS namespace instead of failing +## hostname resolution. +## (Linux only) +# +# hostname_trust_uts_namespace: false + +## @param host_aliases - list of strings - optional +## @env DD_HOST_ALIASES - space separated list of strings - optional +## List of host aliases to report in addition to any aliases collected +## automatically from cloud providers. +## More information at +## https://docs.datadoghq.com/agent/faq/how-datadog-agent-determines-the-hostname/?tab=agentv6v7#host-aliases +# +# host_aliases: +# - +# - + +## @param tags - list of key:value elements - optional +## @env DD_TAGS - space separated list of strings - optional +## List of host tags. Attached in-app to every metric, event, log, trace, and service check emitted by this Agent. +## +## This configuration value merges with `DD_EXTRA_TAGS`, allowing some +## tags to be set in a configuration file (`tags`), and additional tags to be added +## with an environment variable (`DD_EXTRA_TAGS`). +## +## Learn more about tagging: https://docs.datadoghq.com/tagging/ +# +# tags: +# - team:infra +# - : + +## @param extra_tags - list of key:value elements - optional +## @env DD_EXTRA_TAGS - space separated list of strings - optional +## List of host tags. Attached in-app to every metric, event, log, trace, and service check emitted by this Agent. +## +## This configuration value merges with `tags`, allowing some +## tags to be set in a configuration file (`tags`), and additional tags to be added +## with an environment variable (`DD_EXTRA_TAGS`). +## +## Learn more about tagging: https://docs.datadoghq.com/tagging/ +# +# extra_tags: +# - region:northerly +# - : + +## @param env - string - optional +## @env DD_ENV - string - optional +## The environment name where the agent is running. Attached in-app to every +## metric, event, log, trace, and service check emitted by this Agent. +# +# env: + +## @param tag_value_split_separator - map - optional +## @env DD_TAG_VALUE_SPLIT_SEPARATOR - list of key:value strings - optional +## Split tag values according to a given separator. Only applies to host tags, +## and tags coming from container integrations. It does not apply to tags on dogstatsd metrics, +## and tags collected by other integrations. +## +## Example use-case: +## +## With a raw collected tag "foo:1;2;3", using the following configuration: +## +## tag_value_split_separator: +## foo: ; +## +## results in the raw tag being transformed into "foo:1", "foo:2", "foo:3" tags +# +# tag_value_split_separator: +# : + +## @param checks_tag_cardinality - string - optional - default: low +## @env DD_CHECKS_TAG_CARDINALITY - string - optional - default: low +## Configure the level of granularity of tags to send for checks metrics and events. Choices are: +## * low: add tags about low-cardinality objects (clusters, hosts, deployments, container images, ...) +## * orchestrator: add tags about pod, (in Kubernetes), or task (in ECS or Mesos) -level of cardinality +## * high: add tags about high-cardinality objects (individual containers, user IDs in requests, ...) +## WARNING: sending container tags for checks metrics may create more metrics +## (one per container instead of one per host). This may impact your custom metrics billing. +# +# checks_tag_cardinality: low + +## @param dogstatsd_tag_cardinality - string - optional - default: low +## @env DD_DOGSTATSD_TAG_CARDINALITY - string - optional - default: low +## Configure the level of granularity of tags to send for DogStatsD metrics and events. Choices are: +## * low: add tags about low-cardinality objects (clusters, hosts, deployments, container images, ...) +## * orchestrator: add tags about pod, (in Kubernetes), or task (in ECS or Mesos) -level of cardinality +## * high: add tags about high-cardinality objects (individual containers, user IDs in requests, ...) +## +## WARNING: sending container tags for dogstatsd metrics may create more metrics +## (one per container instead of one per host). This may impact your custom metrics billing. +# +# dogstatsd_tag_cardinality: low + +## @param histogram_aggregates - list of strings - optional - default: ["max", "median", "avg", "count"] +## @env DD_HISTOGRAM_AGGREGATES - space separated list of strings - optional - default: max median avg count +## Configure which aggregated value to compute. +## Possible values are: min, max, median, avg, sum and count. +# +# histogram_aggregates: +# - max +# - median +# - avg +# - count + +## @param histogram_percentiles - list of strings - optional - default: ["0.95"] +## @env DD_HISTOGRAM_PERCENTILES - space separated list of strings - optional - default: 0.95 +## Configure which percentiles are computed by the Agent. It must be a list of float between 0 and 1. +## Warning: percentiles must be specified as yaml strings +# +# histogram_percentiles: +# - "0.95" + +## @param histogram_copy_to_distribution - boolean - optional - default: false +## @env DD_HISTOGRAM_COPY_TO_DISTRIBUTION - boolean - optional - default: false +## Copy histogram values to distributions for true global distributions (in beta) +## Note: This increases the number of custom metrics created. +# +# histogram_copy_to_distribution: false + +## @param histogram_copy_to_distribution_prefix - string - optional +## @env DD_HISTOGRAM_COPY_TO_DISTRIBUTION_PREFIX - string - optional +## A prefix to add to distribution metrics created when histogram_copy_to_distributions is true +# +# histogram_copy_to_distribution_prefix: "" + +## @param aggregator_stop_timeout - integer - optional - default: 2 +## @env DD_AGGREGATOR_STOP_TIMEOUT - integer - optional - default: 2 +## When stopping the agent, the Aggregator will try to flush out data ready for +## aggregation (metrics, events, ...). Data are flushed to the Forwarder in order +## to be sent to Datadog, therefore the Agent might take at most +## 'aggregator_stop_timeout'+'forwarder_stop_timeout' seconds to exit. +## +## You can set the maximum amount of time, in seconds, allocated to the +## Aggregator to do so. You can disable this feature by setting +## 'aggregator_stop_timeout' to 0. +# +# aggregator_stop_timeout: 2 + +## @param aggregator_buffer_size - integer - optional - default: 100 +## @env DD_AGGREGATOR_BUFFER_SIZE - integer - optional - default: 100 +## The default buffer size for the aggregator use a sane value for most of the +## use cases, however, it could be useful to manually set it in order to trade +## RSS usage with better performances. +# +# aggregator_buffer_size: 100 + +## @param forwarder_timeout - integer - optional - default: 20 +## @env DD_FORWARDER_TIMEOUT - integer - optional - default: 20 +## Forwarder timeout in seconds +# +# forwarder_timeout: 20 + +## @param forwarder_retry_queue_payloads_max_size - integer - optional - default: 15728640 (15MB) +## @env DD_FORWARDER_RETRY_QUEUE_PAYLOADS_MAX_SIZE - integer - optional - default: 15728640 (15MB) +## It defines the maximum size in bytes of all the payloads in the forwarder's retry queue. +## The actual memory used is greater than the payloads size as there are extra fields like HTTP headers, +## but no more than 2.5 times the payload size. +# +# forwarder_retry_queue_payloads_max_size: 15728640 + +## @param forwarder_num_workers - integer - optional - default: 1 +## @env DD_FORWARDER_NUM_WORKERS - integer - optional - default: 1 +## The number of workers used by the forwarder. +# +# forwarder_num_workers: 1 + +## @param forwarder_stop_timeout - integer - optional - default: 2 +## @env DD_FORWARDER_STOP_TIMEOUT - integer - optional - default: 2 +## When stopping the agent, the Forwarder will try to flush all new +## transactions (not the ones in retry state). New transactions will be created +## as the Aggregator flush it's internal data too, therefore the Agent might take +## at most 'aggregator_stop_timeout'+'forwarder_stop_timeout' seconds to exit. +## +## You can set the maximum amount of time, in seconds, allocated to the +## Forwarder to send those transactions. You can disable this feature by setting +## 'forwarder_stop_timeout' to 0. +# +# forwarder_stop_timeout: 2 + +## @param forwarder_storage_max_size_in_bytes - integer - optional - default: 0 +## @env DD_FORWARDER_STORAGE_MAX_SIZE_IN_BYTES - integer - optional - default: 0 +## When the retry queue of the forwarder is full, `forwarder_storage_max_size_in_bytes` +## defines the amount of disk space the Agent can use to store transactions on the disk. +## When `forwarder_storage_max_size_in_bytes` is `0`, the transactions are never stored on the disk. +# +# forwarder_storage_max_size_in_bytes: 50000000 + +## @param forwarder_storage_max_disk_ratio - float - optional - default: 0.8 +## @env DD_FORWARDER_STORAGE_MAX_DISK_RATIO - float - optional - default: 0.8 +## `forwarder_storage_max_disk_ratio` defines the disk capacity limit for storing transactions. +## `0.8` means the Agent can store transactions on disk until `forwarder_storage_max_size_in_bytes` +## is reached or when the disk mount for `forwarder_storage_path` exceeds 80% of the disk capacity, +## whichever is lower. +# +# forwarder_storage_max_disk_ratio: 0.8 + +## @param forwarder_outdated_file_in_days - integer - optional - default: 10 +## @env DD_FORWARDER_OUTDATED_FILE_IN_DAYS - integer - optional - default: 10 +## This value specifies how many days the overflow transactions will remain valid before +## being discarded. During the Agent restart, if a retry file contains transactions that were +## created more than `forwarder_outdated_file_in_days` days ago, they are removed. +# +# forwarder_outdated_file_in_days: 10 + +## @param forwarder_high_prio_buffer_size - int - optional - default: 100 +## Defines the size of the high prio buffer. +## Increasing the buffer size can help if payload drops occur due to high prio buffer being full. +# +# forwarder_high_prio_buffer_size: 100 + +## @param forwarder_low_prio_buffer_size - int - optional - default: 100 +## Defines the size of the low prio buffer. +# +# forwarder_low_prio_buffer_size: 100 + +## @param forwarder_requeue_buffer_size - int - optional - default: 100 +## Defines the size of the requeue prio buffer. +# +# forwarder_requeue_buffer_size: 100 + +## @param forwarder_backoff_base - int - optional - default: 2 +## @env DD_FORWARDER_BACKOFF_BASE - integer - optional - default: 2 +## Defines the rate of exponential growth, and the first retry interval range. +## Do not set a lower value than the default. You may increase it if you use a proxy that benefits from a +## higher rate of exponential growth. +# forwarder_backoff_base: 2 + +## @param forwarder_backoff_max - int - optional - default: 64 +## @env DD_FORWARDER_BACKOFF_MAX - integer - optional - default: 64 +## Defines the maximum number of seconds to wait for a retry. +## Do not set a lower value than the default. You may increase it if you use a proxy that benefits from a +## higher maximum backoff time. +# forwarder_backoff_max: 64 + +## @param cloud_provider_metadata - list of strings - optional - default: ["aws", "gcp", "azure", "alibaba", "oracle", "ibm"] +## @env DD_CLOUD_PROVIDER_METADATA - space separated list of strings - optional - default: aws gcp azure alibaba oracle ibm +## This option restricts which cloud provider endpoint will be used by the +## agent to retrieve metadata. By default the agent will try # AWS, GCP, Azure +## and alibaba providers. Some cloud provider are not enabled by default to not +## trigger security alert when querying unknown IP (for example, when enabling +## Tencent on AWS). +## Setting an empty list will disable querying any cloud metadata endpoints +## (falling back on system metadata). Disabling metadata for the cloud provider in which an Agent runs may result in +## duplicated hosts in your Datadog account and missing Autodiscovery features +## +## Possible values are: +## "aws" AWS EC2, ECS/Fargate +## "gcp" Google Cloud Provider +## "azure" Azure +## "alibaba" Alibaba +## "tencent" Tencent +## "oracle" Oracle Cloud +## "ibm" IBM Cloud +# +# cloud_provider_metadata: +# - "aws" +# - "gcp" +# - "azure" +# - "alibaba" +# - "oracle" +# - "ibm" + +## @param collect_ec2_tags - boolean - optional - default: false +## @env DD_COLLECT_EC2_TAGS - boolean - optional - default: false +## Collect AWS EC2 custom tags as host tags. +## Requires one of: +## - `collect_ec2_tags_use_imds: true` and configuration of the +## EC2 instance to allow tags in instance metadata; or +## - configuration of the EC2 instance to have an IAM role with +## the `EC2:DescribeTags` permission. +## See docs for further details: +## https://docs.datadoghq.com/integrations/faq/how-do-i-pull-my-ec2-tags-without-using-the-aws-integration/ +# +# collect_ec2_tags: false + +## @param exclude_ec2_tags - list of strings - optional - default: [] +## @env DD_EXCLUDE_EC2_TAGS - space separated list of strings - optional - default: [] +## EC2 tags to exclude from being converted into host tags -- only applicable when collect_ec2_tags is true. This does +## not impact tags collected by the AWS Integration (see https://docs.datadoghq.com/integrations/amazon_web_services/ +## for more information on the AWS integration). +# +# exclude_ec2_tags: [] + +## @param collect_ec2_tags_use_imds - boolean - optional - default: false +## @env DD_COLLECT_EC2_TAGS_USE_IMDS - boolean - optional - default: false +## Use instance metadata service (IMDS) instead of EC2 API to collect AWS EC2 custom tags. +## Requires `collect_ec2_tags`. +# +# collect_ec2_tags_use_imds: false + +## @param ec2_metadata_timeout - integer - optional - default: 300 +## @env DD_EC2_METADATA_TIMEOUT - integer - optional - default: 300 +## Timeout in milliseconds on calls to the AWS EC2 metadata endpoints. +# +# ec2_metadata_timeout: 300 + +## @param ec2_prefer_imdsv2 - boolean - optional - default: false +## @env DD_EC2_PREFER_IMDSV2 - boolean - optional - default: false +## If this flag is true then the agent will request EC2 metadata using IMDS v2, +## which offers additional security for accessing metadata. However, in some +## situations (such as a containerized agent on a plain EC2 instance) it may +## require additional configuration on the AWS side. See the AWS guidelines +## for further details: +## https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html#instance-metadata-transition-to-version-2 +# +# ec2_prefer_imdsv2: false + +## @param collect_gce_tags - boolean - optional - default: true +## @env DD_COLLECT_GCE_TAGS - boolean - optional - default: true +## Collect Google Cloud Engine metadata as host tags +# +# collect_gce_tags: true + +## @param exclude_gce_tags - list of strings - optional - default: ["bosh_settings" ,"cli-cert" ,"common-psm1" ,"configure-sh" ,"containerd-configure-sh" ,"disable-address-manager" ,"disable-legacy-endpoints" ,"enable-oslogin" ,"gce-container-declaration" ,"google-container-manifest" ,"ipsec-cert" ,"k8s-node-setup-psm1" ,"kube-env" ,"kubeconfig" ,"kubelet-config" ,"serial-port-logging-enable" ,"shutdown-script" ,"ssh-keys" ,"sshKeys" ,"ssl-cert" ,"startup-script" ,"user-data" ,"windows-keys" ,"windows-startup-script-ps1"] +## @env DD_EXCLUDE_GCE_TAGS - space separated list of strings - optional - default: bosh_settings cli-cert common-psm1 configure-sh containerd-configure-sh disable-address-manager disable-legacy-endpoints enable-oslogin gce-container-declaration google-container-manifest ipsec-cert k8s-node-setup-psm1 kube-env kubeconfig kubelet-config serial-port-logging-enable shutdown-script ssh-keys sshKeys ssl-cert startup-script user-data windows-keys windows-startup-script-ps1 +## Google Cloud Engine metadata attribute to exclude from being converted into +## host tags -- only applicable when collect_gce_tags is true. +# +# exclude_gce_tags: +# - "bosh_settings" +# - "cli-cert" +# - "common-psm1" +# - "configure-sh" +# - "containerd-configure-sh" +# - "disable-address-manager" +# - "disable-legacy-endpoints" +# - "enable-oslogin" +# - "gce-container-declaration" +# - "google-container-manifest" +# - "ipsec-cert" +# - "k8s-node-setup-psm1" +# - "kube-env" +# - "kubeconfig" +# - "kubelet-config" +# - "serial-port-logging-enable" +# - "shutdown-script" +# - "ssh-keys" +# - "sshKeys" +# - "ssl-cert" +# - "startup-script" +# - "user-data" +# - "windows-keys" +# - "windows-startup-script-ps1" + +## @param gce_send_project_id_tag - bool - optional - default: false +## @env DD_GCE_SEND_PROJECT_ID_TAG - bool - optional - default: false +## Send the project ID host tag with the `project_id:` tag key in addition to +## the `project:` tag key. +# +# gce_send_project_id_tag: false + +## @param gce_metadata_timeout - integer - optional - default: 1000 +## @env DD_GCE_METADATA_TIMEOUT - integer - optional - default: 1000 +## Timeout in milliseconds on calls to the GCE metadata endpoints. +# +# gce_metadata_timeout: 1000 + +## @param azure_hostname_style - string - optional - default: "os" +## @env DD_AZURE_HOSTNAME_STYLE - string - optional - default: "os" +## Changes how agent hostname is set on Azure virtual machines. +## +## Possible values: +## "os" - use the hostname reported by the operating system (default) +## "name" - use the instance name +## "name_and_resource_group" - use a combination of the instance name and resource group name +## "full" - use a combination of the instance name, resource group name and subscription id +## "vmid" - use the instance id +# +# azure_hostname_style: "os" + +## @param scrubber - custom object - optional +## Configuration for scrubbing sensitive information from the Agent's logs, configuration and flares. +# +# scrubber: +# + ## @param scrubber.additional_keys - list of strings - optional + ## @env DD_SCRUBBER_ADDITIONAL_KEYS - space-separated list of strings - optional + ## By default, the Agent removes known sensitive keys from Agent and integrations YAML configs before + ## including them in the flare. + ## Use this parameter to define additional sensitive keys that the Agent should scrub from + ## the YAML files included in the flare. + # + # additional_keys: + # - "sensitive_key_1" + # - "sensitive_key_2" + +## @param no_proxy_nonexact_match - boolean - optional - default: false +## @env DD_NO_PROXY_NONEXACT_MATCH - boolean - optional - default: false +## Enable more flexible no_proxy matching. See https://godoc.org/golang.org/x/net/http/httpproxy#Config +## for more information on accepted matching criteria. +# +# no_proxy_nonexact_match: false + +## @param use_proxy_for_cloud_metadata - boolean - optional - default: false +## @env DD_USE_PROXY_FOR_CLOUD_METADATA - boolean - optional - default: false +## By default cloud provider IP's are added to the transport's `no_proxy` list. +## Use this parameter to remove them from the `no_proxy` list. +# +# use_proxy_for_cloud_metadata: false + +## @param inventories_configuration_enabled - boolean - optional - default: true +## @env DD_INVENTORIES_CONFIGURATION_ENABLED - boolean - optional - default: true +## By default the Agent sends its own configuration to Datadog to be displayed in the `Agent Configuration` section of the host +## detail panel. See https://docs.datadoghq.com/infrastructure/list/#agent-configuration for more information. +## +## The Agent configuration is scrubbed of any sensitive information. +# +# inventories_configuration_enabled: true + +## @param auto_exit - custom object - optional +## Configuration for the automatic exit mechanism: the Agent stops when some conditions are met. +# +# auto_exit: + + ## @param noprocess - custom object - optional + ## Configure the `noprocess` automatic exit method. + ## Detect when no other processes (non-agent) are running to trigger automatic exit. `HOST_PROC` is taken into account when gathering processes. + ## Feature is only supported on POSIX systems. + # + # noprocess: + ## @param enabled - boolean - optional - default: false + ## @env DD_AUTO_EXIT_NOPROCESS_ENABLED - boolean - optional - default: false + ## Enable the `noprocess` method + # + # enabled: false + + ## @param excluded_processes - list of strings - optional + ## @env DD_AUTO_EXIT_NOPROCESS_EXCLUDED_PROCESSES - space separated list of strings - optional + ## List of regular expressions to exclude extra processes (on top of built-in list). + # + # excluded_processes: [] + + ## @param validation_period - integer - optional - default: 60 + ## @env DD_AUTO_EXIT_VALIDATION_PERIOD - integer - optional - default: 60 + ## Time (in seconds) delay during which the auto exit validates that the selected method continuously detects an exit condition, before exiting. + ## The value is verified every 30s. By default, three consecutive checks need to return true to trigger an automatic exit. + # + # validation_period: 60 + + +## @param fips - custom object - optional +## [BETA] Enter specific configurations for using the FIPS proxy. +## Uncomment this parameter and the one below to enable them. +# +# fips: + + ## @param enabled - boolean - optional - default: false + ## @env DD_FIPS_ENABLED - boolean - optional - default: false + ## This feature is in BETA. + ## + ## Enable the use of the FIPS proxy to send data to the DataDog backend. Enabling this will force all outgoing traffic + ## from the Agent to the local proxy. + ## It's important to note that enabling this will not make the Datadog Agent FIPS compliant, but will force all outgoing + ## traffic to a local FIPS compliant proxy. The FIPS proxy need to be installed locally in addition to the agent. + ## + ## When setting this to true the following settings would be overridden, ignoring the values from the + ## configuration: + ## - dd_url + ## - apm_config.apm_dd_url + ## - apm_config.profiling_dd_url + ## - apm_config.telemetry.dd_url + ## - process_config.process_dd_url + ## - logs_config.use_http + ## - logs_config.logs_no_ssl + ## - logs_config.logs_dd_url + ## - database_monitoring.metrics.dd_url + ## - database_monitoring.activity.dd_url + ## - database_monitoring.samples.dd_url + ## - compliance_config.endpoints.dd_url + ## - runtime_security_config.endpoints.dd_url + ## - network_devices.metadata.dd_url + # + ## The agent will also ignore 'proxy.*' settings and environment variables related to proxy (HTTP_PROXY, HTTPS_PROXY, + ## DD_PROXY_HTTP and DD_PROXY_HTTPS). + # + # enabled: false + + ## @param local_address - string - optional - default: localhost + ## @env DD_FIPS_LOCAL_ADDRESS - string - optional - default: localhost + ## The local address that the FIPS proxy will bind ports on. + # + # local_address: localhost + +## @param observability_pipelines_worker - custom object - optional +## Configuration for forwarding telemetry to an Observability Pipelines Worker instead of Datadog. +## https://www.datadoghq.com/product/observability-pipelines/ +## Note: This config is interchangeable with `vector` +# +# observability_pipelines_worker: + + ## @param metrics - custom object - optional + ## Specific configurations for metrics + # + # metrics: + + ## @param enabled - boolean - optional - default: false + ## @env DD_OBSERVABILITY_PIPELINES_WORKER_METRICS_ENABLED - boolean - optional - default: false + ## Enables forwarding of metrics to an Observability Pipelines Worker + # + # enabled: false + + ## @param url - string - optional - default: "" + ## @env DD_OBSERVABILITY_PIPELINES_WORKER_METRICS_URL - string - optional - default: "" + ## URL endpoint for the Observability Pipelines Worker to send metrics to + # + # url: "http//127.0.0.1:8080" + + ## @param logs - custom object - optional + ## Specific configurations for logs + # + # logs: + + ## @param enabled - boolean - optional - default: false + ## @env DD_OBSERVABILITY_PIPELINES_WORKER_LOGS_ENABLED - boolean - optional - default: false + ## Enables forwarding of logs to an Observability Pipelines Worker + # + # enabled: false + + ## @param url - string - optional - default: "" + ## @env DD_OBSERVABILITY_PIPELINES_WORKER_LOGS_URL - string - optional - default: "" + ## URL endpoint for the Observability Pipelines Worker to send logs to + # + # url: "http//127.0.0.1:8080" + + ## @param traces - custom object - optional + ## Specific configurations for traces + # + # traces: + + ## @param enabled - boolean - optional - default: false + ## @env DD_OBSERVABILITY_PIPELINES_WORKER_TRACES_ENABLED - boolean - optional - default: false + ## Enables forwarding of traces to an Observability Pipelines Worker + # + # enabled: false + + ## @param url - string - optional - default: "" + ## @env DD_OBSERVABILITY_PIPELINES_WORKER_TRACES_URL - string - optional - default: "" + ## URL endpoint for the Observability Pipelines Worker to send traces to + # + # url: "http//127.0.0.1:8080" + +{{ end }} +{{- if .Agent }} +{{- if .Python }} +{{- if .BothPythonPresent -}} +## @param python_version - integer - optional - default: 2 +## @env DD_PYTHON_VERSION - integer - optional - default: 2 +## The major version of Python used to run integrations and custom checks. +## The only supported values are 2 (to use Python 2) or 3 (to use Python 3). +## Do not change this option when using the official Docker Agent images. +# +# python_version: 2 + +{{ end -}} +{{ end }} + +############################ +## Advanced Configuration ## +############################ + +## @param confd_path - string - optional +## @env DD_CONFD_PATH - string - optional +## The path containing check configuration files. By default, uses the conf.d folder +## located in the Agent configuration folder. +# +# confd_path: "" + +## @param additional_checksd - string - optional +## @env DD_ADDITIONAL_CHECKSD - string - optional +## Additional path indicating where to search for Python checks. By default, uses the checks.d folder +## located in the Agent configuration folder. +# +# additional_checksd: + +## @param expvar_port - integer - optional - default: 5000 +## @env DD_EXPVAR_PORT - integer - optional - default: 5000 +## The port for the go_expvar server. +# +# expvar_port: 5000 + +## @param cmd_port - integer - optional - default: 5001 +## @env DD_CMD_PORT - integer - optional - default: 5001 +## The port on which the IPC api listens. +# +# cmd_port: 5001 + +## @param GUI_port - integer - optional +## @env DD_GUI_PORT - integer - optional +## The port for the browser GUI to be served. +## Setting 'GUI_port: -1' turns off the GUI completely +## Default is: +## * Windows & macOS : `5002` +## * Linux: `-1` +## +# +# GUI_port: + +## @param GUI_session_expiration - duration - optional +## @env GUI_SESSION_EXPIRATION - duration - optional +## The duration after which a GUI session will expire. +## Setting 'GUI_SESSION_EXPIRATION: 0' disable session expiration. +## Default is "0s" (sessions do not expire). +# +# GUI_session_expiration: + +## @param health_port - integer - optional - default: 0 +## @env DD_HEALTH_PORT - integer - optional - default: 0 +## The Agent can expose its health check on a dedicated http port. +## This is useful for orchestrators that support http probes. +## Default is 0 (disabled), set a valid port number (eg. 5555) to enable. +# +# health_port: 0 + +## @param check_runners - integer - optional - default: 4 +## @env DD_CHECK_RUNNERS - integer - optional - default: 4 +## The `check_runners` refers to the number of concurrent check runners available for check instance execution. +## The scheduler attempts to spread the instances over the collection interval and will _at most_ be +## running the number of check runners instances concurrently. +## Setting the value to 1 would result in checks running sequentially. +## +## This is a sensitive setting, and we do NOT recommend changing the default number +## of check runners in the general case. The level of concurrency has effects on +## the Agent's: RSS memory, CPU load, resource contention overhead, etc. +# +# check_runners: 4 + +## @param enable_metadata_collection - boolean - optional - default: true +## @env DD_ENABLE_METADATA_COLLECTION - boolean - optional - default: true +## Metadata collection should always be enabled, except if you are running several +## agents/dsd instances per host. In that case, only one Agent should have it on. +## WARNING: disabling it on every Agent leads to display and billing issues. +# +# enable_metadata_collection: true + +## @param enable_gohai - boolean - optional - default: true +## @env DD_ENABLE_GOHAI - boolean - optional - default: true +## Enable the gohai collection of systems data. +# +# enable_gohai: true + +## @param enable_signing_metadata_collection - boolean - optional - default: true +## @env DD_ENABLE_SIGNING_METADATA_COLLECTION - boolean - optional - default: true +## Enable the Linux package signing medatada collection. +# +# enable_signing_metadata_collection: true + +## @param server_timeout - integer - optional - default: 30 +## @env DD_SERVER_TIMEOUT - integer - optional - default: 30 +## IPC api server timeout in seconds. +# +# server_timeout: 30 + +## @param procfs_path - string - optional +## @env DD_PROCFS_PATH - string - optional +## Some environments may have the procfs file system mounted in a miscellaneous +## location. The procfs_path configuration parameter provides a mechanism to +## override the standard default location: '/proc' - this setting trickles down to +## integrations and affect their behavior if they rely on the psutil python package. +# +# procfs_path: +{{ if .Python }} +## @param disable_py3_validation - boolean - optional - default: false +## @env DD_DISABLE_PY3_VALIDATION - boolean - optional - default: false +## Disable Python3 validation of python checks. +# +# disable_py3_validation: false +# +## @param python3_linter_timeout - integer - optional - default: 120 +## @env DD_PYTHON3_LINTER_TIMEOUT - integer - optional - default: 120 +## Timeout in seconds for validation of compatibility with python 3 when running python 2. +# +# python3_linter_timeout: 120 + +## @param memtrack_enabled - boolean - optional - default: true +## @env DD_MEMTRACK_ENABLED - boolean - optional - default: true +## Enables tracking of memory allocations made from the python runtime loader. +# +# memtrack_enabled: true + +## @param tracemalloc_debug - boolean - optional - default: false +## @env DD_TRACEMALLOC_DEBUG - boolean - optional - default: false +## Enables debugging with tracemalloc for python checks. +## Please note that this option is only available when python_version is set to "3". +## Additionally when this option becomes effective the number of check runners is +## overridden to 1. +# +# tracemalloc_debug: false + +## @param tracemalloc_include - string - optional +## @env DD_TRACEMALLOC_INCLUDE - string - optional +## Comma-separated list of Python checks to enable tracemalloc for when `tracemalloc_debug` is true. +## By default, all Python checks are enabled. +# +# tracemalloc_include: + +## @param tracemalloc_exclude - string - optional +## @env DD_TRACEMALLOC_EXCLUDE - string - optional +## Comma-separated list of Python checks to disable tracemalloc for when `tracemalloc_debug` is true. +## By default, all Python checks are enabled. This setting takes precedence over `tracemalloc_include`. +# +# tracemalloc_exclude: + +## @param windows_use_pythonpath - boolean - optional +## @env DD_WINDOWS_USE_PYTHONPATH - boolean - optional +## Whether to honour the value of the PYTHONPATH env var when set on Windows. +## Disabled by default, so we only load Python libraries bundled with the Agent. +# +# windows_use_pythonpath: false +{{ end }} +## @param secret_backend_command - string - optional +## @env DD_SECRET_BACKEND_COMMAND - string - optional +## `secret_backend_command` is the path to the script to execute to fetch secrets. +## The executable must have specific rights that differ on Windows and Linux. +## +## For more information see: https://github.com/DataDog/datadog-agent/blob/main/docs/agent/secrets.md +# +# secret_backend_command: + +## @param secret_backend_arguments - list of strings - optional +## @env DD_SECRET_BACKEND_ARGUMENTS - space separated list of strings - optional +## If secret_backend_command is set, specify here a list of arguments to give to the command at each run. +# +# secret_backend_arguments: +# - +# - + +## @param secret_backend_output_max_size - integer - optional - default: 1048576 +## @env DD_SECRET_BACKEND_OUTPUT_MAX_SIZE - integer - optional - default: 1048576 +## The size in bytes of the buffer used to store the command answer (apply to both stdout and stderr) +# +# secret_backend_output_max_size: 1048576 + +## @param secret_backend_timeout - integer - optional - default: 30 +## @env DD_SECRET_BACKEND_TIMEOUT - integer - optional - default: 30 +## The timeout to execute the command in second +# +# secret_backend_timeout: 30 + +## @param secret_backend_skip_checks - boolean - optional - default: false +## @env DD_SECRET_BACKEND_SKIP_CHECKS - boolean - optional - default: false +## Disable fetching secrets for check configurations +# +# secret_backend_skip_checks: false +# + +## @param secret_backend_remove_trailing_line_break - boolean - optional - default: false +## @env DD_SECRET_BACKEND_REMOVE_TRAILING_LINE_BREAK - boolean - optional - default: false +## Remove trailing line breaks from secrets returned by the secret_backend_command. Some secret management tools automatically +## add a line break when exporting secrets through files. +# +# secret_backend_remove_trailing_line_break: false + + +{{- if .InternalProfiling -}} +## @param profiling - custom object - optional +## Enter specific configurations for internal profiling. +## +## Please note that: +## 1. This does *not* enable profiling for user applications. +## 2. This only enables internal profiling of the agent go runtime. +## 3. To enable profiling for user apps please refer to +## https://docs.datadoghq.com/tracing/profiling/ +## 4. Enabling this feature will incur in billing charges and other +## unexpected side-effects (ie. agent profiles showing with your +## services). +## +## Uncomment this parameter and the one below to enable profiling. +# +# internal_profiling: +# + ## @param enabled - boolean - optional - default: false + ## @env DD_INTERNAL_PROFILING_ENABLED - boolean - optional - default: false + ## Enable internal profiling for the Agent process. + # + # enabled: false + +{{ end }} + + +{{ end -}} + +{{- if .LogsAgent }} + +################################## +## Log collection Configuration ## +################################## + +## @param logs_enabled - boolean - optional - default: false +## @env DD_LOGS_ENABLED - boolean - optional - default: false +## Enable Datadog Agent log collection by setting logs_enabled to true. +# +# logs_enabled: false + +## @param logs_config - custom object - optional +## Enter specific configurations for your Log collection. +## Uncomment this parameter and the one below to enable them. +## See https://docs.datadoghq.com/agent/logs/ +# +# logs_config: + + ## @param container_collect_all - boolean - optional - default: false + ## @env DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL - boolean - optional - default: false + ## Enable container log collection for all the containers (see ac_exclude to filter out containers) + # + # container_collect_all: false + + ## @param logs_dd_url - string - optional + ## @env DD_LOGS_CONFIG_LOGS_DD_URL - string - optional + ## Define the endpoint and port to hit when using a proxy for logs. The logs are forwarded in TCP + ## therefore the proxy must be able to handle TCP connections. + # + # logs_dd_url: : + + ## @param logs_no_ssl - boolean - optional - default: false + ## @env DD_LOGS_CONFIG_LOGS_NO_SSL - optional - default: false + ## Disable the SSL encryption. This parameter should only be used when logs are + ## forwarded locally to a proxy. It is highly recommended to then handle the SSL encryption + ## on the proxy side. + # + # logs_no_ssl: false + + ## @param processing_rules - list of custom objects - optional + ## @env DD_LOGS_CONFIG_PROCESSING_RULES - list of custom objects - optional + ## Global processing rules that are applied to all logs. The available rules are + ## "exclude_at_match", "include_at_match" and "mask_sequences". More information in Datadog documentation: + ## https://docs.datadoghq.com/agent/logs/advanced_log_collection/#global-processing-rules + # + # processing_rules: + # - type: + # name: + # pattern: + + ## @param force_use_http - boolean - optional - default: false + ## @env DD_LOGS_CONFIG_FORCE_USE_HTTP - boolean - optional - default: false + ## By default, the Agent sends logs in HTTPS batches to port 443 if HTTPS connectivity can + ## be established at Agent startup, and falls back to TCP otherwise. Set this parameter to `true` to + ## always send logs with HTTPS (recommended). + ## Warning: force_use_http means HTTP over TCP, not HTTP over HTTPS. Please use logs_no_ssl for HTTP over HTTPS. + # + # force_use_http: true + + ## @param force_use_tcp - boolean - optional - default: false + ## @env DD_LOGS_CONFIG_FORCE_USE_TCP - boolean - optional - default: false + ## By default, logs are sent through HTTPS if possible, set this parameter + ## to `true` to always send logs via TCP. If `force_use_http` is set to `true`, this parameter + ## is ignored. + # + # force_use_tcp: true + + ## @param use_compression - boolean - optional - default: true + ## @env DD_LOGS_CONFIG_USE_COMPRESSION - boolean - optional - default: true + ## This parameter is available when sending logs with HTTPS. If enabled, the Agent + ## compresses logs before sending them. + # + # use_compression: true + + ## @param compression_level - integer - optional - default: 6 + ## @env DD_LOGS_CONFIG_COMPRESSION_LEVEL - boolean - optional - default: false + ## The compression_level parameter accepts values from 0 (no compression) + ## to 9 (maximum compression but higher resource usage). Only takes effect if + ## `use_compression` is set to `true`. + # + # compression_level: 6 + + ## @param batch_wait - integer - optional - default: 5 + ## @env DD_LOGS_CONFIG_BATCH_WAIT - integer - optional - default: 5 + ## The maximum time (in seconds) the Datadog Agent waits to fill each batch of logs before sending. + # + # batch_wait: 5 + + ## @param open_files_limit - integer - optional - default: 500 + ## @env DD_LOGS_CONFIG_OPEN_FILES_LIMIT - integer - optional - default: 500 + ## The maximum number of files that can be tailed in parallel. + ## Note: the default for Mac OS is 200. The default for + ## all other systems is 500. + # + # open_files_limit: 500 + + ## @param file_wildcard_selection_mode - string - optional - default: `by_name` + ## @env DD_LOGS_CONFIG_FILE_WILDCARD_SELECTION_MODE - string - optional - default: `by_name` + ## The strategy used to prioritize wildcard matches if they exceed the open file limit. + ## + ## Choices are `by_name` and `by_modification_time`. + ## + ## `by_name` means that each log source is considered and the matching files are ordered + ## in reverse name order. While there are less than `logs_config.open_files_limit` files + ## being tailed, this process repeats, collecting from each configured source. + ## + ## `by_modification_time` takes all log sources and first adds any log sources that + ## point to a specific file. Next, it finds matches for all wildcard sources. + ## This resulting list is ordered by which files have been most recently modified + ## and the top `logs_config.open_files_limit` most recently modified files are + ## chosen for tailing. + ## + ## WARNING: `by_modification_time` is less performant than `by_name` and will trigger + ## more disk I/O at the configured wildcard log paths. + # + # file_wildcard_selection_mode: by_name + + ## @param max_message_size_bytes - integer - optional - default: 256000 + ## @env DD_LOGS_CONFIG_MAX_MESSAGE_SIZE_BYTES - integer - optional - default : 256000 + ## The maximum size of single log message in bytes. If maxMessageSizeBytes exceeds + ## the documented API limit of 1MB - any payloads larger than 1MB will be dropped by the intake. + # https://docs.datadoghq.com/api/latest/logs/ + # + # max_message_size_bytes: 256000 + + ## @param integrations_logs_files_max_size - integer - optional - default: 10 + ## @env DD_LOGS_CONFIG_INTEGRATIONS_LOGS_FILES_MAX_SIZE - integer - optional - default: 10 + ## The max size in MB that an integration logs file is allowed to use + # + # integrations_logs_files_max_size + + ## @param integrations_logs_total_usage - integer - optional - default: 100 + ## @env DD_LOGS_CONFIG_INTEGRATIONS_LOGS_TOTAL_USAGE - integer - optional - default: 100 + ## The total combined usage all integrations logs files can use + # + # integrations_logs_total_usage + +{{ end -}} +{{- if .TraceAgent }} + +#################################### +## Trace Collection Configuration ## +#################################### + +## @param apm_config - custom object - optional +## Enter specific configurations for your trace collection. +## Uncomment this parameter and the one below to enable them. +## See https://docs.datadoghq.com/agent/apm/ +# +# apm_config: + + ## @param enabled - boolean - optional - default: true + ## @env DD_APM_ENABLED - boolean - optional - default: true + ## Set to true to enable the APM Agent. + # + # enabled: true + + ## @param env - string - optional - default: none + ## @env DD_APM_ENV - string - optional - default: none + ## The environment tag that Traces should be tagged with. + ## If not set the value will be inherited, in order, from the top level + ## "env" config option if set and then from the 'env:' tag if present in the + ## 'tags' top level config option. + # + # env: none + + ## @param receiver_port - integer - optional - default: 8126 + ## @env DD_APM_RECEIVER_PORT - integer - optional - default: 8126 + ## The port that the trace receiver should listen on. + ## Set to 0 to disable the HTTP receiver. + # + # receiver_port: 8126 + +{{- if (eq .OS "windows")}} + ## Please note that UDS receiver is not available in Windows. + #@ Enabling this setting may result in unexpected behavior. + ## @param receiver_socket - string - optional - default: "" + ## @env DD_APM_RECEIVER_SOCKET - string - optional - default: "" + ## Accept traces through Unix Domain Sockets. + ## Set to "" to disable the UDS receiver. + # + # receiver_socket: "" +{{else}} + ## @param receiver_socket - string - optional - default: unix:///var/run/datadog/apm.socket + ## @env DD_APM_RECEIVER_SOCKET - string - optional - default: unix:///var/run/datadog/apm.socket + ## Accept traces through Unix Domain Sockets. + ## Set to "" to disable the UDS receiver. + # + # receiver_socket: /var/run/datadog/apm.socket +{{ end }} + + ## @param apm_non_local_traffic - boolean - optional - default: false + ## @env DD_APM_NON_LOCAL_TRAFFIC - boolean - optional - default: false + ## Set to true so the Trace Agent listens for non local traffic, + ## i.e if Traces are being sent to this Agent from another host/container + # + # apm_non_local_traffic: false + + ## @param apm_dd_url - string - optional + ## @env DD_APM_DD_URL - string - optional + ## Define the endpoint and port to hit when using a proxy for APM. The traces are forwarded in TCP + ## therefore the proxy must be able to handle TCP connections. + # + # apm_dd_url: : + + ## DEPRECATED - please use `target_traces_per_second` instead. + ## @param max_traces_per_second - integer - optional - default: 10 + ## @env DD_APM_MAX_TPS - integer - optional - default: 10 + ## The target traces per second to sample. Sampling rates to apply are adjusted given + ## the received traffic and communicated to tracers. This configures head base sampling. + ## As of 7.35.0 sampling cannot be disabled and setting 'max_traces_per_second' to 0 no longer + ## disables sampling, but instead sends no traces to the intake. To avoid rate limiting, set this + ## value sufficiently high for your traffic pattern. + # + # max_traces_per_second: 10 + + ## @param target_traces_per_second - integer - optional - default: 10 + ## @env DD_APM_TARGET_TPS - integer - optional - default: 10 + ## The target traces per second to sample. Sampling rates to apply are adjusted given + ## the received traffic and communicated to tracers. This configures head-based sampling. + ## As of 7.35.0 sampling cannot be disabled and setting 'max_traces_per_second' to 0 no longer + ## disables sampling, but instead sends no traces to the intake. To avoid rate limiting, set this + ## value sufficiently high for your traffic pattern. + # + # target_traces_per_second: 10 + + ## @param errors_per_second - integer - optional - default: 10 + ## @env DD_APM_ERROR_TPS - integer - optional - default: 10 + ## The target error trace chunks to receive per second. The TPS is spread + ## to catch all combinations of service, name, resource, http.status, and error.type. + ## Set to 0 to disable the errors sampler. + # + # errors_per_second: 10 + + ## @param max_events_per_second - integer - optional - default: 200 + ## @env DD_APM_MAX_EPS - integer - optional - default: 200 + ## Maximum number of APM events per second to sample. + # + # max_events_per_second: 200 + + ## @param max_memory - integer - optional - default: 500000000 + ## @env DD_APM_MAX_MEMORY - integer - optional - default: 500000000 + ## This value is what the Agent aims to use in terms of memory. If surpassed, the API + ## rate limits incoming requests to aim and stay below this value. + ## Note: The Agent process is killed if it uses more than 150% of `max_memory`. + ## Set the `max_memory` parameter to `0` to disable the memory limitation. + # + # max_memory: 500000000 + + ## @param max_cpu_percent - integer - optional - default: 50 + ## @env DD_APM_MAX_CPU_PERCENT - integer - optional - default: 50 + ## The CPU percentage that the Agent aims to use. If surpassed, the API rate limits + ## incoming requests to aim and stay below this value. Examples: 50 = half a core, 200 = two cores. + ## Set `max_cpu_percent` to `0` to disable rate limiting based on CPU usage. + # + # max_cpu_percent: 50 + + ## @param obfuscation - object - optional + ## Defines obfuscation rules for sensitive data. Disabled by default. + ## See https://docs.datadoghq.com/tracing/setup_overview/configure_data_security/#agent-trace-obfuscation + # + # obfuscation: + # credit_cards: + ## @param DD_APM_OBFUSCATION_CREDIT_CARDS_ENABLED - boolean - optional + ## Enables obfuscation rules for credit cards. Enabled by default. + # enabled: true + ## @param DD_APM_OBFUSCATION_CREDIT_CARDS_LUHN - boolean - optional + ## Enables a Luhn checksum check in order to eliminate false negatives. Disabled by default. + # luhn: false + # + # elasticsearch: + ## @param DD_APM_OBFUSCATION_ELASTICSEARCH_ENABLED - boolean - optional + ## Enables obfuscation rules for spans of type "elasticsearch". Enabled by default. + # enabled: true + ## @param DD_APM_OBFUSCATION_ELASTICSEARCH_KEEP_VALUES - object - optional + ## List of keys that should not be obfuscated. + # keep_values: + # - client_id + ## @param DD_APM_OBFUSCATION_ELASTICSEARCH_OBFUSCATE_SQL_VALUES - boolean - optional + ## The set of keys for which their values will be passed through SQL obfuscation + # obfuscate_sql_values: + # - val1 + # + # opensearch: + ## @param DD_APM_OBFUSCATION_OPENSEARCH_ENABLED - boolean - optional + ## Enables obfuscation rules for spans of type "opensearch". Enabled by default. + # enabled: true + ## @param DD_APM_OBFUSCATION_OPENSEARCH_KEEP_VALUES - object - optional + ## List of keys that should not be obfuscated. + # keep_values: + # - client_id + ## @param DD_APM_OBFUSCATION_OPENSEARCH_OBFUSCATE_SQL_VALUES - boolean - optional + ## The set of keys for which their values will be passed through SQL obfuscation + # obfuscate_sql_values: + # - val1 + # + # http: + ## @param DD_APM_OBFUSCATION_HTTP_REMOVE_QUERY_STRING - boolean - optional + ## Enables obfuscation of query strings in URLs + # remove_query_string: false + ## @param DD_APM_OBFUSCATION_HTTP_REMOVE_PATHS_WITH_DIGITS - boolean - optional + ## If enabled, path segments in URLs containing digits are replaced by "?" + # remove_path_with_digits: false + # + # memcached: + ## @param DD_APM_OBFUSCATION_MEMCACHED_ENABLED - boolean - optional + ## Enables obfuscation rules for spans of type "memcached". Enabled by default. + # enabled: true + ## @param DD_APM_OBFUSCATION_MEMCACHED_KEEP_COMMAND - boolean - optional + ## If enabled, the full command for the query will be kept, including any lookup + ## keys that could be present. The value for storage commands will still be + ## redacted if Memcached obfuscation is enabled. + # keep_command: false + # + # mongodb: + ## @param DD_APM_OBFUSCATION_MONGODB_ENABLED - boolean - optional + ## Enables obfuscation rules for spans of type "mongodb". Enabled by default. + # enabled: true + ## @param DD_APM_OBFUSCATION_MONGODB_KEEP_VALUES - object - optional + ## List of keys that should not be obfuscated. + # keep_values: + # - document_id + ## @param DD_APM_OBFUSCATION_MONGODB_OBFUSCATE_SQL_VALUES - object - optional + ## The set of keys for which their values will be passed through SQL obfuscation + # obfuscate_sql_values: + # - val1 + # + # redis: + ## @param DD_APM_OBFUSCATION_REDIS_ENABLED - boolean - optional + ## Enables obfuscation rules for spans of type "redis". Enabled by default. + # enabled: true + ## @param DD_APM_OBFUSCATION_REDIS_REMOVE_ALL_ARGS - boolean - optional + ## When true, replaces all arguments of a redis command with a single "?". Disabled by default. + # remove_all_args: false + # + ## @param DD_APM_OBFUSCATION_REMOVE_STACK_TRACES - boolean - optional + ## Enables removing stack traces to replace them with "?". Disabled by default. + # remove_stack_traces: false + # + # sql_exec_plan: + ## @param DD_APM_SQL_EXEC_PLAN_ENABLED - boolean - optional + ## Enables obfuscation rules for JSON query execution plans. Disabled by default. + # enabled: false + ## @param DD_APM_SQL_EXEC_PLAN_KEEP_VALUES - object - optional + ## List of keys that should not be obfuscated. + # keep_values: + # - id1 + ## @param DD_APM_SQL_EXEC_PLAN_OBFUSCATE_SQL_VALUES - boolean - optional + ## The set of keys for which their values will be passed through SQL obfuscation + # obfuscate_sql_values: + # - val1 + # + # sql_exec_plan_normalize: + ## @param DD_APM_SQL_EXEC_PLAN_NORMALIZE_ENABLED - boolean - optional + ## Enables obfuscation rules for JSON query execution plans, including cost and row estimates. + ## Produces a normalized execution plan. Disabled by default. + # enabled: false + ## @param DD_APM_SQL_EXEC_PLAN_NORMALIZE_KEEP_VALUES - object - optional + ## List of keys that should not be obfuscated. + # keep_values: + # - id1 + ## @param DD_APM_SQL_EXEC_PLAN_NORMALIZE_OBFUSCATE_SQL_VALUES - boolean - optional + ## The set of keys for which their values will be passed through SQL obfuscation + # obfuscate_sql_values: + # - val1 + + ## @param filter_tags - object - optional + ## @env DD_APM_FILTER_TAGS_REQUIRE - object - optional + ## @env DD_APM_FILTER_TAGS_REJECT - object - optional + ## Defines rules by which to filter traces based on tags. + ## * require - list of key or key/value strings - traces must have those tags in order to be sent to Datadog + ## * reject - list of key or key/value strings - traces with these tags are dropped by the Agent + ## Please note that: + ## 1. Rules take into account the intersection of tags defined. + ## 2. When `filter_tags` and `filter_tags_regex` are used at the same time, all rules are united for filtering. + ## In cases where rules in `filter_tags` and `filter_tags_regex` match the same key, the rule from `filter_tags` + ## takes precendence over the rule from `filter_tags_regex`. + ## + ## For example, in the case of the following configuration: + ## filter_tags: + ## require: ["foo:bar"] + ## filter_tags_regex: + ## require: ["foo:^bar[0-9]{1}$"] + ## With these rules, traces with a tag `foo:bar1` will be dropped, and those with a `foo:bar` tag will be kept + # + # filter_tags: + # require: [] + # reject: [] + + ## @param filter_tags_regex - object - optional + ## Defines rules by which to filter traces based on tags with regex pattern for tag values. + ## * require - list of key or key/value regex pattern strings - traces must have those tags in order to be sent to Datadog + ## * reject - list of key or key/value regex pattern strings - traces with these tags are dropped by the Agent + ## Note: Rules take into account the intersection of tags defined. + ## Using regexp patterns for tag filtering can have performance implications, and is slower than typical tag filtering + ## without regexp. However, this regexp is only run on the root span of a trace, so should not have a critical impact + ## on overall performance. + ## More detailed information can be found in the description of the `filter_tags` parameter above + # + # filter_tags_regex: + # require: [] # e.g. [":"] + # reject: [] # e.g. [":"] + + ## @param replace_tags - list of objects - optional + ## @env DD_APM_REPLACE_TAGS - list of objects - optional + ## Defines a set of rules to replace or remove certain resources, tags containing + ## potentially sensitive information. + ## Each rules has to contain: + ## * name - string - The tag name to replace, for resources use "resource.name". + ## * pattern - string - The pattern to match the desired content to replace + ## * repl - string - what to inline if the pattern is matched + ## + ## See https://docs.datadoghq.com/tracing/setup_overview/configure_data_security/#replace-rules-for-tag-filtering + ## + # + # replace_tags: + # - name: "" + # pattern: "" + # repl: "" + + ## @param ignore_resources - list of strings - optional + ## @env DD_APM_IGNORE_RESOURCES - comma separated list of strings - optional + ## An exclusion list of regular expressions can be provided to disable certain traces based on their resource name + ## all entries must be surrounded by double quotes and separated by commas. + # + # ignore_resources: ["(GET|POST) /healthcheck"] + + ## @param log_file - string - optional + ## @env DD_APM_LOG_FILE - string - optional + ## The full path to the file where APM-agent logs are written. + # + # log_file: + + ## @param connection_limit - integer - default: 2000 + ## @env DD_APM_CONNECTION_LIMIT - integer - default: 2000 + ## The APM connection limit for the Agent. + ## See https://docs.datadoghq.com/tracing/troubleshooting/agent_rate_limits/#max-connection-limit + # + # connection_limit: 2000 + + ## @param compute_stats_by_span_kind - bool - default: false + ## @env DD_APM_COMPUTE_STATS_BY_SPAN_KIND - bool - default: false + ## [BETA] Enables an additional stats computation check on spans to see they have an eligible `span.kind` (server, consumer, client, producer). + ## If enabled, a span with an eligible `span.kind` will have stats computed. If disabled, only top-level and measured spans will have stats computed. + ## NOTE: For stats computed from OTel traces, only top-level spans are considered when this option is off. + ## If you are sending OTel traces and want stats on non-top-level spans, this flag will need to be enabled. + ## If you are sending OTel traces and do not want stats computed by span kind, you need to disable this flag and remove the "enable_otlp_compute_top_level_by_span_kind" APM feature if present. + # compute_stats_by_span_kind: false + + ## @param peer_service_aggregation - bool - default: false + ## @env DD_APM_PEER_SERVICE_AGGREGATION - bool - default: false + ## DEPRECATED - please use `peer_tags_aggregation` instead. + # peer_service_aggregation: false + + ## @param peer_tags_aggregation - bool - default: false + ## @env DD_APM_PEER_TAGS_AGGREGATION - bool - default: false + ## [BETA] Enables aggregation of peer related tags (e.g., `peer.service`, `db.instance`, etc.) in the Agent. + ## If disabled, aggregated trace stats will not include these tags as dimensions on trace metrics. + ## For the best experience with peer tags, Datadog also recommends enabling `compute_stats_by_span_kind`. + ## If you are using an OTel tracer, it's best to have both enabled because client/producer spans with relevant peer tags + ## may not be marked by the Agent as top-level spans. + ## If enabling both causes the Agent to consume too many resources, try disabling `compute_stats_by_span_kind` first. + ## A high cardinality of peer tags or APM resources can also contribute to higher CPU and memory consumption. + ## You can check for the cardinality of these fields by making trace search queries in the Datadog UI. + ## The default list of peer tags can be found in pkg/trace/stats/concentrator.go. + # peer_tags_aggregation: false + + ## @param peer_tags - list of strings - optional + ## @env DD_APM_PEER_TAGS - list of strings - optional + ## [BETA] Optional list of supplementary peer tags that go beyond the defaults. The Datadog backend validates all tags + ## and will drop ones that are unapproved. + # peer_tags: [] + + ## @param features - list of strings - optional + ## @env DD_APM_FEATURES - comma separated list of strings - optional + ## Configure additional beta APM features. + ## The list of items available under apm_config.features is not guaranteed to persist across versions; + ## a feature may eventually be promoted to its own configuration option on the agent, or dropped entirely. + # + # features: ["error_rare_sample_tracer_drop","table_names","component2name","sql_cache","sqllexer","enable_otlp_compute_top_level_by_span_kind","enable_receive_resource_spans_v2"] + + ## @param additional_endpoints - object - optional + ## @env DD_APM_ADDITIONAL_ENDPOINTS - object - optional + ## Enables sending data to multiple endpoints and/or with multiple API keys via dual shipping. + ## See https://docs.datadoghq.com/agent/guide/dual-shipping + # + # additional_endpoints: + # "https://trace.agent.datadoghq.com": + # - apikey2 + # - apikey3 + # "https://trace.agent.datadoghq.eu": + # - apikey4 + + ## @param debug - custom object - optional + ## Specifies settings for the debug server of the trace agent. + # + # debug: + + ## @param port - integer - optional - default: 5012 + ## @env DD_APM_DEBUG_PORT - string - optional - default: 5012 + ## Port for the debug endpoints for the trace Agent. Set it to 0 to disable the server. + # + # port: 5012 + + ## @param instrumentation_enabled - boolean - default: false + ## @env DD_APM_INSTRUMENTATION_ENABLED - boolean - default: false + ## Enables Single Step Instrumentation in the cluster (in beta) + # + # instrumentation_enabled: false + + ## @param instrumentation_enabled_namespaces - list of strings - optional + ## @env DD_APM_INSTRUMENTATION_ENABLED_NAMESPACES - space separated list of strings - optional + ## Enables Single Step Instrumentation in specific namespaces, while Single Step Instrumentation is off in the whole cluster (in beta) + ## Can only be set if DD_APM_INSTRUMENTATION_ENABLED is false. Cannot be set together with DD_APM_INSTRUMENTATION_DISABLED_NAMESPACES. + # + # instrumentation_enabled_namespaces: + # - ns1 + # - apps + + ## @param instrumentation_disabled_namespaces - list of strings - optional + ## @env DD_APM_INSTRUMENTATION_DISABLED_NAMESPACES - space separated list of strings - optional + ## Disables Single Step Instrumentation in specific namespaces, while Single Step Instrumentation is enabled in the whole cluster (in beta) + ## Can only be set if DD_APM_INSTRUMENTATION_ENABLED is true. Cannot be set together with DD_APM_INSTRUMENTATION_ENABLED_NAMESPACES. + # + # instrumentation_disabled_namespaces: + # - ns2 + # - system-ns + + ## @param trace_buffer - integer - optional - default: 0 + ## @env DD_APM_TRACE_BUFFER - integer - optional - default: 0 + ## + ## WARNING: Do not use this config. It is here for debugging and + ## as a temporary fix in certain load scenarios. Setting this + ## results in a performance deterioration and an increase in memory + ## usage when the Trace Agent is under load. This config may be + ## removed in a future version. + ## + ## Specifies the number of trace payloads to buffer after decoding. + ## Traces can be buffered when receiving traces faster than the + ## processor can process them. + ## + # + # trace_buffer: 0 + + ## @param probabilistic_sampler - object - optional + ## Enables and configures the Probabilistic Sampler, compatible with the + ## OTel Probabilistic Sampler Processor ( https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/probabilisticsamplerprocessor#probabilistic-sampling-processor ) + ## + #probabilistic_sampler: + ## @env DD_APM_PROBABILISTIC_SAMPLER_ENABLED - boolean - optional - default: false + ## Enables or disables the probabilistic sampler + # enabled: false + # + ## @env DD_APM_PROBABILISTIC_SAMPLER_SAMPLING_PERCENTAGE - float - optional - default: 0 + ## Samples this percentage (0-100) of traffic + # sampling_percentage: 0 + # + ## @env DD_APM_PROBABILISTIC_SAMPLER_HASH_SEED - integer - optional - default: 0 + ## hash_seed: A seed used for the hash algorithm. This must match other agents and OTel + ## collectors using the probabilistic sampler to ensure consistent sampling. + # hash_seed: 0 + + + {{- if .InternalProfiling -}} + ## @param profiling - custom object - optional + ## Enter specific configurations for internal profiling. + ## + ## Please note that: + ## 1. This does *not* enable profiling for user applications. + ## 2. This only enables internal profiling of the agent go runtime. + ## 3. To enable profiling for user apps please refer to + ## https://docs.datadoghq.com/tracing/profiling/ + ## 4. Enabling this feature will incur in billing charges and other + ## unexpected side-effects (ie. agent profiles showing with your + ## services). + ## + ## Uncomment this parameter and the one below to enable profiling. + # + # internal_profiling: + # + ## @param enabled - boolean - optional - default: false + ## @env DD_INTERNAL_PROFILING_ENABLED - boolean - optional - default: false + ## Enable internal profiling for the trace-agent process. + # + # enabled: false + + {{ end -}} +{{ end -}} +{{- if .ProcessAgent }} + +###################################### +## Process Collection Configuration ## +###################################### + +## @param process_config - custom object - optional +## Enter specific configurations for your Process data collection. +## Uncomment this parameter and the one below to enable them. +## See https://docs.datadoghq.com/graphing/infrastructure/process/ +# +# process_config: + + {{- if (eq .OS "linux")}} + ## @param run_in_core_agent - custom object - optional + ## Controls whether the process Agent or core Agent collects process and/or container information (Linux only). + # run_in_core_agent: + ## @param enabled - boolean - optional - default: false + ## Enables process/container collection on the core Agent instead of the process Agent. + # enabled: false + {{ end }} + + ## @param process_collection - custom object - optional + ## Specifies settings for collecting processes. + # process_collection: + ## @param enabled - boolean - optional - default: false + ## Enables collection of information about running processes. + # enabled: false + + ## @param container_collection - custom object - optional + ## Specifies settings for collecting containers. + # container_collection: + ## @param enabled - boolean - optional - default: true + ## Enables collection of information about running containers. + # enabled: true + + ## Deprecated - use `process_collection.enabled` and `container_collection.enabled` instead + ## @param enabled - string - optional - default: "false" + ## @env DD_PROCESS_CONFIG_ENABLED - string - optional - default: "false" + ## A string indicating the enabled state of the Process Agent: + ## * "false" : The Agent collects only containers information. + ## * "true" : The Agent collects containers and processes information. + ## * "disabled" : The Agent process collection is disabled. + # + # enabled: "true" + + ## @param expvar_port - string - optional - default: 6062 + ## @env DD_PROCESS_CONFIG_EXPVAR_PORT - string - optional - default: 6062 + ## Port for the debug endpoints for the process Agent. + # + # expvar_port: 6062 + + ## @param cmd_port - string - optional - default: 6162 + ## Port for configuring runtime settings for the process Agent. + # + # cmd_port: 6162 + + ## @param log_file - string - optional + ## @env DD_PROCESS_CONFIG_LOG_FILE - string - optional + ## The full path to the file where process Agent logs are written. + # + # log_file: + + ## @param intervals - custom object - optional - default: 10s for normal checks and 2s for others. + ## @env DD_PROCESS_CONFIG_INTERVALS_CONTAINER - integer - optional - default: 10 + ## @env DD_PROCESS_CONFIG_INTERVALS_CONTAINER_REALTIME - integer - optional - default: 2 + ## @env DD_PROCESS_CONFIG_INTERVALS_PROCESS - integer - optional - default: 10 + ## @env DD_PROCESS_CONFIG_INTERVALS_PROCESS_REALTIME - integer - optional - default: 2 + ## The interval, in seconds, at which the Agent runs each check. If you want consistent + ## behavior between real-time, set the `container_realtime` and `process_realtime` intervals to 10. + # + # intervals: + # container: 10 + # container_realtime: 2 + # process: 10 + # process_realtime: 2 + + ## @param process_discovery - custom object - optional + ## Specifies custom settings for the `process_discovery` object. + # process_discovery: + ## @param enabled - boolean - optional - default: true + ## Toggles the `process_discovery` check. If enabled, this check gathers information about running integrations. + # enabled: true + + ## @param interval - duration - optional - default: 4h - minimum: 10m + ## An interval in hours that specifies how often the process discovery check should run. + # interval: 4h + + + ## @param blacklist_patterns - list of strings - optional + ## @env DD_PROCESS_CONFIG_BLACKLIST_PATTERNS - space separated list of strings - optional + ## A list of regex patterns that exclude processes if matched. + # + # blacklist_patterns: + # - + + ## @param queue_size - integer - optional - default: 256 + ## @env DD_PROCESS_CONFIG_QUEUE_SIZE - integer - optional - default: 256 + ## The number of check results to buffer in memory when a POST fails. + # + # queue_size: 256 + + ## @param process_queue_bytes - integer - optional - default: 60000000 + ## @env DD_PROCESS_CONFIG_PROCESS_QUEUE_BYTES - integer - optional - default: 60000000 + ## The amount of data (in bytes) to buffer in memory when a POST fails. + # + # process_queue_bytes: 60000000 + + ## @param rt_queue_size - integer - optional - default: 5 + ## @env DD_PROCESS_CONFIG_RT_QUEUE_SIZE - integer - optional - default: 5 + ## The number of realtime check results to buffer in memory when a POST fails. + # + # rt_queue_size: 5 + + ## @param max_per_message - integer - optional - default: 100 + ## @env DD_PROCESS_CONFIG_MAX_PER_MESSAGE - integer - optional - default: 100 + ## The maximum number of processes or containers per message. + # + # max_per_message: 100 + + ## @param dd_agent_bin - string - optional + ## @env DD_PROCESS_CONFIG_DD_AGENT_BIN - string - optional + ## Overrides the path to the Agent bin used for getting the hostname. Defaults are: + ## * Windows: \embedded\\agent.exe + ## * Unix: /opt/datadog-agent/bin/agent/agent + # + # dd_agent_bin: + + ## @param dd_agent_env - string - optional - default: "" + ## @env DD_PROCESS_CONFIG_DD_AGENT_ENV - string - optional - default: "" + ## Overrides of the environment we pass to fetch the hostname. + # + # dd_agent_env: "" + + ## @param scrub_args - boolean - optional - default: true + ## @env DD_PROCESS_CONFIG_SCRUB_ARGS - boolean - optional - default: true + ## Hide sensitive data on the Live Processes page. + # + # scrub_args: true + + ## @param custom_sensitive_words - list of strings - optional + ## @env DD_PROCESS_CONFIG_CUSTOM_SENSITIVE_WORDS - space separated list of strings - optional + ## Define your own list of sensitive data to be merged with the default one. + ## Read more on Datadog documentation: + ## https://docs.datadoghq.com/graphing/infrastructure/process/#process-arguments-scrubbing + # + # custom_sensitive_words: + # - 'personal_key' + # - '*token' + # - 'sql*' + # - '*pass*d*' + + ## @param disable_realtime_checks - boolean - optional - default: false + ## @env DD_PROCESS_CONFIG_DISABLE_REALTIME - boolean - optional - default: false + ## Disable realtime process and container checks + # + # disable_realtime_checks: false + +{{- if .InternalProfiling -}} + ## @param profiling - custom object - optional + ## Enter specific configurations for internal profiling. + ## + ## Please note that: + ## 1. This does *not* enable profiling for user applications. + ## 2. This only enables internal profiling of the agent go runtime. + ## 3. To enable profiling for user apps please refer to + ## https://docs.datadoghq.com/tracing/profiling/ + ## 4. Enabling this feature will incur in billing charges and other + ## unexpected side-effects (ie. agent profiles showing with your + ## services). + ## + ## Uncomment this parameter and the one below to enable profiling. + # + # internal_profiling: + # + ## @param enabled - boolean - optional - default: false + ## @env DD_INTERNAL_PROFILING_ENABLED - boolean - optional - default: false + ## Enable internal profiling for the Process Agent process. + # + # enabled: false + +{{ end }} + +{{- if .NetworkPath }} +{{- if (ne .OS "darwin")}} + +######################################## +## Network Path Configuration ## +######################################## + +# network_path: + ## @param connections_monitoring - custom object - optional + ## Specific configurations for monitoring network connections via Network Path. + # + # connections_monitoring: + + ## @param enabled - bool - optional - default: false + ## @env DD_NETWORK_PATH_CONNECTIONS_MONITORING_ENABLED - bool - optional - default: false + ## [Beta] Enables monitoring network connections via Network Path. + # + # enabled: false + + ## @param collector - custom object - optional + ## Configuration related to Network Path Collector. + # + # collector: + + ## @param workers - integer - optional - default: 4 + ## @env DD_WORKERS - integer - optional - default: 4 + ## The `workers` refers to the number of concurrent workers available for network path execution. + # + # workers: 4 + +{{ end -}} +{{ end -}} +{{ end -}} +{{- if .Compliance }} +############################################# +## Security Agent Compliance Configuration ## +############################################# + +## @param compliance_config - custom object - optional +## Enter specific configuration for continuous compliance checks. +# compliance_config: + + ## @param enabled - boolean - optional - default: false + ## @env DD_COMPLIANCE_CONFIG_ENABLED - boolean - optional - default: false + ## Set to true to enable Cloud Security Posture Management (CSPM). + # + # enabled: false + + ## @param dir - string - optional - default: /etc/datadog-agent/compliance.d + ## @env DD_COMPLIANCE_CONFIG_DIR - string - optional - default: /etc/datadog-agent/compliance.d + ## Directory path for compliance checks configuration containing enabled benchmarks + # + # dir: /etc/datadog-agent/compliance.d + + ## @param check_interval - duration - optional - default: 20m + ## @env DD_COMPLIANCE_CONFIG_CHECK_INTERVAL - duration - optional - default: 20m + ## Check interval (see https://golang.org/pkg/time/#ParseDuration for available options) + # check_interval: 20m + + ## @param check_max_events_per_run - integer - optional - default: 100 + ## @env DD_COMPLIANCE_CONFIG_CHECK_MAX_EVENTS_PER_RUN - integer - optional - default: 100 + ## + # check_max_events_per_run: 100 +{{ end -}} + +{{- if .SBOM }} +## @param sbom - custom object - optional +## Enter specific configuration for the Cloud Security Management Vulnerability Management feature +# sbom: + ## @param enabled - boolean - optional - default: false + ## set to true to enable Cloud Security Management Vulnerability Management + # enabled: false + + ## uncomment the sections below to enable where the vulnerability scanning is done + + ## @param enabled - boolean - optional - default: false + ## set to true to enable Infrastructure Vulnerabiltilies + # host: + # enabled: false +{{- if (eq .OS "linux")}} + + + # container_image: + # enabled: false +{{ end -}} +{{ end -}} +{{- if .SystemProbe }} + +################################## +## System Probe Configuration ## +################################## + +## @param system_probe_config - custom object - optional +## Enter specific configurations for your System Probe data collection. +## Uncomment this parameter and the one below to enable them. +# +# system_probe_config: +{{- if (eq .OS "windows")}} + ## @param sysprobe_socket - string - optional - default: localhost:3333 + ## @env DD_SYSTEM_PROBE_CONFIG_SYSPROBE_SOCKET - string - optional - default: localhost:3333 + ## The TCP address where system probes are accessed. + # + # sysprobe_socket: localhost:3333 +{{else}} + ## @param sysprobe_socket - string - optional - default: /opt/datadog-agent/run/sysprobe.sock + ## @env DD_SYSTEM_PROBE_CONFIG_SYSPROBE_SOCKET - string - optional - default: /opt/datadog-agent/run/sysprobe.sock + ## The full path to the location of the unix socket where system probes are accessed. + # + # sysprobe_socket: /opt/datadog-agent/run/sysprobe.sock +{{ end }} + ## @param log_file - string - optional - default: /var/log/datadog/system-probe.log + ## @env DD_SYSTEM_PROBE_CONFIG_LOG_FILE - string - optional - default: /var/log/datadog/system-probe.log + ## The full path to the file where system-probe logs are written. + # + # log_file: /var/log/datadog/system-probe.log + + ## @param langauge_detection - custom object - optional + ## Enter specific configurations for language detection + ## Uncomment this parameter and the one below to enable them. + # + # language_detection: + + ## @param enabled - bool - optional - default: false + ## @env DD_SYSTEM_PROBE_CONFIG_LANGUAGE_DETECTION_ENABLED - bool - optional - default: false + ## [Beta] Enables language detection via binary analysis in the system probe. + # + # enabled: false + + ## @param health_port - integer - optional - default: 0 + ## @env DD_SYSTEM_PROBE_HEALTH_PORT - integer - optional - default: 0 + ## The Agent can expose its health check on a dedicated HTTP port. + ## This is useful for orchestrators that support HTTP probes. + ## Default is 0 (disabled). Set a valid port number (example: 5558) to enable. + # + # health_port: 0 + +{{- if .InternalProfiling -}} + ## @param profiling - custom object - optional + ## Enter specific configurations for internal profiling. + ## + ## Please note that: + ## 1. This does *not* enable profiling for user applications. + ## 2. This only enables internal profiling of the agent go runtime. + ## 3. To enable profiling for user apps please refer to + ## https://docs.datadoghq.com/tracing/profiling/ + ## 4. Enabling this feature will incur in billing charges and other + ## unexpected side-effects (ie. agent profiles showing with your + ## services). + ## + ## Uncomment this parameter and the one below to enable profiling. + # + # internal_profiling: + # + ## @param enabled - boolean - optional - default: false + ## @env DD_INTERNAL_PROFILING_ENABLED - boolean - optional - default: false + ## Enable internal profiling for the System Probe process. + # + # enabled: false + + ## @param memory_controller - custom object - optional + ## Cgroup memory controller for internal memory profiling. + ## + ## memory_controller: + # + ## @param enabled - boolean - optional - default: false + ## Enable cgroup memory controller. + # + # enabled: false + # + ## @param thresholds - map of strings - optional + ## Thresholds and the respective active actions to trigger when + ## memory usage is above the specified threshold. + ## Threshold can be either an absolute value - such as 500MB or 2GB - + ## or a percentage of the cgroup allocated memory such as 50%. + ## The action can be: + ## - gc: to trigger the Go garbage collector + ## - profile: to generate a system-probe memory profile in /tmp + ## - log: to simply log that the threshold was reached + # + # thresholds: + # 500MB: gc + # 50%: profile + + ## @param pressure_levels - map of strings - optional + ## Pressure levels and the respective active actions to trigger when + ## memory usage reaches the specified level. + ## The pressure level is 'low', 'medium' or 'critical'. + ## The actions are the same for thresholds (see above). + # + # pressure_levels: + # medium: gc +{{ end }} + +{{- if .NetworkModule }} + +######################################## +## System Probe Network Configuration ## +######################################## + +# network_config: +{{- if (eq .OS "windows")}} + ## Please note that enabling the Network Module of the System + ## Probe will result in a kernel driver being loaded. +{{ end }} + ## @param enabled - boolean - optional - default: false + ## Set to true to enable the Network Module of the System Probe + # + # enabled: false + +{{ end -}} + +{{- if .UniversalServiceMonitoringModule }} + +############################################################# +## System Probe Universal Service monitoring Configuration ## +############################################################# + +# service_monitoring_config: +{{- if (eq .OS "windows")}} + ## Please note that enabling the Universal Service Monitoring + ## Module of the System Probe will result in a kernel driver + ## being loaded. +{{ end }} + ## @param enabled - boolean - optional - default: false + ## Set to true to enable the Universal Service Monitoring Module of the System Probe + # + # enabled: false + +{{ end -}} + +{{- if .PingModule }} + +##################################### +## System Probe Ping Configuration ## +##################################### + +# ping: + ## @param enabled - boolean - optional - default: false + ## Set to true to enable the Ping Module of the System Probe + # + # enabled: false + +{{ end -}} + + +{{- if .TracerouteModule }} + +########################################### +## System Probe Traceroute Configuration ## +########################################### + +# traceroute: + ## @param enabled - boolean - optional - default: false + ## Set to true to enable the Traceroute Module of the System Probe + # + # enabled: false + +{{ end -}} + + +{{- if .SecurityModule }} + +########################################## +## Security Agent Runtime Configuration ## +## ## +## Settings to sent logs to Datadog are ## +## fetched from section `logs_config` ## +########################################## + +# runtime_security_config: + ## @param enabled - boolean - optional - default: false + ## @env DD_RUNTIME_SECURITY_CONFIG_ENABLED - boolean - optional - default: false + ## Set to true to enable Cloud Workload Security (CWS). + # + # enabled: false + + ## @param fim_enabled - boolean - optional - default: false + ## Set to true to enable the File Integrity Monitoring (FIM) feature of Cloud Workload Security (CWS). + # + # fim_enabled: false + +{{- if (eq .OS "windows")}} + ## @param sysprobe_socket - string - optional - default: localhost:3334 + ## @env DD_SYSTEM_PROBE_CONFIG_SYSPROBE_SOCKET - string - optional - default: localhost:3334 + ## The TCP address where the security runtime module is accessed. + # + # socket: localhost:3334 +{{else}} + ## @param socket - string - optional - default: /opt/datadog-agent/run/runtime-security.sock + ## @env DD_RUNTIME_SECURITY_CONFIG_SOCKET - string - optional - default: /opt/datadog-agent/run/runtime-security.sock + ## The full path to the location of the unix socket where security runtime module is accessed. + # + # socket: /opt/datadog-agent/run/runtime-security.sock +{{ end }} + ## @param policies - custom object - optional + ## Policy files + # policies: +{{- if (eq .OS "windows")}} + ## @param dir - string - default: %ProgramData%\Datadog\runtime-security.d + ## @env DD_RUNTIME_SECURITY_CONFIG_POLICIES_DIR - string - default: /etc/datadog-agent/runtime-security.d + ## Path from where the policy files are loaded + # + # dir: c:\ProgramData\Datadog\runtime-security.d +{{else}} + ## @param dir - string - default: /etc/datadog-agent/runtime-security.d + ## @env DD_RUNTIME_SECURITY_CONFIG_POLICIES_DIR - string - default: /etc/datadog-agent/runtime-security.d + ## Path from where the policy files will be loaded + # + # dir: /etc/datadog-agent/runtime-security.d +{{ end }} + ## @param syscall_monitor - custom object - optional + ## Syscall monitoring + # + # syscall_monitor: + + ## @param enabled - boolean - optional - default: false + ## @env DD_RUNTIME_SECURITY_CONFIG_SYSCALL_MONITOR_ENABLED - boolean - optional - default: false + ## Set to true to enable the Syscall monitoring (recommended for troubleshooting only). + # + # enabled: false + + ## @param custom_sensitive_words - list of strings - optional + ## @env DD_RUNTIME_SECURITY_CONFIG_CUSTOM_SENSITIVE_WORDS - space separated list of strings - optional + ## Define your own list of sensitive data to be merged with the default one. + ## Read more on Datadog documentation: + ## https://docs.datadoghq.com/graphing/infrastructure/process/#process-arguments-scrubbing + # + # custom_sensitive_words: + # - 'personal_key' + # - '*token' + # - 'sql*' + # - '*pass*d*' + + ## @param envs_with_value - list of strings - optional + ## @env DD_RUNTIME_SECURITY_CONFIG_ENVS_WITH_VALUE - space separated list of strings - optional + ## Define your own list of non-sensitive environment variable names whose value will not be + ## concealed by the runtime security module. + ## Default: LD_PRELOAD, LD_LIBRARY_PATH, PATH, HISTSIZE, HISTFILESIZE, GLIBC_TUNABLES + # + # envs_with_value: + # - LD_PRELOAD + # - LD_LIBRARY_PATH + # - PATH + # - HISTSIZE + # - HISTFILESIZE + + ## @param activity_dump - custom object - optional + ## Activity dump section configures if/how the Agent sends activity dumps to Datadog + # + # activity_dump: + + ## @param enabled - boolean - optional - default: false + ## @env DD_RUNTIME_SECURITY_CONFIG_ACTIVITY_DUMP_ENABLED - boolean - optional - default: false + ## Set to true to activate the security profiles feature. + # + # enabled: false + + ## @param traced_cgroups_count - integer - optional - default: 5 + ## @env DD_RUNTIME_SECURITY_CONFIG_ACTIVITY_DUMP_TRACED_CGROUPS_COUNT - integer - optional - default: 5 + ## Defines the number of concurrent cgroups to be traced. + # + # traced_cgroups_count: 5 + + ## @param dump_duration - duration - optional - default: 30m + ## @env DD_RUNTIME_SECURITY_CONFIG_ACTIVITY_DUMP_DUMP_DURATION - duration - optional - default: 30m + ## Defines the duration of cgroups learning phase. Minimum value is 10m. + # + # dump_duration: 30m + + ## @param network - custom object - optional + ## Network section is used to configure Cloud Workload Security (CWS) network features. + # + # network: + + ## @param enabled - boolean - optional - default: true + ## @env DD_RUNTIME_SECURITY_CONFIG_NETWORK_ENABLED - boolean - optional - default: true + ## Set to true to activate the CWS network detections. + # + # enabled: true + +{{- if (eq .OS "windows")}} + +##################################################### +## Datadog Agent Windows Crash Detection module +##################################################### + +# windows_crash_detection: + ## @param enabled - boolean - optional - default: false + ## Enables the system probe module which supports the Windows crash detection check. + # + # enabled: false +{{ end }} + +{{ end -}} +{{ end -}} + +{{- if .SecurityAgent -}} +#################################### +## Runtime Security configuration ## +#################################### + +# runtime_security_config: + ## @param enabled - boolean - optional - default: false + ## Set to true to enable Cloud Workload Security (CWS). + # + # enabled: false + +{{- if (eq .OS "windows")}} + ## @param socket - string - optional - default: localhost:3334 + ## The local address and port where the security runtime module is accessed + # + # socket: localhost:3334 +{{else}} + ## @param socket - string - optional - default: /opt/datadog-agent/run/runtime-security.sock + ## The full path to the location of the unix socket where security runtime module is accessed. + # + # socket: /opt/datadog-agent/run/runtime-security.sock +{{ end }} + +########################################## +## Compliance monitoring configuration ## +########################################## + +# compliance_config: + ## @param enabled - boolean - optional - default: false + ## Set to true to enable Cloud Security Posture Management (CSPM). + # + # enabled: false +{{ end -}} +{{- if .Dogstatsd }} + +############################# +## DogStatsD Configuration ## +############################# + +## @param use_dogstatsd - boolean - optional - default: true +## @env DD_USE_DOGSTATSD - boolean - optional - default: true +## Set this option to false to disable the Agent DogStatsD server. +# +# use_dogstatsd: true + +## @param dogstatsd_port - integer - optional - default: 8125 +## @env DD_DOGSTATSD_PORT - integer - optional - default: 8125 +## Override the Agent DogStatsD port. +## Note: Make sure your client is sending to the same UDP port. +# +# dogstatsd_port: 8125 + +## @param bind_host - string - optional - default: localhost +## @env DD_BIND_HOST - string - optional - default: localhost +## The host to listen on for Dogstatsd and traces. This is ignored by APM when +## `apm_config.apm_non_local_traffic` is enabled and ignored by DogStatsD when `dogstatsd_non_local_traffic` +## is enabled. The trace-agent uses this host to send metrics to. +## The `localhost` default value is invalid in IPv6 environments where dogstatsd listens on "::1". +## To solve this problem, ensure Dogstatsd is listening on IPv4 by setting this value to "127.0.0.1". +# +# bind_host: localhost + +{{- if (eq .OS "windows")}} +## Please note that UDS receiver is not available in Windows. +#@ Enabling this setting may result in unexpected behavior. +## @param dogstatsd_socket - string - optional - default: "" +## @env DD_DOGSTATSD_SOCKET - string - optional - default: "" +## Listen for Dogstatsd metrics on a Unix Socket (*nix only). +## Set to "" to disable this feature. +# +# dogstatsd_socket: "" +{{else}} +## @param dogstatsd_socket - string - optional - default: "/var/run/datadog/dsd.socket" +## @env DD_DOGSTATSD_SOCKET - string - optional - default: "/var/run/datadog/dsd.socket" +## Listen for Dogstatsd metrics on a Unix Socket (*nix only). +## Set to "" to disable this feature. +# +# dogstatsd_socket: "/var/run/datadog/dsd.socket" +{{ end }} + +## @param dogstatsd_origin_detection - boolean - optional - default: false +## @env DD_DOGSTATSD_ORIGIN_DETECTION - boolean - optional - default: false +## When using Unix Socket, DogStatsD can tag metrics with container metadata. +## If running DogStatsD in a container, host PID mode (e.g. with --pid=host) is required. +# +# dogstatsd_origin_detection: false + +## @param dogstatsd_origin_detection_client - boolean - optional - default: false +## @env DD_DOGSTATSD_ORIGIN_DETECTION_CLIENT - boolean - optional - default: false +## Whether the Agent should use a client-provided container ID to enrich the metrics, events and service checks with container tags. +## Note: This requires using a client compatible with DogStatsD protocol version 1.2. +# +# dogstatsd_origin_detection_client: false + +## @param dogstatsd_buffer_size - integer - optional - default: 8192 +## @env DD_DOGSTATSD_BUFFER_SIZE - integer - optional - default: 8192 +## The buffer size use to receive statsd packets, in bytes. +# +# dogstatsd_buffer_size: 8192 + +## @param dogstatsd_non_local_traffic - boolean - optional - default: false +## @env DD_DOGSTATSD_NON_LOCAL_TRAFFIC - boolean - optional - default: false +## Set to true to make DogStatsD listen to non local UDP traffic. +# +# dogstatsd_non_local_traffic: false + +## @param dogstatsd_stats_enable - boolean - optional - default: false +## @env DD_DOGSTATSD_STATS_ENABLE - boolean - optional - default: false +## Publish DogStatsD's internal stats as Go expvars. +# +# dogstatsd_stats_enable: false + +## @param dogstatsd_logging_enabled - boolean - optional - default: true +## Set to true to write DogstatsD metrics received by the Agent to dogstats_stats log files. +## Requires `dogstatsd_stats_enable: true`. +# +# dogstatsd_logging_enabled: true + +## @param dogstatsd_log_file_max_size - custom - optional - default: 10MB +## Maximum size of dogstatsd log file. Use either a size (for example, 10MB) or +## provide value in bytes (for example, 10485760.) +# +# dogstatsd_log_file_max_size: 10MB + +## @param dogstatsd_queue_size - integer - optional - default: 1024 +## @env DD_DOGSTATSD_QUEUE_SIZE - integer - optional - default: 1024 +## Configure the internal queue size of the Dogstatsd server. +## Reducing the size of this queue will reduce the maximum memory usage of the +## Dogstatsd server but as a trade-off, it could increase the number of packet drops. +# +# dogstatsd_queue_size: 1024 + +## @param dogstatsd_stats_buffer - integer - optional - default: 10 +## @env DD_DOGSTATSD_STATS_BUFFER - integer - optional - default: 10 +## Set how many items should be in the DogStatsD's stats circular buffer. +# +# dogstatsd_stats_buffer: 10 + +## @param dogstatsd_stats_port - integer - optional - default: 5000 +## @env DD_DOGSTATSD_STATS_PORT - integer - optional - default: 5000 +## The port for the go_expvar server. +# +# dogstatsd_stats_port: 5000 + +## @param dogstatsd_so_rcvbuf - integer - optional - default: 0 +## @env DD_DOGSTATSD_SO_RCVBUF - integer - optional - default: 0 +## The number of bytes allocated to DogStatsD's socket receive buffer (POSIX system only). +## By default, the system sets this value. If you need to increase the size of this buffer +## but keep the OS default value the same, you can set DogStatsD's receive buffer size here. +## The maximum accepted value might change depending on the OS. +# +# dogstatsd_so_rcvbuf: 0 + +## @param dogstatsd_metrics_stats_enable - boolean - optional - default: false +## @env DD_DOGSTATSD_METRICS_STATS_ENABLE - boolean - optional - default: false +## Set this parameter to true to have DogStatsD collects basic statistics (count/last seen) +## about the metrics it processed. Use the Agent command "dogstatsd-stats" to visualize +## those statistics. +# +# dogstatsd_metrics_stats_enable: false + +## @param dogstatsd_tags - list of key:value elements - optional +## @env DD_DOGSTATSD_TAGS - list of key:value elements - optional +## Additional tags to append to all metrics, events and service checks received by +## this DogStatsD server. +# +# dogstatsd_tags: +# - : +# +## @param dogstatsd_mapper_profiles - list of custom object - optional +## @env DD_DOGSTATSD_MAPPER_PROFILES - list of custom object - optional +## The profiles will be used to convert parts of metrics names into tags. +## If a profile prefix is matched, other profiles won't be tried even if that profile matching rules doesn't match. +## The profiles and matching rules are processed in the order defined in this configuration. +## +## For each profile, following fields are available: +## name (required): profile name +## prefix (required): mapping only applies to metrics with the prefix. If set to `*`, it will match everything. +## mappings: mapping rules, see below. +## For each mapping, following fields are available: +## match (required): pattern for matching the incoming metric name e.g. `test.job.duration.*` +## match_type (optional): pattern type can be `wildcard` (default) or `regex` e.g. `test\.job\.(\w+)\.(.*)` +## name (required): the metric name the metric should be mapped to e.g. `test.job.duration` +## tags (optional): list of key:value pair of tag key and tag value +## The value can use $1, $2, etc, that will be replaced by the corresponding element capture by `match` pattern +## This alternative syntax can also be used: ${1}, ${2}, etc +# +# dogstatsd_mapper_profiles: +# - name: # e.g. "airflow", "consul", "some_database" +# prefix: # e.g. "airflow.", "consul.", "some_database." +# mappings: +# - match: # e.g. `test.job.duration.*` to match `test.job.duration.my_job_name` +# match_type: # e.g. `wildcard` or `regex` +# name: # e.g. `test.job.duration` +# tags: +# : # e.g. `job_name: "$1"`, $1 is replaced by value capture by * +# - match: 'test.worker.*.*.start_time' # to match `test.worker...start_time` +# name: 'test.worker.start_time' +# tags: +# worker_type: '$1' +# worker_name: '$2' +# - match: 'test\.task\.duration\.(\w+)\.(.*)' # no need to escape in yaml context using single quote +# match_type: regex +# name: 'test.task' +# tags: +# task_type: '$1' +# task_name: '$2' + +## @param dogstatsd_mapper_cache_size - integer - optional - default: 1000 +## @env DD_DOGSTATSD_MAPPER_CACHE_SIZE - integer - optional - default: 1000 +## Size of the cache (max number of mapping results) used by Dogstatsd mapping feature. +# +# dogstatsd_mapper_cache_size: 1000 + +## @param dogstatsd_entity_id_precedence - boolean - optional - default: false +## @env DD_DOGSTATSD_ENTITY_ID_PRECEDENCE - boolean - optional - default: false +## Disable enriching Dogstatsd metrics with tags from "origin detection" when Entity-ID is set. +# +# dogstatsd_entity_id_precedence: false + + +## @param dogstatsd_no_aggregation_pipeline - boolean - optional - default: true +## @env DD_DOGSTATSD_NO_AGGREGATION_PIPELINE - boolean - optional - default: true +## Enable the no-aggregation pipeline in DogStatsD: a pipeline receiving metrics +## with timestamp and forwarding them to the intake without extra processing except +## for tagging. +# +# dogstatsd_no_aggregation_pipeline: true + +## @param dogstatsd_no_aggregation_pipeline_batch_size - integer - optional - default: 2048 +## @env DD_DOGSTATSD_NO_AGGREGATION_PIPELINE_BATCH_SIZE - integer - optional - default: 2048 +## How many metrics maximum in payloads sent by the no-aggregation pipeline to the intake. +# +# dogstatsd_no_aggregation_pipeline_batch_size: 2048 + +## @param statsd_forward_host - string - optional - default: "" +## @env DD_STATSD_FORWARD_HOST - string - optional - default: "" +## Forward every packet received by the DogStatsD server to another statsd server. +## WARNING: Make sure that forwarded packets are regular statsd packets and not "DogStatsD" packets, +## as your other statsd server might not be able to handle them. +# +# statsd_forward_host: "" + +## @param statsd_forward_port - integer - optional - default: 0 +## @env DD_STATSD_FORWARD_PORT - integer - optional - default: 0 +## Port or the "statsd_forward_host" to forward StatsD packet to. +# +# statsd_forward_port: 0 + +## @param statsd_metric_namespace - string - optional - default: "" +## @env DD_STATSD_METRIC_NAMESPACE - string - optional - default: "" +## Set a namespace for all StatsD metrics coming from this host. +## Each metric received is prefixed with the namespace before it's sent to Datadog. +# +# statsd_metric_namespace: "" + +{{ end -}} +{{- if .Metadata }} + +## @param metadata_providers - list of custom object - optional +## @env DD_METADATA_PROVIDERS - list of custom object - optional +## Metadata providers, add or remove from the list to enable or disable collection. +## Intervals are expressed in seconds. You can also set a provider's interval to 0 +## to disable it. +# +# metadata_providers: +# - name: k8s +# interval: 60 + +{{ end -}} +{{- if .JMX }} + +####################### +## JMX Configuration ## +####################### + +## @param jmx_custom_jars - list of strings - optional +## @env DD_JMX_CUSTOM_JARS - space separated list of strings - optional +## If you only run Autodiscovery tests, jmxfetch might fail to pick up custom_jar_paths +## set in the check templates. If that is the case, force custom jars here. +# +# jmx_custom_jars: +# - /jmx-jars/jboss-cli-client.jar + +## @param jmx_use_cgroup_memory_limit - boolean - optional - default: false +## @env DD_JMX_USE_CGROUP_MEMORY_LIMIT - boolean - optional - default: false +## When running in a memory cgroup, openjdk 8u131 and higher can automatically adjust +## its heap memory usage in accordance to the cgroup/container's memory limit. +## The Agent set a Xmx of 200MB if none is configured. +## Note: OpenJDK version < 8u131 or >= 10 as well as other JVMs might fail +## to start if this option is set. +# +# jmx_use_cgroup_memory_limit: false + +## @param jmx_use_container_support - boolean - optional - default: false +## @env DD_JMX_USE_CONTAINER_SUPPORT - boolean - optional - default: false +## When running in a container, openjdk 10 and higher can automatically detect +## container specific configuration instead of querying the operating system +## to adjust resources allotted to the JVM. +## Note: openjdk versions prior to 10 and other JVMs might fail to start if +## this option is set. +# +# jmx_use_container_support: false + +## @param jmx_max_ram_percentage - float - optional - default: 25.0 +## @env DD_JMX_MAX_RAM_PERCENTAGE - float - optional - default: 25.0 +## When running in a container with jmx_use_container_support enabled, the JVM can +## automatically declare the maximum heap size based off of a percentage of +## total container allocated memory. This option is overwritten if +## you use -Xmx to manually define the size of the heap. This option applies +## to containers with a total memory limit greater than ~250mb. If +## jmx_use_container_support is disabled this option has no effect. +# +# jmx_max_ram_percentage: 25.0 + +## @param jmx_log_file - string - optional +## @env DD_JMX_LOG_FILE - string - optional +## Path of the log file where JMXFetch logs are written. +# +# jmx_log_file: + +## @param jmx_max_restarts - integer - optional - default: 3 +## @env DD_JMX_MAX_RESTARTS - integer - optional - default: 3 +## Number of JMX restarts allowed in the restart-interval before giving up. +# +# jmx_max_restarts: 3 + +## @param jmx_restart_interval - integer - optional - default: 5 +## @env DD_JMX_RESTART_INTERVAL - integer - optional - default: 5 +## Duration of the restart interval in seconds. +# +# jmx_restart_interval: 5 + +## @param jmx_check_period - integer - optional - default: 15000 +## @env DD_JMX_CHECK_PERIOD - integer - optional - default: 15000 +## Duration of the period for check collections in milliseconds. +# +# jmx_check_period: 15000 + +## @param jmx_thread_pool_size - integer - optional - default: 3 +## @env DD_JMX_THREAD_POOL_SIZE - integer - optional - default: 3 +## JMXFetch collects multiples instances concurrently. Defines the maximum level of concurrency: +## * Higher concurrency increases CPU utilization during metric collection. +## * Lower concurrency results in lower CPU usage but may increase the total collection time. +## A value of 1 processes instances serially. +# +# jmx_thread_pool_size: 3 + +## @param jmx_collection_timeout - integer - optional - default: 60 +## @env DD_JMX_COLLECTION_TIMEOUT - integer - optional - default: 60 +## Defines the maximum waiting period in seconds before timing up on metric collection. +# +# jmx_collection_timeout: 60 + +## @param jmx_reconnection_thread_pool_size - integer - optional - default: 3 +## @env DD_JMX_RECONNECTION_THREAD_POOL_SIZE - integer - optional - default: 3 +## JMXFetch reconnects to multiples instances concurrently. Defines the maximum level of concurrency: +## * Higher concurrency increases CPU utilization during reconnection. +## * Lower concurrency results in lower CPU usage but may increase the total reconnection time +## A value of 1 processes instance reconnections serially. +# +# jmx_reconnection_thread_pool_size: 3 + +## @param jmx_reconnection_timeout - integer - optional - default: 60 +## @env DD_JMX_RECONNECTION_TIMEOUT - integer - optional - default: 60 +## Determines the maximum waiting period in seconds before timing up on instance reconnection. +# +# jmx_reconnection_timeout: 60 + +## @param jmx_statsd_telemetry_enabled - boolean - optional - default: false +## @env DD_JMX_STATSD_TELEMETRY_ENABLED - boolean - optional - default: false +## Specifies whether the JMXFetch statsd client telemetry is enabled. +# +# jmx_statsd_telemetry_enabled: false + +## @param jmx_telemetry_enabled - boolean - optional - default: false +## @env DD_JMX_TELEMETRY_ENABLED - boolean - optional - default: false +## Specifies whether additional JMXFetch telemetry is enabled. +# +# jmx_telemetry_enabled: false + +{{ end -}} +{{- if .Logging }} + +########################### +## Logging Configuration ## +########################### + +## @param log_level - string - optional - default: info +## @env DD_LOG_LEVEL - string - optional - default: info +## Minimum log level of the Datadog Agent. +## Valid log levels are: trace, debug, info, warn, error, critical, and off. +## Note: When using the 'off' log level, quotes are mandatory. +# +# log_level: 'info' + +## @param log_file - string - optional +## @env DD_LOG_FILE - string - optional +## Path of the log file for the Datadog Agent. +## See https://docs.datadoghq.com/agent/guide/agent-log-files/ +# +# log_file: + +## @param log_format_json - boolean - optional - default: false +## @env DD_LOG_FORMAT_JSON - boolean - optional - default: false +## Set to 'true' to output Agent logs in JSON format. +# +# log_format_json: false + +## @param log_to_console - boolean - optional - default: true +## @env DD_LOG_TO_CONSOLE - boolean - optional - default: true +## Set to 'false' to disable Agent logging to stdout. +# +# log_to_console: true + +## @param disable_file_logging - boolean - optional - default: false +## @env DD_DISABLE_FILE_LOGGING - boolean - optional - default: false +## Set to 'true' to disable logging to the log file. +# +# disable_file_logging: false + +## @param log_file_max_size - custom - optional - default: 10MB +## @env DD_LOG_FILE_MAX_SIZE - custom - optional - default: 10MB +## Maximum size of one log file. Use either a size (e.g. 10MB) or +## provide value in bytes: 10485760 +# +# log_file_max_size: 10MB + +## @param log_file_max_rolls - integer - optional - default: 1 +## @env DD_LOG_FILE_MAX_ROLLS - integer - optional - default: 1 +## Maximum amount of "old" log files to keep. +## Set to 0 to not limit the number of files to create. +# +# log_file_max_rolls: 1 + +## @param log_to_syslog - boolean - optional - default: false +## @env DD_LOG_TO_SYSLOG - boolean - optional - default: false +## Set to 'true' to enable logging to syslog. +## Note: Even if this option is set to 'false', the service launcher of your environment +## may redirect the Agent process' stdout/stderr to syslog. In that case, if you wish +## to disable logging to syslog entirely, set 'log_to_console' to 'false' as well. +# +# log_to_syslog: false + +## @param syslog_uri - string - optional +## @env DD_SYSLOG_URI - string - optional +## Define a custom remote syslog uri if needed. If 'syslog_uri' is left undefined/empty, +## a local domain socket connection is attempted. +# +# syslog_uri: + +## @param syslog_rfc - boolean - optional - default: false +## @env DD_SYSLOG_RFC - boolean - optional - default: false +## Set to 'true' to output in an RFC 5424-compliant format for Agent logs. +# +# syslog_rfc: false + +## @param syslog_pem - string - optional +## @env DD_SYSLOG_PEM - string - optional +## If TLS enabled, you must specify a path to a PEM certificate here. +# +# syslog_pem: + +## @param syslog_key - string - optional +## @env DD_SYSLOG_KEY - string - optional +## If TLS enabled, you must specify a path to a private key here. +# +# syslog_key: + +## @param syslog_tls_verify - boolean - optional - default: true +## @env DD_SYSLOG_TLS_VERIFY - boolean - optional - default: true +## If TLS enabled, you may enforce TLS verification here. +# +# syslog_tls_verify: true + +## @param log_format_rfc3339 - boolean - optional - default false +## @env DD_LOG_FORMAT_RFC3339 - boolean - optional - default false +## If enabled the Agent will log using the RFC3339 format for the log time. +# +# log_format_rfc3339: false + +## @param log_all_goroutines_when_unhealthy - boolean - optional - default false +## @env DD_LOG_ALL_GOROUTINES_WHEN_UNHEALTHY - boolean - optional - default false +## If enabled, when the health probe of an internal component fails, the stack traces +## of all the goroutines are logged. +# +# log_all_goroutines_when_unhealthy: false + +{{ end -}} +{{- if .Autoconfig }} + +############################## +## Autoconfig Configuration ## +############################## + +## @param autoconf_template_dir - string - optional - default: /datadog/check_configs +## @env DD_AUTOCONF_TEMPLATE_DIR - string - optional - default: /datadog/check_configs +## Directory containing configuration templates for Autoconfig. +# +# autoconf_template_dir: /datadog/check_configs + +## @param autoconf_config_files_poll - boolean - optional - default: false +## @env DD_AUTOCONF_CONFIG_FILES_POLL - boolean - optional - default: false +## Should the we check for new/updated integration configuration files on disk. +## WARNING: Only files containing checks configuration are supported (logs configuration are not supported). +# +# autoconf_config_files_poll: false + +## @param autoconf_config_files_poll_interval - integer - optional - default: 60 +## @env DD_AUTOCONF_CONFIG_FILES_POLL_INTERVAL - integer - optional - default: 60 +## How frequently should the Agent check for new/updated integration configuration files (in seconds). +## This value must be >= 1 (i.e. 1 second). +## WARNING: Only files containing checks configuration are supported (logs configuration are not supported). +# +# autoconf_config_files_poll_interval: 60 + +## @param config_providers - List of custom object - optional +## @env DD_CONFIG_PROVIDERS - List of custom object - optional +## The providers the Agent should call to collect checks configurations. Available providers are: +## * kubelet - The kubelet provider handles templates embedded in pod annotations. +## * docker - The Docker provider handles templates embedded in container labels. +## * clusterchecks - The clustercheck provider retrieves cluster-level check configurations from the cluster-agent. +## * kube_services - The kube_services provider watches Kubernetes services for cluster-checks +## +## See https://docs.datadoghq.com/guides/autodiscovery/ to learn more +# +# config_providers: +# - name: kubelet +# polling: true +# - name: docker +# polling: true +# - name: clusterchecks +# grace_time_seconds: 60 +{{ if .ClusterChecks }} +# - name: kube_services +# polling: true +{{ end -}} +# - name: etcd +# polling: true +# template_dir: /datadog/check_configs +# template_url: http://127.0.0.1 +# username: +# password: +# - name: consul +# polling: true +# template_dir: datadog/check_configs +# template_url: http://127.0.0.1 +# ca_file: +# ca_path: +# cert_file: +# key_file: +# username: +# password: +# token: +# - name: zookeeper +# polling: true +# template_dir: /datadog/check_configs +# template_url: 127.0.0.1 +# username: +# password: + +## @param extra_config_providers - list of strings - optional +## @env DD_EXTRA_CONFIG_PROVIDERS - space separated list of strings - optional +## Add additional config providers by name using their default settings, and pooling enabled. +## This list is available as an environment variable binding. +# +# extra_config_providers: +# - clusterchecks + +## @param autoconfig_exclude_features - list of comma separated strings - optional +## @env DD_AUTOCONFIG_EXCLUDE_FEATURES - list of space separated strings - optional +## Exclude features automatically detected and enabled by environment autodiscovery. +## Supported syntax is a list of `(:)`. Currently only the `name` attribute is supported. +## When no attribute is present, it defaults to `name:` attribute. +# +# autoconfig_exclude_features: +# - cloudfoundry +# - containerd +# - cri +# - docker +# - ecsec2 +# - ecsfargate +# - eksfargate +# - kubernetes +# - orchestratorexplorer +# - podman + +## @param autoconfig_include_features - list of comma separated strings - optional +## @env DD_AUTOCONFIG_INCLUDE_FEATURES - list of space separated strings - optional +## Force activation of features (as if they were discovered by environment autodiscovery). +# +# autoconfig_include_features: +# - cloudfoundry +# - containerd +# - cri +# - docker +# - ecsec2 +# - ecsfargate +# - eksfargate +# - kubernetes +# - orchestratorexplorer +# - podman + +{{ end -}} +{{- if .Autodiscovery }} + +########################################### +## Container Autodiscovery Configuration ## +########################################### + +## @param container_cgroup_root - string - optional - default: /host/sys/fs/cgroup/ +## @env DD_CONTAINER_CGROUP_ROOT - string - optional - default: /host/sys/fs/cgroup/ +## Change the root directory to look at to get cgroup statistics. +## Default if environment variable "DOCKER_DD_AGENT" is set to "/host/sys/fs/cgroup" +## and "/sys/fs/cgroup" if not. +# +# container_cgroup_root: /host/sys/fs/cgroup/ + +## @param container_proc_root - string - optional - default: /host/proc +## @env DD_CONTAINER_PROC_ROOT - string - optional - default: /host/proc +## Change the root directory to look at to get proc statistics. +## Default if environment variable "DOCKER_DD_AGENT" is set "/host/proc" and "/proc" if not. +# +# container_proc_root: /host/proc + +## @param listeners - list of key:value elements - optional +## @env DD_LISTENERS - list of key:value elements - optional +## Choose "auto" if you want to let the Agent find any relevant listener on your host +## At the moment, the only auto listener supported is Docker +## If you have already set Docker anywhere in the listeners, the auto listener is ignored +# +# listeners: +# - name: auto +# - name: docker + +## @param extra_listeners - list of strings - optional +## @env DD_EXTRA_LISTENERS - space separated list of strings - optional +## You can also add additional listeners by name using their default settings. +## This list is available as an environment variable binding. +# +# extra_listeners: +# - kubelet + +## @param ac_exclude - list of comma separated strings - optional +## @env DD_AC_EXCLUDE - list of space separated strings - optional +## Exclude containers from metrics and AD based on their name or image. +## If a container matches an exclude rule, it won't be included unless it first matches an include rule. +## An excluded container won't get any individual container metric reported for it. +## See: https://docs.datadoghq.com/agent/guide/autodiscovery-management/ +# +# ac_exclude: [] + +## @param ac_include - list of comma separated strings - optional +## @env DD_AC_INCLUDE - list of space separated strings - optional +## Include containers from metrics and AD based on their name or image: +## See: https://docs.datadoghq.com/agent/guide/autodiscovery-management/ +# +# ac_include: [] + +## @param exclude_pause_container - boolean - optional - default: true +## @env DD_EXCLUDE_PAUSE_CONTAINER - boolean - optional - default: true +## Exclude default pause containers from orchestrators. +## By default the Agent doesn't monitor kubernetes/openshift pause container. +## They are still counted in the container count (just like excluded containers). +# +# exclude_pause_container: true + +## @param docker_query_timeout - integer - optional - default: 5 +## @env DD_DOCKER_QUERY_TIMEOUT - integer - optional - default: 5 +## Set the default timeout value when connecting to the Docker daemon. +# +# docker_query_timeout: 5 + +## @param ad_config_poll_interval - integer - optional - default: 10 +## @env DD_AD_CONFIG_POLL_INTERVAL - integer - optional - default: 10 +## The default interval in second to check for new autodiscovery configurations +## on all registered configuration providers. +# +# ad_config_poll_interval: 10 + +## @param cloud_foundry_garden - custom object - optional +## Settings for Cloudfoundry application container autodiscovery. +# +# cloud_foundry_garden: + + ## @param listen_network - string - optional - default: unix + ## @env DD_CLOUD_FOUNDRY_GARDEN_LISTEN_NETWORK - string - optional - default: unix + ## The network on which the garden API is listening. Possible values are `unix` or `tcp` + # + # listen_network: unix + + ## @param listen_address - string - optional - default: /var/vcap/data/garden/garden.sock + ## @env DD_CLOUD_FOUNDRY_GARDEN_LISTEN_ADDRESS - string - optional - default: /var/vcap/data/garden/garden.sock + ## The address on which the garden API is listening. + # + # listen_address: /var/vcap/data/garden/garden.sock + +## @param podman_db_path - string - optional - default: "" +## @env DD_PODMAN_DB_PATH - string - optional - default: "" +## Settings for Podman DB that Datadog Agent collects container metrics. +# +# podman_db_path: "" + +{{ end -}} +{{- if .ClusterAgent }} + +################################# +## Cluster Agent Configuration ## +################################# + +## @param cluster_agent - custom object - optional +## Settings for the Cluster Agent. +## See https://docs.datadoghq.com/agent/cluster_agent/ +# +# cluster_agent: + + ## @param enabled - boolean - optional - default: false + ## Set to true to enable the Cluster Agent. + # + # enabled: false + + ## @param auth_token - string - optional - default: "" + ## Auth token used to make requests to the Kubernetes API server. + # + # auth_token: "" + + ## @param url - string - optional - default: "" + ## The Cluster Agent endpoint. There's no need to set it if "kubernetes_service_name" is set. + # + # url: "" + + ## @param kubernetes_service_name - string - optional - default: "datadog-cluster-agent" + ## Name of the Kubernetes service for the Cluster Agent. + # + # kubernetes_service_name: "datadog-cluster-agent" + + ## @param max_leader_connections - integer - optional - default: 100 + ## Maximum number of connections between a follower and a leader. + # + # max_leader_connections: 100 + + ## @param client_reconnect_period_seconds - integer - optional - default: 1200 + ## Set the refersh period for Agent to Cluster Agent connection (new connection is created, old connection is closed). + ## Set to 0 to disable periodic reconnection. + # + # client_reconnect_period_seconds: 1200 + + ## @param tagging_fallback - boolean - optional - default: false + ## Set to true to enabled fallback to local metamapper when the connection with the Cluster Agent fails. + # + # tagging_fallback: false + + ## @param server - custom object - optional + ## Sets the connection timeouts + # + # server: + + ## @param read_timeout_seconds - integer - optional - default: 2 + ## Read timeout in seconds. + # + # read_timeout_seconds: 2 + + ## @param write_timeout_seconds - integer - optional - default: 2 + ## Write timeout in seconds. + # + # write_timeout_seconds: 2 + + ## @param idle_timeout_seconds - integer - optional - default: 60 + ## Idle timeout in seconds. + # + # idle_timeout_seconds: 60 + +{{ end -}} +{{- if .ClusterChecks }} + +################################# +## Cluster check Configuration ## +################################# + +## @param cluster_checks - custom object - optional +## Enter specific configurations for your cluster check. +## The cluster-agent is able to autodiscover cluster resources and dispatch checks on +## the node-agents (provided the clustercheck config provider is enabled on them). +## Uncomment this parameter and the one below to enable them. +## See https://docs.datadoghq.com/agent/kubernetes/cluster/ +# +# cluster_checks: + + ## @param enabled - boolean - optional - default: false + ## @env DD_CLUSTER_CHECKS_ENABLED - boolean - optional - default: false + ## Set to true to enable the dispatching logic on the leader cluster-agent. + # + # enabled: false + + ## @param node_expiration_timeout - integer - optional - default: 30 + ## @env DD_CLUSTER_CHECKS_NODE_EXPIRATION_TIMEOUT - integer - optional - default: 30 + ## Set "node_expiration_timeout" time in second after which Node-agents that have not + ## queried the cluster-agent are deleted, and their checks re-dispatched to other nodes. + # + # node_expiration_timeout: 30 + + ## @param warmup_duration - integer - optional - default: 30 + ## @env DD_CLUSTER_CHECKS_WARMUP_DURATION - integer - optional - default: 30 + ## Set the "warmup_duration" duration in second for the cluster-agent to wait for all + ## node-agents to report to it before dispatching configurations. + # + # warmup_duration: 30 + + ## @param cluster_tag_name - string - optional - default: cluster_name + ## @env DD_CLUSTER_CHECKS_CLUSTER_TAG_NAME - string - optional - default: cluster_name + ## If a cluster_name value is set or autodetected, a "" tag is added + ## to all cluster-check configurations sent to the node-agents. + ## Set a custom tag name here, or disable it by setting an empty name. + # + # cluster_tag_name: cluster_name + + ## @param extra_tags - list of key:value elements - optional + ## @env DD_CLUSTER_CHECKS_EXTRA_TAGS - list of key:value elements - optional + ## Set a list of additionnal tags can to be added to every cluster-check configuration. + # + # extra_tags: + # - : + + ## @param advanced_dispatching_enabled - boolean - optional - default: false + ## @env DD_CLUSTER_CHECKS_ADVANCED_DISPATCHING_ENABLED - boolean - optional - default: false + ## If advanced_dispatching_enabled is true the leader cluster-agent collects stats + ## from the cluster level check runners to optimize the check dispatching logic. + # + # advanced_dispatching_enabled: false + + ## @param clc_runners_port - integer - optional - default: 5005 + ## @env DD_CLUSTER_CHECKS_CLC_RUNNERS_PORT - integer - optional - default: 5005 + ## Set the "clc_runners_port" used by the cluster-agent client to reach cluster level + ## check runners and collect their stats. + # + # clc_runners_port: 5005 + +{{ end -}} +{{- if .AdmissionController }} + +######################################## +## Admission controller Configuration ## +######################################## + +## @param admission_controller - custom object - optional +## Enter specific configurations for your admission controller. +## The Datadog admission controller is a component of the Datadog Cluster Agent. +## It has two main functionalities: +## Inject environment variables (DD_AGENT_HOST and DD_ENTITY_ID) to configure DogStatsD and APM tracer libraries into your application containers. +## Inject Datadog reserved tags (env, service, version) from application labels into the container environment variables. +## Uncomment this parameter and the one below to enable it. +## See https://docs.datadoghq.com/agent/cluster_agent/admission_controller/ +# +# admission_controller: + + ## @param enabled - boolean - optional - default: false + ## @env DD_ADMISSION_CONTROLLER_ENABLED - boolean - optional - default: false + ## Set to true to enable the admission controller in the cluster-agent. + # + # enabled: false + + ## @param validation - custom object - optional + ## The admission controller's validation configuration. + # + # validation: + + ## @param enabled - boolean - optional - default: true + ## @env DD_ADMISSION_CONTROLLER_VALIDATION_ENABLED - boolean - optional - default: true + ## Set to true to enable validation webhooks controller in the cluster-agent. + # + # enabled: true + + ## @param mutation - custom object - optional + ## The admission controller's mutation configuration. + # + # mutation: + + ## @param enabled - boolean - optional - default: true + ## @env DD_ADMISSION_CONTROLLER_MUTATION_ENABLED - boolean - optional - default: true + ## Set to true to enable mutation webhooks controller in the cluster-agent. + # + # enabled: true + + ## @param mutate_unlabelled - boolean - optional - default: false + ## @env DD_ADMISSION_CONTROLLER_MUTATE_ENABLED - boolean - optional - default: false + ## Enable injecting config without having the pod label admission.datadoghq.com/enabled="true". + # + # mutate_unlabelled: false + + ## @param port - integer - optional - default: 8000 + ## @env DD_ADMISSION_CONTROLLER_PORT - integer - optional - default: 8000 + ## The admission controller server port. + # + # port: 8000 + + ## @param timeout_seconds - integer - optional - default: 10 + ## @env DD_ADMISSION_CONTROLLER_TIMEOUT_SECONDS - integer - optional - default: 10 + ## The admission controller server timeout in seconds. + # + # timeout_seconds: 10 + + ## @param service_name - string - optional - default: datadog-admission-controller + ## @env DD_ADMISSION_CONTROLLER_SERVICE_NAME - string - optional - default: datadog-admission-controller + ## The name of the Kubernetes service that exposes the admission controller. + # + # service_name: datadog-admission-controller + + ## @param webhook_name - string - optional - default: datadog-webhook + ## @env DD_ADMISSION_CONTROLLER_WEBHOOK_NAME - string - optional - default: datadog-webhook + ## The name of the Kubernetes webhook object. + # + # webhook_name: datadog-webhook + + ## @param pod_owners_cache_validity - integer - optional - default: 10 + ## @env DD_ADMISSION_CONTROLLER_POD_OWNERS_CACHE_VALIDITY - integer - optional - default: pod_owners_cache_validity + ## The in-memory cache TTL for pod owners in minutes. + # + # pod_owners_cache_validity: 10 + + ## @param namespace_selector_fallback - boolean - optional - default: false + ## @env DD_ADMISSION_CONTROLLER_NAMESPACE_SELECTOR_FALLBACK - boolean - optional - default: false + ## Use namespace selectors instead of object selectors to watch objects. + ## For Kubernetes versions from 1.10 to 1.14 (inclusive) + # + # namespace_selector_fallback: false + + ## @param certificate - custom object - optional + ## The webhook's certificate configuration. + # + # certificate: + + ## @param validity_bound - integer - optional - default: 8760 + ## @env DD_ADMISSION_CONTROLLER_CERTIFICATE_VALIDITY_BOUND - integer - optional - default: 8760 + ## The certificate's validity bound in hours, default 1 year (365*24). + # + # validity_bound: 8760 + + ## @param expiration_threshold - integer - optional - default: 720 + ## @env DD_ADMISSION_CONTROLLER_CERTIFICATE_EXPIRATION_THRESHOLD - integer - optional - default: 720 + ## The certificate's refresh threshold in hours, default 1 month (30*24). + # + # expiration_threshold: 720 + + ## @param secret_name - string - optional - default: webhook-certificate + ## @env DD_ADMISSION_CONTROLLER_CERTIFICATE_SECRET_NAME - string - optional - default: webhook-certificate + ## Name of the Secret object containing the webhook certificate. + # + # secret_name: webhook-certificate + + ## @param inject_config - custom object - optional + ## Configuration injection parameters. + # + # inject_config: + + ## @param enabled - boolean - optional - default: true + ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_ENABLED - boolean - optional - default: true + ## Enable configuration injection (configure DogStatsD and APM tracer libraries). + # + # enabled: true + + ## @param endpoint - string - optional - default: /injectconfig + ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_ENDPOINT - string - optional - default: /injectconfig + ## Admission controller's endpoint responsible for handling configuration injection requests. + # + # endpoint: /injectconfig + + ## @param mode - string - optional - default: hostip + ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_MODE - string - optional - default: hostip + ## The kind of configuration to be injected, it can be "hostip", "service", or "socket". + # + # mode: hostip + + ## @param local_service_name - string - optional - default: datadog + ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_LOCAL_SERVICE_NAME - string - optional - default: datadog + ## Configure the local service name that exposes the Datadog Agent. Only applicable in "service" mode. + # + # local_service_name: datadog + + ## @param socket_path - string - optional - default: /var/run/datadog + ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_SOCKET_PATH - string - optional - default: /var/run/datadog + ## Configure Datadog Agent's socket path. Only applicable in "socket" mode. + # + # socket_path: /var/run/datadog + + ## @param trace_agent_socket - string - optional - default: unix:///var/run/datadog/apm.socket + ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_TRACE_AGENT_SOCKET - string - optional - default: unix:///var/run/datadog/apm.socket + ## Configure Trace Agent's socket path in the app container (DD_TRACE_AGENT_URL). + ## Only applicable in "socket" mode. + # + # trace_agent_socket: unix:///var/run/datadog/apm.socket + + ## @param type_socket_volumes - boolean - optional - default: false + ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_TYPE_SOCKET_VOLUMES - boolean - optional - default: false + ## When enabled, injected volumes are of type "Socket". This means that + ## injected pods will not start until the Agent creates the dogstatsd and + ## trace-agent sockets. This ensures no lost traces or dogstatsd metrics but + ## can cause the pod to wait if the agent has issues creating the sockets. + # + # type_socket_volumes: false + + ## @param inject_tags - custom object - optional + ## Tags injection parameters. + # + # inject_tags: + + ## @param enabled - boolean - optional - default: true + ## @env DD_ADMISSION_CONTROLLER_INJECT_TAGS_ENABLED - boolean - optional - default: true + ## Enable standard tags injection. + # + # enabled: true + + ## @param endpoint - string - optional - default: /injecttags + ## @env DD_ADMISSION_CONTROLLER_INJECT_TAGS_ENDPOINT - string - optional - default: /injecttags + ## Admission controller's endpoint responsible for handling tags injection requests. + # + # endpoint: /injecttags + + ## @param failure_policy - string - optional - default: Ignore + ## @env DD_ADMISSION_CONTROLLER_FAILURE_POLICY - string - optional - default: Ignore + ## Set the failure policy for dynamic admission control. + ## The default of Ignore means that pods will still be admitted even if the webhook is unavailable to inject them. + ## Setting to Fail will require the admission controller to be present and pods to be injected before they are allowed to run. + # + # failure_policy: Ignore + + ## @param reinvocation_policy - string - optional - default: IfNeeded + ## @env DD_ADMISSION_CONTROLLER_REINVOCATION_POLICY - string - optional - default: IfNeeded + ## Set the reinvocation policy for dynamic admission control. + ## See https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#reinvocation-policy + # + # reinvocation_policy: IfNeeded + + ## @param add_aks_selectors - boolean - optional - default: false + ## @env DD_ADMISSION_CONTROLLER_ADD_AKS_SELECTORS - boolean - optional - default: false + ## Adds in the admission controller webhook the selectors that are required in AKS. + ## See https://docs.microsoft.com/en-us/azure/aks/faq#can-i-use-admission-controller-webhooks-on-aks + # + # add_aks_selectors: false + + ## @param auto_instrumentation - custom object - optional + ## Library injection parameters. + # + # auto_instrumentation: + + ## @param init_resources - custom object - optional + ## CPU and Memory resources of the init containers. + # + # init_resources: + + ## @param cpu - string - optional + ## @env DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_INIT_RESOURCES_CPU - string - optional + ## Configures the CPU request and limit for the init containers. + # + # cpu: + + ## @param memory - string - optional + ## @env DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_INIT_RESOURCES_MEMORY - string - optional + ## Configures the memory request and limit for the init containers. + # + # memory: + + ## @param init_security_context - json - optional + ## @env DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_INIT_SECURITY_CONTEXT - json - optional + ## Security context for the init containers in JSON format. Follows the Kubernetes security context spec, + ## https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#securitycontext-v1-core, + ## ignores unknown properties. + # + # init_security_context: '{"privileged": false}' + # + # DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_INIT_SECURITY_CONTEXT='{"privileged": false}' +{{ end -}} +{{- if .DockerTagging }} + +######################### +## Container detection ## +######################### + +## @param container_cgroup_prefix - string - optional - default: /docker/ +## @env DD_CONTAINER_CGROUP_PREFIX - string - optional - default: /docker/ +## On hosts with mixed workloads, non-containernized processes can +## mistakenly be detected as containerized. Use this parameter to +## tune the detection logic to your system and avoid false-positives. +# +# container_cgroup_prefix: "/docker/" + +########################### +## Docker tag extraction ## +########################### + +## @param docker_labels_as_tags - map - optional +## @env DD_DOCKER_LABELS_AS_TAGS - json - optional +## The Agent can extract container label values and set them as metric tags values associated to a . +## If you prefix your tag name with `+`, it will only be added to high cardinality metrics (Docker check). +# +# docker_labels_as_tags: +# : +# : + +# +# DD_DOCKER_LABELS_AS_TAGS='{"LABEL_NAME":"tag_key"}' + +## @param docker_env_as_tags - map - optional +## @env DD_DOCKER_ENV_AS_TAGS - json - optional +## The Agent can extract environment variables values and set them as metric tags values associated to a . +## If you prefix your tag name with `+`, it will only be added to high cardinality metrics (Docker check). +# +# docker_env_as_tags: +# : +# +# DD_DOCKER_ENV_AS_TAGS='{"ENVVAR_NAME": "tag_key"}' + +{{ end -}} +{{- if .KubernetesTagging }} + +############################### +## Kubernetes tag extraction ## +############################### + +## @param kubernetes_pod_labels_as_tags - map - optional +## @env DD_KUBERNETES_POD_LABELS_AS_TAGS - json - optional +## The Agent can extract pod labels values and set them as metric tags values associated to a . +## If you prefix your tag name with +, it will only be added to high cardinality metrics. +# +# kubernetes_pod_labels_as_tags: +# : +# : + +# +# DD_KUBERNETES_POD_LABELS_AS_TAGS='{"LABEL_NAME":"tag_key"}' + +## @param kubernetes_pod_annotations_as_tags - map - optional +## @env DD_KUBERNETES_POD_ANNOTATIONS_AS_TAGS - json - optional +## The Agent can extract annotations values and set them as metric tags values associated to a . +## If you prefix your tag name with +, it will only be added to high cardinality metrics. +# +# kubernetes_pod_annotations_as_tags: +# : +# : + +# +# DD_KUBERNETES_POD_ANNOTATIONS_AS_TAGS='{"ANNOTATION_NAME":"tag_key"}' + +## @param kubernetes_namespace_labels_as_tags - map - optional +## @env DD_KUBERNETES_NAMESPACE_LABELS_AS_TAGS - json - optional +## The Agent can extract namespace label values and set them as metric tags values associated to a . +## If you prefix your tag name with +, it will only be added to high cardinality metrics. +# +# kubernetes_namespace_labels_as_tags: +# : +# : + +# +# DD_KUBERNETES_NAMESPACE_LABELS_AS_TAGS='{"": ""}' + +## @param container_env_as_tags - map - optional +## @env DD_CONTAINER_ENV_AS_TAGS - map - optional +## The Agent can extract environment variable values and set them as metric tags values associated to a . +## Requires the container runtime socket to be reachable. (Supported container runtimes: Containerd, Docker) +# +# container_env_as_tags: +# : + +## @param container_labels_as_tags - map - optional +## @env DD_CONTAINER_LABELS_AS_TAGS - map - optional +## The Agent can extract container label values and set them as metric tags values associated to a . +## If you prefix your tag name with `+`, it will only be added to high cardinality metrics. (Supported container +## runtimes: Containerd, Docker). +# +# container_labels_as_tags: +# : +# : + + +{{ end -}} +{{- if .ECS }} + +################################### +## ECS integration Configuration ## +################################### + +## @param ecs_agent_container_name - string - optional - default: ecs-agent +## @env DD_ECS_AGENT_CONTAINER_NAME - string - optional - default: ecs-agent +## The ECS Agent container should be autodetected when running with the +## default (ecs-agent) name. If not, change the container name here: +# +# ecs_agent_container_name: ecs-agent + +## @param ecs_agent_url - string - optional - default: http://localhost:51678 +## @env DD_ECS_AGENT_URL - string - optional - default: http://localhost:51678 +## The ECS Agent container should be autodetected when running with the +## default (ecs-agent) name. If not, change the container name the +## Agent should look for with ecs_agent_container_name, or force a fixed url here: +# +# ecs_agent_url: http://localhost:51678 + +## @param ecs_collect_resource_tags_ec2 - boolean - optional - default: false +## @env DD_ECS_COLLECT_RESOURCE_TAGS_EC2 - boolean - optional - default: false +## The Agent can collect resource tags from the metadata API exposed by the +## ECS Agent for tasks scheduled with the EC2 launch type. +# +# ecs_collect_resource_tags_ec2: false + +## @param ecs_resource_tags_replace_colon - boolean - optional - default: false +## @env DD_ECS_RESOURCE_TAGS_REPLACE_COLON - boolean - optional - default: false +## The Agent replaces colon `:` characters in the ECS resource tag keys by underscores `_`. +# +# ecs_resource_tags_replace_colon: false + +## @param ecs_metadata_timeout - integer - optional - default: 500 +## @env DD_ECS_METADATA_TIMEOUT - integer - optional - default: 500 +## Timeout in milliseconds on calls to the AWS ECS metadata endpoints. +# +# ecs_metadata_timeout: 500 + +## @param ecs_task_collection_enabled - boolean - optional - default: false +## @env DD_ECS_TASK_COLLECTION_ENABLED - boolean - optional - default: false +## The Agent can collect detailed task information from the metadata API exposed by the ECS Agent, +## which is used for the orchestrator ECS check. +# +# ecs_task_collection_enabled: false + +{{ end -}} +{{- if .CRI }} + +################################### +## CRI integration Configuration ## +################################### + +## @param cri_socket_path - string - optional - default: "" +## @env DD_CRI_SOCKET_PATH - string - optional - default: "" +## To activate the CRI check, indicate the path of the CRI socket you're using +## and mount it in the container if needed. +## If left empty, the CRI check is disabled. +## see: https://docs.datadoghq.com/integrations/cri/ +# +# cri_socket_path: "" + +## @param cri_connection_timeout - integer - optional - default: 1 +## @env DD_CRI_CONNECTION_TIMEOUT - integer - optional - default: 1 +## Configure the initial connection timeout in seconds. +# +# cri_connection_timeout: 1 + +## @param cri_query_timeout - integer - optional - default: 5 +## @env DD_CRI_QUERY_TIMEOUT - integer - optional - default: 5 +## Configure the timeout in seconds for querying the CRI. +# +# cri_query_timeout: 5 + +{{ end -}} +{{- if .Containerd}} + +########################################## +## Containerd integration Configuration ## +########################################## + +## @param cri_socket_path - string - optional - default: /var/run/containerd/containerd.sock +## @env DD_CRI_SOCKET_PATH - string - optional - default: /var/run/containerd/containerd.sock +## To activate the Containerd check, indicate the path of the Containerd socket you're using +## and mount it in the container if needed. +## see: https://docs.datadoghq.com/integrations/containerd/ +# +# cri_socket_path: /var/run/containerd/containerd.sock + +## @param cri_query_timeout - integer - optional - default: 5 +## @env DD_CRI_QUERY_TIMEOUT - integer - optional - default: 5 +## Configure the timeout in seconds for querying the Containerd API. +# +# cri_query_timeout: 5 + +## Deprecated - use `containerd_namespaces` instead +## @param containerd_namespace - list of strings - optional - default: [] +## @env DD_CONTAINERD_NAMESPACE - space separated list of strings - optional - default: [] +## Activating the Containerd check also activates the CRI check, as it contains an additional subset of useful metrics. +## Defaults to [] which configures the agent to report metrics and events from all the containerd namespaces. +## To watch specific namespaces, list them here. +## https://github.com/containerd/cri/blob/release/1.2/pkg/constants/constants.go#L22-L23 +# +# containerd_namespace: +# - k8s.io + +## @param containerd_namespaces - list of strings - optional - default: [] +## @env DD_CONTAINERD_NAMESPACES - space separated list of strings - optional - default: [] +## Activating the Containerd check also activates the CRI check, as it contains an additional subset of useful metrics. +## Defaults to [] which configures the agent to report metrics and events from all the containerd namespaces. +## containerd_namespaces acts as an alias for containerd_namespace. When both containerd_namespaces and containerd_namespace +## are configured, the Agent merges the two lists. +# +# containerd_namespaces: +# - k8s.io +# +## @param containerd_exclude_namespaces - list of strings - optional - default: ["moby"] +## @env DD_CONTAINERD_EXCLUDE_NAMESPACES - space separated list of strings - optional - default: ["moby"] +## When containerd_namespaces is set to [], containerd_exclude_namespaces +## allows the exclusion of containers from specific namespaces. By default it +## excludes "moby", to prevent Docker containers from being detected as +## containerd containers. +# +# containerd_exclude_namespaces: +# - moby + +{{ end -}} +{{- if .Kubelet }} + +################################################### +## Kubernetes kubelet connectivity Configuration ## +################################################### + +## @param kubernetes_kubelet_host - string - optional +## @env DD_KUBERNETES_KUBELET_HOST - string - optional +## The kubelet host should be autodetected when running inside a pod. +## If you run into connectivity issues, set the host here according to your cluster setup. +# +# kubernetes_kubelet_host: + +## @param kubernetes_http_kubelet_port - integer - optional - default: 10255 +## @env DD_KUBERNETES_HTTP_KUBELET_PORT - integer - optional - default: 10255 +## The kubelet http port should be autodetected when running inside a pod. +## If you run into connectivity issues, set the http port here according to your cluster setup. +# +# kubernetes_http_kubelet_port: 10255 + +## @param kubernetes_https_kubelet_port - integer - optional - default: 10250 +## @env DD_KUBERNETES_HTTPS_KUBELET_PORT - integer - optional - default: 10250 +## The kubelet https port should be autodetected when running inside a pod. +## If you run into connectivity issues, set the https port here according to your cluster setup. +# +# kubernetes_https_kubelet_port: 10250 + +## @param kubelet_tls_verify - boolean - optional - default: true +## @env DD_KUBELET_TLS_VERIFY - boolean - optional - default: true +## Set to false if you don't want the Agent to verify the kubelet's certificate when using HTTPS. +# +# kubelet_tls_verify: true + +## @param kubelet_client_ca - string - optional - default: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt +## @env DD_KUBELET_CLIENT_CA - string - optional - default: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt +## Kublet client CA file path. +# +# kubelet_client_ca: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + +## @param kubelet_auth_token_path - string - optional +## @env DD_KUBELET_AUTH_TOKEN_PATH - string - optional +## If authentication is needed, the Agent uses the pod's service account's +## credentials. If you want to use a different account, or are running the Agent +## on the host, set a custom token file path here. +# +# kubelet_auth_token_path: + +## @param kubelet_client_crt - string - optional +## @env DD_KUBELET_CLIENT_CRT - string - optional +## Set a custom Client CRT file path. +# +# kubelet_client_crt: + +## @param kubelet_client_key - string - optional +## @env DD_KUBELET_CLIENT_KEY - string - optional +## Set a custom Client key file path. +# +# kubelet_client_key: + +## @param kubelet_wait_on_missing_container - integer - optional - default: 0 +## @env DD_KUBELET_WAIT_ON_MISSING_CONTAINER - integer - optional - default: 0 +## On some kubelet versions, containers can take up to a second to +## register in the podlist. This option allows to wait for up to a given +## number of seconds (in 250ms chunks) when a container does not exist in the podlist. +# +# kubelet_wait_on_missing_container: 0 + +## @param kubelet_cache_pods_duration - integer - optional - default: 5 +## @env DD_KUBELET_CACHE_PODS_DURATION - integer - optional - default: 5 +## Polling frequency in seconds of the Agent to the kubelet "/pods" endpoint. +# +# kubelet_cache_pods_duration: 5 + +## @param kubernetes_pod_expiration_duration - integer - optional - default: 900 +## @env DD_KUBERNETES_POD_EXPIRATION_DURATION - integer - optional - default: 900 +## Set the time in second after which the Agent ignores the pods that have exited. +## Set the duration to 0 to disable this filtering. +# +# kubernetes_pod_expiration_duration: 900 + +## @param kubelet_listener_polling_interval - integer - optional - default: 5 +## @env DD_KUBELET_LISTENER_POLLING_INTERVAL - integer - optional - default: 5 +## Polling frequency in seconds at which autodiscovery will query the pod watcher to detect new pods/containers. +## Note that kubelet_cache_pods_duration needs to be lower than this setting, or autodiscovery will only poll more frequently the same cached data (kubelet_cache_pods_duration controls the cache refresh frequency). +# +# kubelet_listener_polling_interval: 5 + +{{ end -}} +{{- if .KubeApiServer }} + +#################################################### +## Kubernetes apiserver integration Configuration ## +#################################################### + +## @param kubernetes_kubeconfig_path - string - optional - default: "" +## @env DD_KUBERNETES_KUBECONFIG_PATH - string - optional - default: "" +## When running in a pod, the Agent automatically uses the pod's service account +## to authenticate with the API server. +## Provide the path to a custom KubeConfig file if you wish to install the Agent out of a pod +## or customize connection parameters. +## See https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/ +# +# kubernetes_kubeconfig_path: "" + +## @param kubernetes_apiserver_ca_path - string - optional - default: "" +## @env DD_KUBERNETES_APISERVER_CA_PATH - string - optional - default: "" +## When running in a pod, the Agent automatically uses the pod's service account CA. +## Use this option to keep using the InCluster config but overriding the default CA Path. +## This parameter has no effect if `kubernetes_kubeconfig_path` is set. +# +# kubernetes_apiserver_ca_path: "" + +## @param kubernetes_apiserver_tls_verify - boolean - optional - default: true +## @env DD_KUBERNETES_APISERVER_TLS_VERIFY - boolean - optional - default: true +## When running in a pod, the Agent automatically uses the pod's service account CA. +## Use this option to keep using the InCluster config but deactivating TLS verification (in case APIServer CA is not ServiceAccount CA) +## This parameter has no effect if `kubernetes_kubeconfig_path` is set. +# +# kubernetes_apiserver_tls_verify: true + +## @param kubernetes_apiserver_use_protobuf - boolean - optional - default: false +## @env DD_KUBERNETES_APISERVER_USE_PROTOBUF - boolean - optional - default: false +## By default, communication with the apiserver is in json format. Setting the following +## option to true allows communication in the binary protobuf format. +# +# kubernetes_apiserver_use_protobuf: false + +## @param kubernetes_collect_metadata_tags - boolean - optional - default: true +## @env DD_KUBERNETES_COLLECT_METADATA_TAGS - boolean - optional - default: true +## Set this to false to disable tag collection for the Agent. +## Note: In order to collect Kubernetes service names, the Agent needs certain rights. +## See https://github.com/DataDog/datadog-agent/blob/main/Dockerfiles/agent/README.md#kubernetes +# +# kubernetes_collect_metadata_tags: true + +## @param kubernetes_metadata_tag_update_freq - integer - optional - default: 60 +## @env DD_KUBERNETES_METADATA_TAG_UPDATE_FREQ - integer - optional - default: 60 +## Set how often in secons the Agent refreshes the internal mapping of services to ContainerIDs. +# +# kubernetes_metadata_tag_update_freq: 60 + +## @param kubernetes_apiserver_client_timeout - integer - optional - default: 10 +## @env DD_KUBERNETES_APISERVER_CLIENT_TIMEOUT - integer - optional - default: 10 +## Set the timeout for the Agent when connecting to the Kubernetes API server. +# +# kubernetes_apiserver_client_timeout: 10 + +## @param collect_kubernetes_events - boolean - optional - default: false +## @env DD_COLLECT_KUBERNETES_EVENTS - boolean - optional - default: false +## Set `collect_kubernetes_events` to true to enable collection of kubernetes +## events to be sent to Datadog. +## Note: leader election must be enabled below to collect events. +## Only the leader Agent collects events. +## See https://github.com/DataDog/datadog-agent/blob/main/Dockerfiles/agent/README.md#event-collection +# +# collect_kubernetes_events: false + +## @param kubernetes_event_collection_timeout - integer - optional - default: 100 +## @env DD_KUBERNETES_EVENT_COLLECTION_TIMEOUT - integer - optional - default: 100 +## Set the timeout between two successful event collections in milliseconds. +# +# kubernetes_event_collection_timeout: 100 + +## @param leader_election - boolean - optional - default: false +## @env DD_LEADER_ELECTION - boolean - optional - default: false +## Set the parameter to true to enable leader election on this node. +## See https://github.com/DataDog/datadog-agent/blob/main/Dockerfiles/agent/README.md#leader-election +# +# leader_election: false + +## @param leader_lease_duration - integer - optional - default: 60 +## @env DD_LEADER_LEASE_DURATION - integer - optional - default: 60 +## Set the leader election lease in seconds. +# +# leader_lease_duration: 60 + +## @param kubernetes_node_labels_as_tags - map - optional +## @env DD_KUBERNETES_NODE_LABELS_AS_TAGS - json - optional +## Configure node labels that should be collected and their name as host tags. +## Note: Some of these labels are redundant with metadata collected by cloud provider crawlers (AWS, GCE, Azure) +# +# kubernetes_node_labels_as_tags: +# kubernetes.io/hostname: nodename +# beta.kubernetes.io/os: os +# +# DD_KUBERNETES_NODE_LABELS_AS_TAGS='{"NODE_LABEL": "TAG_KEY"}' + +## @param kubernetes_node_annotations_as_tags - map - optional +## @env DD_KUBERNETES_NODE_ANNOTATIONS_AS_TAGS - json - optional +## Configure node annotationss that should be collected and their name as host tags. +# +# kubernetes_node_annotations_as_tags: +# cluster.k8s.io/machine: machine +# +# DD_KUBERNETES_NODE_ANNOTATIONS_AS_TAGS='{"NODE_ANNOTATION": "TAG_KEY"}' + +## @param kubernetes_node_annotations_as_host_aliases - list - optional +## @env DD_KUBERNETES_NODE_ANNOTATIONS_AS_HOST_ALIASES - list - optional +## Configure node annotations that should be collected and used as host aliases. +# +# kubernetes_node_annotations_as_host_aliases: +# - cluster.k8s.io/machine +# +# DD_KUBERNETES_NODE_ANNOTATIONS_AS_HOST_ALIASES='["cluster.k8s.io/machine"]' + +## @param cluster_name - string - optional +## @env DD_CLUSTER_NAME - string - optional +## Set a custom kubernetes cluster identifier to avoid host alias collisions. +## The cluster name can be up to 40 characters with the following restrictions: +## * Lowercase letters, numbers, and hyphens only. +## * Must start with a letter. +## * Must end with a number or a letter. +## +## These are the same rules as the ones enforced by GKE: +## https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#Cluster.FIELDS.name +# +# cluster_name: + +## @param disable_cluster_name_tag_key - boolean - optional - default: false +## @env DD_DISABLE_CLUSTER_NAME_TAG_KEY - boolean - optional - default: false +## Disable using the 'cluster_name' tag key to submit orchestrator cluster name tag. +## The Agent will continue sending the cluster name tag with 'kube|ecs_cluster_name' key +## regardless of the value of this parameter. +# +# disable_cluster_name_tag_key: false + +## @param kubernetes_ad_tags_disabled -- list of strings - optional +## @env DD_KUBERNETES_AD_TAGS_DISABLED -- list of strings - optional +## Can only be set to a single valid value: [ "kube_service" ] +## in order to not attach the kube_service tag on ready pods +# +# kubernetes_ad_tags_disabled: +# - kube_service + +{{ end -}} +{{- if .PrometheusScrape }} +## @param prometheus_scrape - custom object - optional +## This section configures the Autodiscovery based on the Prometheus annotations +# +# prometheus: + + ## @param enabled - boolean - optional - default: false + ## Enables the prometheus config provider + # + # enabled: false + + ## @param service_endpoints - boolean - optional - default: false + ## Enables Service Endpoints checks in the prometheus config provider + # + # service_endpoints: false + + ## @param checks - custom object - optional + ## Defines any extra prometheus/openmetrics check configurations to be handled by the prometheus config provider + # + # checks: {} + + ## @param version - integer - optional - default: 1 + ## Version of the openmetrics check to be scheduled by the Prometheus auto-discovery + # + # version: 1 + +{{ end -}} +{{- if .CloudFoundryBBS }} +####################################################### +## Cloud Foundry BBS Configuration for Autodiscovery ## +####################################################### + +## @param cloud_foundry_bbs - custom object - optional +## This section configures how the Cluster Agent accesses BBS API to gather information +## necessary for autodiscovery on BBS-based Cloud Foundry deployments. +# +# cloud_foundry_bbs: + + ## @param url - string - optional - default: https://bbs.service.cf.internal:8889 + ## @env DD_CLOUD_FOUNDRY_BBS_URL - string - optional - default: https://bbs.service.cf.internal:8889 + ## URL of the BBS API. + # + # url: https://bbs.service.cf.internal:8889 + + ## @param poll_interval - integer - optional - default: 15 + ## @env DD_CLOUD_FOUNDRY_BBS_POLL_INTERVAL - integer - optional - default: 15 + ## Refresh rate of BBS API, in seconds. Values lower than 10 might influence + ## performance of other operations in the cluster. + # + # poll_interval: 15 + + ## @param ca_file - string - optional - default: "" + ## @env DD_CLOUD_FOUNDRY_BBS_CA_FILE - string - optional - default: "" + ## PEM-encoded CA certificate used when connecting to the BBS API. + # + # ca_file: "" + + ## @param cert_file - string - optional - default: "" + ## @env DD_CLOUD_FOUNDRY_BBS_CERT_FILE - string - optional - default: "" + ## PEM-encoded client certificate used when connecting to the BBS API. + # + # cert_file: "" + + ## @param key_file - string - optional - default: "" + ## @env DD_CLOUD_FOUNDRY_BBS_KEY_FILE - string - optional - default: "" + ## PEM-encoded client key used when connecting to the BBS API. + # + # key_file: "" + + ## @param env_include - list of strings - optional - default: [] + ## @env DD_CLOUD_FOUNDRY_BBS_ENV_INCLUDE - list of strings - optional + ## List of regular expressions to allow a set of environment variables to be included as container tags + # + # env_include: [] + ## @param env_exclude - list of strings - optional - default: [] + ## @env DD_CLOUD_FOUNDRY_BBS_ENV_EXCLUDE - list of strings - optional + ## List of regular expressions to forbid a set of environment variables to be included as container tags + # + # env_exclude: [] + +{{ end -}} +{{- if .CloudFoundryCC }} +#################################################################### +## Cloud Foundry Cloud Controller Configuration for Autodiscovery ## +#################################################################### + +## @param cloud_foundry_cc - custom object - optional +## This section configures how the Cluster Agent accesses CC API to gather information +## necessary for autodiscovery on Cloud Foundry deployments. +# +# cloud_foundry_cc: + + ## @param url - string - optional - default: https://cloud-controller-ng.service.cf.internal:9024 + ## @env DD_CLOUD_FOUNDRY_CC_URL - string - optional - default: https://cloud-controller-ng.service.cf.internal:9024 + ## URL of the CC API. + # + # url: https://cloud-controller-ng.service.cf.internal:9024 + + ## @param client_id - string - optional + ## @env DD_CLOUD_FOUNDRY_CC_CLIENT_ID + ## Client ID for oauth with UAA to get a token to access the CC API. + # + # client_id: + + ## @param client_secret - string - optional + ## @env DD_CLOUD_FOUNDRY_CC_CLIENT_SECRET + ## Client secrect for oauth with UAA to get a token to access the CC API. + # + # client_secret: + + ## @param skip_ssl_validation - boolean - optional - default: false + ## @env DD_CLOUD_FOUNDRY_CC_SKIP_SSL_VALIDATION + ## Whether or not to skip SSL validation when interacting with CC API. + # + # skip_ssl_validation: false + + ## @param poll_interval - integer - optional - default: 60 + ## @env DD_CLOUD_FOUNDRY_CC_POLL_INTERVAL + ## Refresh rate of CC API, in seconds. Values lower than 10 might influence + ## performance of other operations in the cluster. + # + # poll_interval: 60 + + ## @param apps_batch_size - integer - optional - default: 5000 + ## @env DD_CLOUD_FOUNDRY_CC_APPS_BATCH_SIZE + ## Number of apps per page to collect when calling the list apps endpoint of the CC API. Max 5000. + # + # apps_batch_size: 5000 + +{{ end -}} +{{- if .SNMP }} + +################################### +## Network Devices Configuration ## +################################### + +## @param network_devices - custom object - optional +## Configuration related to Network Devices Monitoring +# +# network_devices: + + ## @param namespace - string - optional - default: default + ## Namespace can be used to disambiguate devices with the same IP. + ## Changing namespace will cause devices being recreated in NDM app. + ## It should contain less than 100 characters and should not contain any of + ## `<`, `>`, `\n`, `\t`, `\r` characters. + ## This field is used by NDM features (SNMP check, SNMP Traps listener, etc). + # + # namespace: default + + ## @param autodiscovery - custom object - optional + ## Creates and schedules a listener to automatically discover your SNMP devices. + ## Discovered devices can then be monitored with the SNMP integration by using + ## the auto_conf.yaml file provided by default. + # + # autodiscovery: + + ## @param workers - integer - optional - default: 2 + ## The number of concurrent tasks used to discover SNMP devices. Increasing this value + ## discovers devices faster but at the cost of increased resource consumption. + # + # workers: 2 + + ## @param discovery_interval - integer - optional - default: 3600 + ## How often to discover new SNMP devices, in seconds. Decreasing this value + ## discovers devices faster (within the limit of the time taken to scan subnets) + ## but at the cost of increased resource consumption. + # + # discovery_interval: 3600 + + ## @param discovery_allowed_failures - integer - optional - default: 3 + ## The number of failed requests to a given SNMP device before removing it from the list of monitored + ## devices. + ## If a device shuts down, the Agent stops monitoring it after `discovery_interval * discovery_allowed_failures` seconds. + # + # discovery_allowed_failures: 3 + + ## @param loader - string - optional - default: python + ## Check loader to use. Available loaders: + ## - core: (recommended) Uses new corecheck SNMP integration + ## - python: Uses legacy python SNMP integration + # + # loader: core + + ## @param min_collection_interval - number - optional - default: 15 + ## This changes the collection interval for the check instances created + ## from discovered SNMP devices. + ## For more information, see: + ## https://docs.datadoghq.com/developers/write_agent_check/#collection-interval + # + # min_collection_interval: 15 + + ## @param use_device_id_as_hostname - boolean - optional - default: false + ## Use `device:` (device_id is composed of `:`) as `hostname` + ## for metrics and service checks (meaning that metrics and services checks will have + ## `host:device:` as tag). + ## This option is needed for custom tags. + # + # use_device_id_as_hostname: true + + ## @param collect_topology - boolean - optional - default: true + ## Enable the collection of topology (LLDP/CDP) data + # + # collect_topology: true + + ## @param ping - custom object - optional + ## Configure ICMP pings for all hosts in SNMP autodiscovery + ## Devices will be pinged with these settings each time the SNMP + ## check is run. + ## + ## By default, Datadog tries to use an unprivileged UDP socket to send ICMP + ## pings, but some Linux systems require using a raw socket. + ## + ## If `linux.use_raw_socket` is set, you must enable the `ping` module + ## of system-probe for elevated privileges. See + ## system-probe.yaml.example for details. + # + # ping: + # enabled: true # Disabled by default + # timeout: 3000 # Timeout in milliseconds + # count: 2 # Number of ping packets to send per check run + # interval: 10 # Time between sending pings (up to `count` packets) in milliseconds + # linux: # Linux-specific configuration + # use_raw_socket: true # Send pings in a privileged fashion using a raw socket. + # # This may be required if your system doesn't support + # # sending pings in an unprivileged fashion (using a UDP socket). + # # If `use_raw_socket` is set to true, you MUST also enable + # # system-probe which has elevated privileges. To enable it, see system-probe.yaml.example. + + ## @param configs - list - required + ## The actual list of configurations used to discover SNMP devices in various subnets. + ## Example: + ## configs: + ## - network_address: 10.0.0.0/24 + ## snmp_version: 1 + ## community_string: public + ## - network_address: 10.0.1.0/28 + ## community_string: public + ## ignored_ip_addresses: + ## - 10.0.1.0 + ## - 10.0.1.1 + # + # configs: + ## @param network_address - string - required + ## The subnet in CIDR format to scan for SNMP devices. + ## All unignored IP addresses in the CIDR range are scanned. + ## For optimal discovery time, be sure to use the smallest network mask + ## possible as is appropriate for your network topology. + ## Ex: 10.0.1.0/24 + # + # - network_address: + + ## @param ignored_ip_addresses - list of strings - optional + ## A list of IP addresses to ignore when scanning the network. + # + # ignored_ip_addresses: + # - + # - + + ## @param port - integer - optional - default: 161 + ## The UDP port to use when connecting to SNMP devices. + # + # port: 161 + + ## @param snmp_version - integer - optional - default: + ## Set the version of the SNMP protocol. Available options are: `1`, `2` or `3`. + ## If unset, the Agent tries to guess the correct version based on other configuration + ## parameters, for example: if `user` is set, the Agent uses SNMP v3. + # + # snmp_version: + + ## @param timeout - integer - optional - default: 5 + ## The number of seconds before timing out. + # + # timeout: 5 + + ## @param retries - integer - optional - default: 3 + ## The number of retries before failure. + # + # retries: 3 + + ## @param community_string - string - optional + ## Required for SNMP v1 & v2. + ## Enclose the community string with single quote like below (to avoid special characters being interpreted). + ## Ex: 'public' + # + # community_string: '' + + ## @param user - string - optional + ## The username to connect to your SNMP devices. + ## SNMPv3 only. + # + # user: + + ## @param authKey - string - optional + ## The passphrase to use with your Authentication type. + ## SNMPv3 only. + # + # authKey: + + ## @param authProtocol - string - optional + ## The authentication protocol to use when connecting to your SNMP devices. + ## Available options are: MD5, SHA, SHA224, SHA256, SHA384, SHA512 + ## Defaults to MD5 when `authentication_key` is specified. + ## SNMPv3 only. + # + # authProtocol: + + ## @param privKey - string - optional + ## The passphrase to use with your privacy protocol. + ## SNMPv3 only. + # + # privKey: + + ## @param privProtocol - string - optional + ## The privacy protocol to use when connecting to your SNMP devices. + ## Available options are: DES, AES (128 bits), AES192, AES192C, AES256, AES256C + ## Defaults to DES when `privacy_key` is specified. + ## SNMPv3 only. + # + # privProtocol: + + ## @param context_name - string - optional + ## The name of your context (optional SNMP v3-only parameter). + # + # context_name: + + ## @param tags - list of strings - optional + ## A list of tags to attach to every metric and service check of all devices discovered in the subnet. + ## + ## Learn more about tagging at https://docs.datadoghq.com/tagging + # + # tags: + # - : + # - : + + ## @param ad_identifier - string - optional - default: snmp + ## A unique identifier to attach to devices from that subnetwork. + ## When configuring the SNMP integration in snmp.d/auto_conf.yaml, + ## specify the corresponding ad_identifier at the top of the file. + # + # ad_identifier: snmp + + ## @param loader - string - optional - default: python + ## Check loader to use. Available loaders: + ## - core: will use corecheck SNMP integration + ## - python: will use python SNMP integration + # + # loader: core + + ## @param min_collection_interval - number - optional - default: 15 + ## This changes the collection interval for the check instances created from + ## discovered SNMP devices. It applies to each specific config from `snmp_listener.configs` + ## and has precedence over `snmp_listener.min_collection_interval`. + ## For more information, see: + ## https://docs.datadoghq.com/developers/write_agent_check/#collection-interval + # + # min_collection_interval: 15 + + ## @param use_device_id_as_hostname - boolean - optional - default: false + ## Use `device:` (device_id is composed of `:`) as `hostname` + ## for metrics and service checks (meaning that metrics and services checks will have + ## `host:device:` as tag). + ## This option is needed for custom tags. + # + # use_device_id_as_hostname: true + + ## @param oid_batch_size - integer - optional - default: 5 + ## The number of OIDs handled by each batch. + # + # oid_batch_size: 5 + + ## @param interface_configs - map - optional + ## This option is used to override interface inbound/outbound speed and add interface tags + ## Example: + ## interface_configs: + ## "10.0.0.1": # target device IP address + ## - match_field: "name" # (required) the field to match, can be `name` (interface name) or `index` (ifIndex) + ## match_value: "eth0" # (required) the value to match + ## in_speed: 50 # (optional) inbound speed value in bits per sec, no value or 0 means no override + ## out_speed: 25 # (optional) outbound speed value in bits per sec, no value or 0 means no override + ## tags: # (optional) interface level tags + ## - "testTagKey:testTagValue" + ## - "tagKey2:tagValue2" + # + # interface_config: + # "10.0.0.1": + # - match_field: name + # match_value: eth0 + # in_speed: 50 + # out_speed: 25 + # - match_field: index + # match_value: '10' + # in_speed: 50 + # out_speed: 25 + # "10.0.0.2": + # - match_field: name + # match_value: eth3 + # in_speed: 50 + # out_speed: 25 + # "10.0.0.3": + # - match_field: name + # match_value: eth4 + # tags: + # - "monitored:true" + # - "customKey:customValue" + + ## @param ping - custom object - optional + ## Configure ICMP pings for all hosts in SNMP autodiscovery + ## Devices will be pinged with these settings each time the SNMP + ## check is run. + ## + ## By default, Datadog tries to use an unprivileged UDP socket to send ICMP + ## pings, but some linux systems require using a raw socket. + ## + ## If `linux.use_raw_socket` is set, you must enable the `ping` module + ## of system-probe for elevated privileges. See + ## system-probe.yaml.example for details. + # + # ping: + # enabled: true # Disabled by default + # timeout: 3000 # Timeout in milliseconds + # count: 2 # Number of ping packets to send per check run + # interval: 10 # Time between sending pings (up to `count` packets) in milliseconds + # linux: # Linux-specific configuration + # use_raw_socket: true # Send pings in a privileged fashion using a raw socket. + # # This may be required if your system doesn't support + # # sending pings in an unprivileged fashion (using a UDP socket). + # # If `use_raw_socket` is set to true, you MUST also enable + # # system-probe which has elevated privileges. To enable it, see system-probe.yaml.example. + + + ## @param snmp_traps - custom object - optional + ## This section configures SNMP traps collection. + ## Traps are forwarded as logs and can be found in the logs explorer with a source:snmp-traps query + # + # snmp_traps: + + ## @param enabled - boolean - optional - default: false + ## Set to true to enable collection of traps. + # + # enabled: false + + ## @param port - integer - optional - default: 9162 + ## @env DD_SNMP_TRAPS_CONFIG_PORT - integer - optional - default: 9162 + ## The UDP port to use when listening for incoming trap packets. + ## Because the Datadog Agent does not run as root, the port cannot be below 1024. + ## However, if you run `sudo setcap 'cap_net_bind_service=+ep' /opt/datadog-agent/bin/agent/agent`, + ## the Datadog Agent can listen on ports below 1024. + # + # port: 9162 + + ## @param community_strings - list of strings - required + ## A list of known SNMP community strings that devices can use to send traps to the Agent. + ## Traps with an unknown community string are ignored. + ## Enclose the community string with single quote like below (to avoid special characters being interpreted). + ## Must be non-empty. + # + # community_strings: + # - '' + # - '' + + ## @param users - list of custom objects - optional + ## List of SNMPv3 users that can be used to listen for traps. + ## Each user can contain: + ## * user - string - The username used by devices when sending Traps to the Agent. + ## * authKey - string - (Optional) The passphrase to use with the given user and authProtocol + ## * authProtocol - string - (Optional) The authentication protocol to use when listening for traps from this user. + ## Available options are: MD5, SHA, SHA224, SHA256, SHA384, SHA512. + ## Defaults to MD5 when authKey is set. + ## * privKey - string - (Optional) The passphrase to use with the given user privacy protocol. + ## * privProtocol - string - (Optional) The privacy protocol to use when listening for traps from this user. + ## Available options are: DES, AES (128 bits), AES192, AES192C, AES256, AES256C. + ## Defaults to DES when privKey is set. + # + # users: + # - user: + # authKey: + # authProtocol: + # privKey: + # privProtocol: + + ## @param bind_host - string - optional + ## The hostname to listen on for incoming trap packets. + ## Binds to 0.0.0.0 by default (accepting all packets). + # + # bind_host: 0.0.0.0 + + ## stop_timeout - float - optional - default: 5.0 + ## The maximum number of seconds to wait for the trap server to stop when the Agent shuts down. + # + # stop_timeout: 5.0 + + ## @param netflow - custom object - optional + ## This section configures NDM NetFlow (and sFlow, IPFIX) collection. + # + # netflow: + + ## @param enabled - boolean - optional - default: false + ## Set to true to enable collection of NetFlow traffic. + # + # enabled: false + + ## @param listeners - custom object - optional + ## This section configures one or more listeners ports that will receive flow traffic. + ## Each listener have the following options: + ## * flow_type - string - The flow type correspond to the incoming flow protocol. + ## Choices are: netflow5, netflow9, ipfix, sflow5 + ## * port - string - (Optional) The port used to receive incoming flow traffic. + ## Default port differ by flow type: netflow5(2055), netflow9(2055), ipfix(4739), sflow5(6343) + ## * bind_host - string - (Optional) The hostname to listen on for incoming netflow packets. + ## Binds to 0.0.0.0 by default (accepting all packets). + ## * workers - string - (Optional) Number of workers to use for this listener. + ## Defaults to 1. + ## * mapping - (Optional) List of NetflowV9/IPFIX fields to additionally collect. + ## Defaults to None. + ## * field - integer - The Netflow field type ID to collect. + ## * destination - string - Name of the collected field, is queryable under @ in Datadog. + ## Default fields can be overridden, for example, `destination.port` overrides + ## the default destination port collected. + ## * type - string - The field type. + ## Available options are: string, integer, hex. + ## Defaults to hex. + ## * endianness - string - (Optional) If type is integer, endianness can be set using this parameter. + ## Available options are: big, little. + ## Defaults to big. + # + # listeners: + # - flow_type: netflow9 + # port: 2055 + # mapping: + # - field: 1234 + # destination: transport_rtp_ssrc + # type: integer + # - flow_type: netflow5 + # port: 2056 + # - flow_type: ipfix + # port: 4739 + # - flow_type: sflow5 + # port: 6343 + + ## stop_timeout - integer - optional - default: 5 + ## The maximum number of seconds to wait for the NetFlow listeners to stop when the Agent shuts down. + # + # stop_timeout: 5 + + ## @param reverse_dns_enrichment_enabled - boolean - optional - default: false + ## Set to true to enable reverse DNS enrichment of private source and destination IP addresses in NetFlow records. + # reverse_dns_enrichment_enabled: false + +## @param reverse_dns_enrichment - custom object - optional +## This section configures the reverse DNS enrichment component that can be used by other components in the Datadog Agent. +# reverse_dns_enrichment: + + ## @param workers - integer - optional - default: 10 + ## The number of concurrent workers used to perform reverse DNS lookups. + # workers: 10 + + ## @param chan_size - integer - optional - default: 5000 + ## The size of the channel used to send reverse DNS lookup requests to the workers. + # chan_size: 5000 + + ## @param cache - custom object - optional + ## This section configures the cache used by the reverse DNS enrichment component. + # cache: + + ## @param enabled - boolean - optional - default: true + ## Set to true to enable reverse DNS enrichment caching. + # + # enabled: true + + ## @param entry_ttl - duration - optional - default: 24h + ## The amount of time that a cache entry remains valid before it is expired and removed from the cache. + # entry_ttl: 24h + + ## @param clean_interval - duration - optional - default: 2h + ## An interval that specifies how often expired entries are removed from the cache to free space. + # clean_interval: 2h + + ## @param persist_interval - duration - optional - default: 2h + ## An interval that specifies how often the cache is persisted to disk so the cache can be reloaded when the Agent is upgraded or restarted. + # persist_interval: 2h + + ## @param max_retries - integer - optional - default: 10 + ## The maximum number of retries to perform when a DNS lookup operation fails, after which the hostname "" is returned and cached for the IP address. + # max_retries: 10 + + ## @param max_size - integer - optional - default: 1000000 + ## The maximum size in entries of the cache, above which additional entries will not be cached. + # + # max_size: 1000000 + + ## @param rate_limiter - custom object - optional + ## This section configures the rate limiter used by the reverse DNS enrichment component. + # rate_limiter: + + ## @param enabled - boolean - optional - default: true + ## Set to true to enable the reverse DNS enrichment rate limiter. + # + # enabled: true + + ## @param limit_per_sec - integer - optional - default: 1000 + ## The maximum number of reverse DNS lookups allowed per second by the rate limiter. + # limit_per_sec: 1000 + + ## @param limit_throttled_per_sec - integer - optional - default: 1 + ## The maximum number of reverse DNS lookups allowed per second when the rate limiter is throttled due to errors exceeding the threshold. + # limit_throttled_per_sec: 1 + + ## @param throttle_error_threshold - integer - optional - default: 10 + ## The number of consecutive errors that will trigger the rate limiter to throttle down to limit_throttled_per_sec. + # throttle_error_threshold: 10 + + ## @param recovery_intervals - integer - optional - default: 5 + ## The number of intervals over which to increase the rate limit back to limit_per_sec when lookups are again successful after being throttled due to errors. + # recovery_intervals: 5 + + ## @param recovery_interval - duration - optional - default: 5s + ## The interval between incrementally increasing the rate limit back to limit_per_sec when lookups are again successful after being throttled due to errors. + ## The rate limit will be increased by (limit_per_sec - limit_throttled_per_sec) / recovery_intervals every recovery_interval, until it reaches + ## limit_per_sec. For example, with limit_per_sec=1000, limit_throttled_per_sec=1, recovery_intervals=5, recovery_interval=5s, the limit will + ## be increased by 200 every 5 seconds until reaching 1000. + # recovery_interval: 5s + +{{end -}} +{{- if .OTLP }} +################################### +## OpenTelemetry Configuration ## +################################### + +## @param otlp_config - custom object - optional +## This section configures OTLP ingest in the Datadog Agent. +# +# otlp_config: + + ## @param receiver - custom object - optional + ## The receiver configuration. It follows the OpenTelemetry Collector's OTLP Receiver Configuration. + ## This template lists the most commonly used settings; see the OpenTelemetry Collector documentation + ## for a full list of available settings: + ## https://github.com/open-telemetry/opentelemetry-collector/blob/main/receiver/otlpreceiver/config.md + # + # receiver: + + ## @param protocols - custom object - optional + ## Configuration for the supported protocols. + # + # protocols: + + ## @param grpc - custom object - optional + ## Configuration for OTLP/gRPC listener. + ## Setting this as an empty section enables the OTLP/gRPC listener with default options. + # + # grpc: + + ## @param endpoint - string - optional - default: 0.0.0.0:4317 + ## @env DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT - string - optional - default: 0.0.0.0:4317 + ## The OTLP/gRPC listener endpoint. + # + # endpoint: 0.0.0.0:4317 + + ## @param transport - string - optional - default: tcp + ## @env DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_TRANSPORT - string - optional - default: tcp + ## The OTLP/gRPC listener transport protocol. + ## Known protocols are "tcp", "udp", "ip", "unix", "unixgram", and "unixpacket". + # + # transport: tcp + + ## @param max_recv_msg_size_mib - number - optional - default: 4 + ## @env DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_MAX_RECV_MSG_SIZE_MIB - number - optional - default: 4 + ## The maximum size (in MiB) of messages accepted by the OTLP/gRPC endpoint. + # + # max_recv_msg_size_mib: 4 + + ## @param http - custom object - optional + ## Configuration for OTLP/HTTP listener. + ## Setting this as an empty section enables the OTLP/HTTP listener with default options. + # + # http: + + ## @param endpoint - string - optional - default: 0.0.0.0:4318 + ## @env DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT - string - optional - default: 0.0.0.0:4318 + ## The OTLP/HTTP listener endpoint. + # + # endpoint: 0.0.0.0:4318 + + ## @param metrics - custom object - optional + ## Metrics-specific configuration for OTLP ingest in the Datadog Agent. + # + # metrics: + + ## @param enabled - boolean - optional - default: true + ## @env DD_OTLP_CONFIG_METRICS_ENABLED - boolean - optional - default: true + ## Set to false to disable metrics support in the OTLP ingest endpoint. + ## To enable the OTLP ingest, the otlp_config.receiver section must be set. + # + # enabled: true + + ## @param resource_attributes_as_tags - boolean - optional - default: false + ## @env DD_OTLP_CONFIG_METRICS_RESOURCE_ATTRIBUTES_AS_TAGS - boolean - optional - default: false + ## Set to true to add resource attributes of a metric to its metric tags. Please note that any of + ## the subset of resource attributes in this list https://docs.datadoghq.com/opentelemetry/guide/semantic_mapping/ + ## are converted to Datadog conventions and set to to metric tags whether this option is enabled or not. + # + # resource_attributes_as_tags: false + + ## Deprecated - use `instrumentation_scope_metadata_as_tags` instead in favor of + ## https://github.com/open-telemetry/opentelemetry-proto/releases/tag/v0.15.0 + ## Both must not be set at the same time. + ## @param instrumentation_library_metadata_as_tags - boolean - optional - default: false + ## @env DD_OTLP_CONFIG_METRICS_INSTRUMENTATION_LIBRARY_METADATA_AS_TAGS - boolean - optional - default: false + ## Set to true to add metadata about the instrumentation library that created a metric. + # + # instrumentation_library_metadata_as_tags: false + + ## @param instrumentation_scope_metadata_as_tags - boolean - optional - default: false + ## @env DD_OTLP_CONFIG_METRICS_INSTRUMENTATION_SCOPE_METADATA_AS_TAGS - boolean - optional - default: false + ## Set to true to add metadata about the instrumentation scope that created a metric. + # + # instrumentation_scope_metadata_as_tags: false + + ## @param tag_cardinality - string - optional - default: low + ## @env DD_OTLP_CONFIG_METRICS_TAG_CARDINALITY - string - optional - default: low + ## Configure the level of granularity of tags to send for OTLP metrics. Choices are: + ## * low: add tags about low-cardinality objects (clusters, hosts, deployments, container images, ...) + ## * orchestrator: add tags about pod, (in Kubernetes), or task (in ECS or Mesos) -level of cardinality + ## * high: add tags about high-cardinality objects (individual containers, user IDs in requests, ...) + ## WARNING: sending container tags for checks metrics may create more metrics + ## (one per container instead of one per host). This may impact your custom metrics billing. + # + # tag_cardinality: low + + ## @param delta_ttl - int - optional - default: 3600 + ## @env DD_OTLP_CONFIG_METRICS_DELTA_TTL - int - optional - default: 3600 + ## The amount of time (in seconds) that values are kept in memory for + ## calculating deltas for cumulative monotonic metrics. + # + # delta_ttl: 3600 + + ## @param histograms - custom object - optional + ## Configuration for OTLP Histograms. + ## See https://docs.datadoghq.com/metrics/otlp/?tab=histogram for details. + # + # histograms: + + ## @param mode - string - optional - default: distributions + ## @env DD_OTLP_CONFIG_METRICS_HISTOGRAMS_MODE - string - optional - default: distributions + ## How to report histograms. Valid values are: + ## + ## - `distributions` to report metrics as Datadog distributions (recommended). + ## - `nobuckets` to not report bucket metrics, + ## - `counters` to report one metric per histogram bucket. + # + # mode: distributions + + ## Deprecated - use `send_aggregation_metrics` instead. This flag will override `send_aggregation_metrics` if both are set. + ## @param send_count_sum_metrics - boolean - optional - default: false + ## @env DD_OTLP_CONFIG_METRICS_HISTOGRAMS_SEND_COUNT_SUM_METRICS - boolean - optional - default: false + ## Whether to report sum, count, min, and max as separate histogram metrics. + # + # send_count_sum_metrics: false + + ## @param send_aggregation_metrics - boolean - optional - default: false + ## @env DD_OTLP_CONFIG_METRICS_HISTOGRAMS_SEND_AGGREGATION_METRICS - boolean - optional - default: false + ## Whether to report sum, count, min, and max as separate histogram metrics. + # + # send_aggregation_metrics: false + + ## @param sums - custom object - optional + ## Configuration for OTLP Sums. + ## See https://docs.datadoghq.com/metrics/otlp/?tab=sum for details. + # + # sums: + + ## @param cumulative_monotonic_mode - string - optional - default: to_delta + ## @env DD_OTLP_CONFIG_METRICS_SUMS_CUMULATIVE_MONOTONIC_MODE - string - optional - default: to_delta + ## How to report cumulative monotonic sums. Valid values are: + ## + ## - `to_delta` to calculate delta for sum in the client side and report as Datadog counts. + ## - `raw_value` to report the raw value as a Datadog gauge. + # + # cumulative_monotonic_mode: to_delta + + ## @param initial_cumulative_monotonic_value - string - optional - default: auto + ## How to report the initial value for cumulative monotonic sums. Valid values are: + ## + ## - `auto` reports the initial value if its start timestamp is set and it happens after the process was started. + ## - `drop` always drops the initial value. + ## - `keep` always reports the initial value. + # + # initial_cumulative_monotonic_value: auto + + ## @param summaries - custom object - optional + ## Configuration for OTLP Summaries. + ## See https://docs.datadoghq.com/metrics/otlp/?tab=summary for more details. + # + # summaries: + + ## @param mode - string - optional - default: gauges + ## @env DD_OTLP_CONFIG_METRICS_SUMMARIES_MODE - string - optional - default: gauges + ## How to report summaries. Valid values are: + ## + ## - `noquantiles` to not report quantile metrics. + ## - `gauges` to report one gauge metric per quantile. + # + # mode: gauges + + ## @param traces - custom object - optional + ## Traces-specific configuration for OTLP ingest in the Datadog Agent. + # + # traces: + + ## @param enabled - boolean - optional - default: true + ## @env DD_OTLP_CONFIG_TRACES_ENABLED - boolean - optional - default: true + ## Set to false to disable traces support in the OTLP ingest endpoint. + ## To enable the OTLP ingest, the otlp_config.receiver section must be set. + # + # enabled: true + + ## @param span_name_as_resource_name - boolean - optional - default: false + ## @env DD_OTLP_CONFIG_TRACES_SPAN_NAME_AS_RESOURCE_NAME - boolean - optional - default: false + ## If set to true the OpenTelemetry span name will used in the Datadog resource name. + ## If set to false the resource name will be filled with the instrumentation library name + span kind. + # + # span_name_as_resource_name: false + + ## @param span_name_remappings - map - optional + ## @env DD_OTLP_CONFIG_TRACES_SPAN_NAME_REMAPPINGS - json - optional + ## Defines a map of span names and preferred names to map to. This can be used to automatically map Datadog Span + ## Operation Names to an updated value. + ## span_name_remappings: + ## "io.opentelemetry.javaagent.spring.client": "spring.client" + ## "instrumentation:express.server": "express" + ## "go.opentelemetry.io_contrib_instrumentation_net_http_otelhttp.client": "http.client" + # + # span_name_remappings: + # : + + ## @param probabilistic_sampler - custom object - optional + ## Probabilistic sampler controlling the rate of ingestion. Using this sampler works consistently + ## in a distributed system where the sampling rate is shared. Exceptions are made for errors and + ## rare traces (if enabled via apm_config.enable_rare_sampler). + # + # probabilistic_sampler: + ## @param sampling_percentage - number - optional - default: 100 + ## @env DD_OTLP_CONFIG_TRACES_PROBABILISTIC_SAMPLER_SAMPLING_PERCENTAGE - number - optional - default: 100 + ## Percentage of traces to ingest (0 100]. Invalid values (<= 0 || > 100) are disconsidered and the default is used. + ## If incoming spans have a sampling.priority set by the user, it will be followed and the sampling percentage will + ## be overridden. + # + # sampling_percentage: 100 + + ## @param logs - custom object - optional + ## Logs-specific configuration for OTLP ingest in the Datadog Agent. + # + # logs: + + ## @param enabled - boolean - optional - default: false + ## @env DD_OTLP_CONFIG_LOGS_ENABLED - boolean - optional - default: false + ## Set to true to enable logs support in the OTLP ingest endpoint. + ## To enable the OTLP ingest, the otlp_config.receiver section must be set. + # + # enabled: true + +## @param debug - custom object - optional + ## Debug-specific configuration for OTLP ingest in the Datadog Agent. + ## This template lists the most commonly used settings; see the OpenTelemetry Collector documentation + ## for a full list of available settings: + ## https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/debugexporter#getting-started + # + # debug: + ## @param verbosity - string - optional - default: normal + ## @env DD_OTLP_CONFIG_DEBUG_VERBOSITY - string - optional - default: normal + ## Verbosity of debug logs when Datadog Agent receives otlp traces/metrics. + ## Valid values are basic, normal, detailed, none. + # + # verbosity: normal +{{- if (eq .OS "windows")}} +##################################################### +## Datadog Agent Manager System Tray Configuration ## +##################################################### + +## @param system_tray - custom object - optional +## This section configures the Datadog Agent Manager System Tray +# +# system_tray: + ## @param log_file - string - optional - default: %ProgramData%\Datadog\logs\ddtray.log + ## @env DD_TRAY_LOG_FILE - string - optional + ## The full path to the file where Datadog Agent Manager System Tray logs are written. + # + # log_file: +{{end -}} +{{end -}} + + +{{- if .APMInjection -}} +############################################## +## Datadog APM Auto-injection Configuration ## +############################################## + +## @param injection_controller_config - custom object +## This section configures the Datadog APM Auto Injection controller. +## Uncomment this parameter and the one below to enable them. +# +# injection_controller_config: + + ## @param enabled - boolean - optional - default: false + ## Set to true to enable the APM Auto-injection. + ## Please note that enabling this service will result in a kernel driver being loaded. + # + # enabled: false + + ## @param log_file - string - optional - default: c:\programdata\datadog\logs\apm-inject.log + ## The full path to the file where injection controller logs are written. + # + # log_file: c:\programdata\datadog\logs\apm-inject.log + + ## @param log_level - string - optional - default: info + ## Minimum log level of the injection controller. + ## Valid log levels are: debug, info, warn, and error. + # + # log_level: 'info' + + ## @param log_to_console - boolean - optional - default: true + ## Set to 'false' to disable injection controller logging to stdout. + # + # log_to_console: true + + ## @param socket_port - integer - optional - default: 3030 + ## The port used for the injection controller communications API (served on localhost). + # + # socket_port: 3030 + + # internal_profiling: + # + ## @param enabled - boolean - optional - default: false + ## Enable internal profiling for the injection controller process. + # + # enabled: false + +## @param service_configs - list of custom objects +## This section configures the services which will be automatically injected with APM +## configurations, as well as the APM configurations which will be injected. +# +# service_configs: + + ## @param service configuration - custom object + ## In order to configure APM auto-injection for a service or set of services, an injection condition + ## and APM configuration must be provided. + ## + ## Example: + ## - conditions: + ## command_line_regex: executable_name.exe + ## configuration: + ## service_language: dotnet + ## dd_env: staging + ## dd_service: exampleService + ## dd_version: 1.2.3 + ## + ## To learn about all the available service matching conditions & configuration options, visit + ## https://docs.datadoghq.com/tracing/trace_collection/library_injection_local + +{{end}} \ No newline at end of file diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index 37ad3669869..c55582db437 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -1,11 +1,164 @@ #!/bin/sh -export DD_HOSTNAME=$(hostname) +DD_CONF_DIR="/etc/datadog-agent" -if [ "$APP_ENV" = "production" ]; then - datadog-agent run & - /opt/datadog-agent/embedded/bin/trace-agent --config=/etc/datadog-agent/datadog.yaml & - /opt/datadog-agent/embedded/bin/process-agent --config=/etc/datadog-agent/datadog.yaml & +# START OF CODE EXTRACTED FROM https://github.com/DataDog/heroku-buildpack-datadog/blob/master/extra/datadog.sh +# This code was extracted in order to maintain functionality when switching from +# Heroku Slugs to Docker container deployments. +export DATADOG_CONF="$DD_CONF_DIR/datadog.yaml" +export INTEGRATIONS_CONF="$DD_CONF_DIR/conf.d" +export POSTGRES_CONF="$INTEGRATIONS_CONF/postgres.d" +export REDIS_CONF="$INTEGRATIONS_CONF/redisdb.d" + +# Get the lower case for the log level +DD_LOG_LEVEL_LOWER=$(echo "$DD_LOG_LEVEL" | tr '[:upper:]' '[:lower:]') + +# Update the Datadog conf yaml to disable cloud provider metadata +sed -i -e"s|^.*cloud_provider_metadata:.*$|cloud_provider_metadata: []|" "$DATADOG_CONF" + +DYNOHOST="$(hostname )" +DYNOTYPE=${DYNO%%.*} +DYNO_TAGS="dyno:$DYNO dynotype:$DYNOTYPE" + +export DD_HOST_ALIASES="$DYNOHOST" + +if [ -n "$HEROKU_APP_NAME" ]; then + DYNO_TAGS="$DYNO_TAGS appname:$HEROKU_APP_NAME" +fi + +if [ -z "$DD_API_KEY" ]; then + echo "DD_API_KEY environment variable not set. Run: heroku config:add DD_API_KEY=" + DISABLE_DATADOG_AGENT=1 +fi + +if [ -z "$DD_HOSTNAME" ]; then + if [ "$DD_DYNO_HOST" == "true" ]; then + # Set the hostname to dyno name and ensure rfc1123 compliance. + HAN="$(echo "$HEROKU_APP_NAME" | sed -e 's/[^a-zA-Z0-9-]/-/g' -e 's/^-//g')" + if [ "$HAN" != "$HEROKU_APP_NAME" ]; then + if [ "$DD_LOG_LEVEL_LOWER" == "debug" ]; then + echo "WARNING: The appname \"$HEROKU_APP_NAME\" contains invalid characters. Using \"$HAN\" instead." + fi + fi + + D="$(echo "$DYNO" | sed -e 's/[^a-zA-Z0-9.-]/-/g' -e 's/^-//g')" + export DD_HOSTNAME="$HAN.$D" + else + # Set the hostname to the dyno host + DD_HOSTNAME="$(echo "$DYNOHOST" | sed -e 's/[^a-zA-Z0-9-]/-/g' -e 's/^-//g')" + export DD_HOSTNAME + fi +else + # Generate a warning about DD_HOSTNAME deprecation. + if [ "$DD_LOG_LEVEL_LOWER" == "debug" ]; then + echo "WARNING: DD_HOSTNAME has been set. Setting this environment variable may result in metrics errors. To remove it, run: heroku config:unset DD_HOSTNAME" + fi +fi + +# TODO: does this apply in Docker containers? +# Disable core checks (these read the host, not the dyno). +#if [ "$DD_DISABLE_HOST_METRICS" == "true" ]; then +# find "$DD_CONF_DIR"/conf.d -name "conf.yaml.default" -exec mv {} {}_disabled \; +#fi + +# Update the Postgres configuration from above using the Heroku application environment variable +if [ "$DD_ENABLE_HEROKU_POSTGRES" == "true" ]; then + # The default connection URL is set in DATABASE_URL, but can be configured by the user + if [[ -z ${DD_POSTGRES_URL_VAR} ]]; then + DD_POSTGRES_URL_VAR="DATABASE_URL" + fi + + # Use a comma separator instead of new line + IFS="," + + touch "$POSTGRES_CONF/conf.yaml" + echo -e "init_config: \ninstances: \n" > "$POSTGRES_CONF/conf.yaml" + + for PG_URL in $DD_POSTGRES_URL_VAR + do + if [ -n "${!PG_URL}" ]; then + POSTGREGEX='^postgres://([^:]+):([^@]+)@([^:]+):([^/]+)/(.*)$' + if [[ ${!PG_URL} =~ $POSTGREGEX ]]; then + echo -e " - host: ${BASH_REMATCH[3]}" >> "$POSTGRES_CONF/conf.yaml" + echo -e " username: ${BASH_REMATCH[1]}" >> "$POSTGRES_CONF/conf.yaml" + echo -e " password: ${BASH_REMATCH[2]}" >> "$POSTGRES_CONF/conf.yaml" + echo -e " port: ${BASH_REMATCH[4]}" >> "$POSTGRES_CONF/conf.yaml" + echo -e " dbname: ${BASH_REMATCH[5]}" >> "$POSTGRES_CONF/conf.yaml" + echo -e " ssl: require" >> "$POSTGRES_CONF/conf.yaml" + echo -e " disable_generic_tags: false" >> "$POSTGRES_CONF/conf.yaml" + if [ "$DD_ENABLE_DBM" == "true" ]; then + echo -e " dbm: true" >> "$POSTGRES_CONF/conf.yaml" + fi + fi + fi + done + unset IFS +fi + +# Update the Redis configuration from above using the Heroku application environment variable +if [ "$DD_ENABLE_HEROKU_REDIS" == "true" ]; then + + # The default connection URL is set in REDIS_URL, but can be configured by the user + if [[ -z ${DD_REDIS_URL_VAR} ]]; then + DD_REDIS_URL_VAR="REDIS_URL" + fi + + # Use a comma separator instead of new line + IFS="," + + touch "$REDIS_CONF/conf.yaml" + echo -e "init_config: \ninstances: \n" > "$REDIS_CONF/conf.yaml" + + for RD_URL in $DD_REDIS_URL_VAR + do + if [ -n "${!RD_URL}" ]; then + REDISREGEX='^redis(s?)://([^:]*):([^@]+)@([^:]+):([^/]+)/?(.*)$' + if [[ ${!RD_URL} =~ $REDISREGEX ]]; then + echo -e " - host: ${BASH_REMATCH[4]}" >> "$REDIS_CONF/conf.yaml" + echo -e " password: ${BASH_REMATCH[3]}" >> "$REDIS_CONF/conf.yaml" + echo -e " port: ${BASH_REMATCH[5]}" >> "$REDIS_CONF/conf.yaml" + if [[ ! -z ${BASH_REMATCH[1]} ]]; then + echo -e " ssl: true" >> "$REDIS_CONF/conf.yaml" + echo -e " ssl_cert_reqs: 0" >> "$REDIS_CONF/conf.yaml" + fi + if [[ ! -z ${BASH_REMATCH[2]} ]]; then + echo -e " username: ${BASH_REMATCH[2]}" >> "$REDIS_CONF/conf.yaml" + fi + if [[ ! -z ${BASH_REMATCH[6]} ]]; then + echo -e " db: ${BASH_REMATCH[6]}" >> "$REDIS_CONF/conf.yaml" + fi + fi + fi + done + unset IFS +fi + +# Convert comma delimited tags from env vars to yaml +if [ -n "$DD_TAGS" ]; then + DD_TAGS_NORMALIZED="$(sed "s/,[ ]\?/\ /g" <<< "$DD_TAGS")" + DD_TAGS="$DYNO_TAGS $DD_TAGS_NORMALIZED" +else + DD_TAGS="$DYNO_TAGS" +fi + +export DD_VERSION="$DD_VERSION" +export DD_TAGS="$DD_TAGS" +if [ "$DD_LOG_LEVEL_LOWER" == "debug" ]; then + echo "[DEBUG] normalized tags: $DD_TAGS" +fi + +export DD_HEROKU_DYNO="true" + +# END OF EXTRACTED CODE + +if [ -n "$DISABLE_DATADOG_AGENT" ]; then + echo "The Datadog Agent has been disabled. Unset the DISABLE_DATADOG_AGENT or set missing environment variables." +else + if [ "$APP_ENV" = "production" ]; then + datadog-agent run & + /opt/datadog-agent/embedded/bin/trace-agent --config=/etc/datadog-agent/datadog.yaml & + /opt/datadog-agent/embedded/bin/process-agent --config=/etc/datadog-agent/datadog.yaml & + fi fi # Check if a command is provided From 6b63749872283f314b7287986aa7d073572fced3 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Thu, 17 Oct 2024 02:53:27 +0300 Subject: [PATCH 199/425] switch from default sh to bash --- scripts/datadog-entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index c55582db437..849e8d8957e 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash DD_CONF_DIR="/etc/datadog-agent" From a676ec1755abf799f630b7d72286e937873d6173 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 16:54:57 -0700 Subject: [PATCH 200/425] Fixed background colors... --- .../toolbars/CWHeadingButton.scss | 3 +++ .../toolbars/CWHeadingButton.tsx | 20 +++++++++++++++++-- .../toolbars/ToolbarForDesktop.tsx | 3 +++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.scss index a8fd63641e0..3b238456b31 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.scss @@ -1,3 +1,6 @@ +@import '../../../../../styles/shared'; + .CWHeadingButtonActive { font-weight: bold; + background-color: $neutral-100; } diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx index 82fca7fd75f..05650feea15 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx @@ -1,5 +1,6 @@ import { $createHeadingNode, $createQuoteNode } from '@lexical/rich-text'; import { + applyFormat$, convertSelectionToNode$, currentBlockType$, useCellValue, @@ -9,9 +10,18 @@ import { $createParagraphNode } from 'lexical'; import React, { useCallback } from 'react'; import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; +import './CWHeadingButton.scss'; export type HeadingButtonProps = Readonly<{ - blockType: 'h1' | 'h2' | 'h3' | 'quote' | 'p'; + blockType: + | 'h1' + | 'h2' + | 'h3' + | 'quote' + | 'p' + | 'bold' + | 'underline' + | 'italic'; onClick?: (event: React.MouseEvent) => void; }>; @@ -20,6 +30,7 @@ export const CWHeadingButton = (props: HeadingButtonProps) => { const currentBlockType = useCellValue(currentBlockType$); const convertSelectionToNode = usePublisher(convertSelectionToNode$); + const applyFormat = usePublisher(applyFormat$); const active = currentBlockType === blockType; @@ -35,6 +46,11 @@ export const CWHeadingButton = (props: HeadingButtonProps) => { case 'quote': convertSelectionToNode(() => $createQuoteNode()); break; + case 'bold': + case 'underline': + case 'italic': + applyFormat(blockType); + break; } } else { convertSelectionToNode(() => $createParagraphNode()); @@ -42,7 +58,7 @@ export const CWHeadingButton = (props: HeadingButtonProps) => { onClick?.(event); }, - [active, blockType, convertSelectionToNode, onClick], + [active, applyFormat, blockType, convertSelectionToNode, onClick], ); // TODO: there's a bug in handleInteraction here where it's not going away diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index e49446f152e..737e2e7b0d7 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -44,6 +44,9 @@ export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => {
      + + + From 6c862bc9dc5571928fc6f2d500e6a1ed1c4c0f94 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 16:59:45 -0700 Subject: [PATCH 201/425] push this to the mobile toolbar now. --- .../toolbars/BlockSelectorButton.scss | 12 ++++++++++++ .../toolbars/ToolbarForDesktop.tsx | 4 ---- .../toolbars/ToolbarForMobile.tsx | 19 +++---------------- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss index 579e776f189..6ad6db7edbc 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss @@ -5,3 +5,15 @@ cursor: pointer; } } + +.FormattingPopover { + padding: 4px; + + margin-bottom: 8px; + margin-top: 8px; + + button { + outline: none; + border: none; + } +} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index 737e2e7b0d7..a75b1861242 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -1,5 +1,4 @@ import { - BoldItalicUnderlineToggles, ChangeCodeMirrorLanguage, ConditionalContents, CreateLink, @@ -12,7 +11,6 @@ import { import React from 'react'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; -import { NewDesktopToolbar } from 'views/components/MarkdownEditor/toolbars/NewDesktopToolbar'; import { QuoteButton } from 'views/components/MarkdownEditor/toolbars/QuoteButton'; import './ToolbarForDesktop.scss'; @@ -26,7 +24,6 @@ export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => { return ( <> -
      { - diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index 6af559250d8..935950a861c 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -1,5 +1,4 @@ import { - BlockTypeSelect, BoldItalicUnderlineToggles, CreateLink, ListsToggle, @@ -7,6 +6,7 @@ import { } from 'commonwealth-mdxeditor'; import React, { ReactNode, useCallback, useEffect } from 'react'; +import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/BlockSelectorButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; import CWPopover, { usePopover, @@ -91,21 +91,8 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { onPointerDown={preventKeyboardDeactivation} onMouseDownCapture={preventKeyboardDeactivation} > - {/**/} - -
      console.log('click')} - > - +
      +
      From 6fedf436534cfcee96573df7adebcff490defb67 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 17:05:10 -0700 Subject: [PATCH 202/425] cleanup... --- .../toolbars/ToolbarForMobile.tsx | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index 935950a861c..223ef876132 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -54,10 +54,7 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { (event: React.MouseEvent) => { event.stopPropagation(); - console.log('FIXME 101: preventKeyboardDeactivation'); - if (focus) { - console.log('FIXME: calling focus'); focus?.(); } else { console.warn('No focus'); @@ -65,28 +62,10 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { }, [focus], ); - // - // const handleKeyboardFocusForBody = useCallback(() => { - // console.log('FIXME102: handleKeyboardFocusForBody'); - // - // setTimeout(() => { - // console.log('FIXME103: handleKeyboardFocusForBody'); - // }, 0); - // - // }, []); - // - // useEffect(() => { - // window.addEventListener('mousedown', handleKeyboardFocusForBody, {capture: true}); - // - // return () => { - // window.removeEventListener('mousedown', handleKeyboardFocusForBody, {capture: true}); - // }; - // }, [handleKeyboardFocusForBody]); return (
      {
      - - From de3d04d3681cc6bc38f1922c81d5b60a150bdacf Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 17:16:44 -0700 Subject: [PATCH 203/425] more mobile toolbar cleanup. --- .../toolbars/ToolbarForMobile.tsx | 27 ++++--------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index 223ef876132..ffdf08ce95d 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -1,16 +1,9 @@ -import { - BoldItalicUnderlineToggles, - CreateLink, - ListsToggle, - Separator, -} from 'commonwealth-mdxeditor'; +import { CreateLink, ListsToggle, Separator } from 'commonwealth-mdxeditor'; import React, { ReactNode, useCallback, useEffect } from 'react'; import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/BlockSelectorButton'; +import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; -import CWPopover, { - usePopover, -} from 'views/components/component_kit/new_designs/CWPopover'; import './ToolbarForMobile.scss'; type ToolbarForMobileProps = Readonly<{ @@ -23,8 +16,6 @@ type ToolbarForMobileProps = Readonly<{ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { const { SubmitButton, focus, onImage } = props; - const headingsPopoverProps = usePopover(); - const adjustForKeyboard = useCallback(() => { if (!window.visualViewport) { return; @@ -74,17 +65,9 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => {
      - - -
      - } - {...headingsPopoverProps} - /> - - {/**/} - + + + From 89a771d1208efd7fd72d205b7a864d181cb9112f Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Thu, 17 Oct 2024 03:18:29 +0300 Subject: [PATCH 204/425] echo relevant DD env var --- scripts/datadog-entrypoint.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index 849e8d8957e..8c38de31217 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -55,6 +55,10 @@ else fi fi +if [ "$DD_LOG_LEVEL_LOWER" == "debug" ]; then + echo "[DEBUG] DD_HOSTNAME: $DD_HOSTNAME" +fi + # TODO: does this apply in Docker containers? # Disable core checks (these read the host, not the dyno). #if [ "$DD_DISABLE_HOST_METRICS" == "true" ]; then @@ -62,6 +66,9 @@ fi #fi # Update the Postgres configuration from above using the Heroku application environment variable +if [ "$DD_LOG_LEVEL_LOWER" == "debug" ]; then + echo "[DEBUG] DD_ENABLE_HEROKU_POSTGRES: $DD_ENABLE_HEROKU_POSTGRES" +fi if [ "$DD_ENABLE_HEROKU_POSTGRES" == "true" ]; then # The default connection URL is set in DATABASE_URL, but can be configured by the user if [[ -z ${DD_POSTGRES_URL_VAR} ]]; then @@ -96,6 +103,9 @@ if [ "$DD_ENABLE_HEROKU_POSTGRES" == "true" ]; then fi # Update the Redis configuration from above using the Heroku application environment variable +if [ "$DD_LOG_LEVEL_LOWER" == "debug" ]; then + echo "[DEBUG] DD_ENABLE_HEROKU_REDIS: $DD_ENABLE_HEROKU_REDIS" +fi if [ "$DD_ENABLE_HEROKU_REDIS" == "true" ]; then # The default connection URL is set in REDIS_URL, but can be configured by the user From b53c8f8ade773868b2a239184fdf5c37c0f74321 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Thu, 17 Oct 2024 03:32:55 +0300 Subject: [PATCH 205/425] more env var echo --- scripts/datadog-entrypoint.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index 8c38de31217..31d3a6e2d6f 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -57,6 +57,9 @@ fi if [ "$DD_LOG_LEVEL_LOWER" == "debug" ]; then echo "[DEBUG] DD_HOSTNAME: $DD_HOSTNAME" + echo "[DEBUG] DATADOG_CONF: $DATADOG_CONF" + echo "[DEBUG] POSTGRES_CONF: $POSTGRES_CONF" + echo "[DEBUG] REDIS_CONF: REDIS_CONF" fi # TODO: does this apply in Docker containers? From 0fdb857623f8ac64692a7f15258dff3bccb377a4 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Thu, 17 Oct 2024 03:52:12 +0300 Subject: [PATCH 206/425] enable datadog agent env var + more logs --- scripts/datadog-entrypoint.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index 31d3a6e2d6f..90756ee63b6 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -84,6 +84,7 @@ if [ "$DD_ENABLE_HEROKU_POSTGRES" == "true" ]; then touch "$POSTGRES_CONF/conf.yaml" echo -e "init_config: \ninstances: \n" > "$POSTGRES_CONF/conf.yaml" + echo "[DEBUG] Creating Datadog Postgres integration config..." for PG_URL in $DD_POSTGRES_URL_VAR do if [ -n "${!PG_URL}" ]; then @@ -167,7 +168,7 @@ export DD_HEROKU_DYNO="true" if [ -n "$DISABLE_DATADOG_AGENT" ]; then echo "The Datadog Agent has been disabled. Unset the DISABLE_DATADOG_AGENT or set missing environment variables." else - if [ "$APP_ENV" = "production" ]; then + if [ "$APP_ENV" = "production" ] || [ "$ENABLE_DATADOG_AGENT" = "true" ]; then datadog-agent run & /opt/datadog-agent/embedded/bin/trace-agent --config=/etc/datadog-agent/datadog.yaml & /opt/datadog-agent/embedded/bin/process-agent --config=/etc/datadog-agent/datadog.yaml & From 8814ffba2643c73fb9686ca42bf9a9fc054692d6 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Wed, 16 Oct 2024 18:30:34 -0700 Subject: [PATCH 207/425] reworked the strikethrough and subscript buttons. --- .../toolbars/CWFormatButton.tsx | 55 +++++++++++++++++++ .../toolbars/CWHeadingButton.tsx | 15 +---- .../toolbars/NewDesktopToolbar.tsx | 2 +- .../MarkdownEditor/toolbars/NewToolbar.scss | 1 + .../toolbars/ToolbarForDesktop.tsx | 32 +++++++++-- .../toolbars/formatToIconName.tsx | 32 +++++++++++ 6 files changed, 117 insertions(+), 20 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWFormatButton.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/formatToIconName.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWFormatButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWFormatButton.tsx new file mode 100644 index 00000000000..0a1b38d6e87 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWFormatButton.tsx @@ -0,0 +1,55 @@ +import { + applyFormat$, + currentFormat$, + FORMAT, + iconComponentFor$, + useCellValues, + usePublisher, +} from 'commonwealth-mdxeditor'; +import { TextFormatType } from 'lexical'; +import React, { useCallback } from 'react'; +import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; +import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; +import { formatToIconName } from 'views/components/MarkdownEditor/toolbars/formatToIconName'; +import './CWHeadingButton.scss'; + +export type HeadingButtonProps = Readonly<{ + format: FORMAT; + formatName: TextFormatType; + + onClick?: (event: React.MouseEvent) => void; +}>; + +export const CWFormatButton = (props: HeadingButtonProps) => { + const { format, onClick, formatName } = props; + + const applyFormat = usePublisher(applyFormat$); + const [currentFormat] = useCellValues(currentFormat$, iconComponentFor$); + + const active = (currentFormat & format) !== 0; + + const toggleFormat = useCallback( + (event: React.MouseEvent) => { + applyFormat(formatName); + + onClick?.(event); + }, + [applyFormat, formatName, onClick], + ); + + return ( + ( + + )} + /> + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx index 05650feea15..eae1a67c174 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx @@ -13,15 +13,7 @@ import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip' import './CWHeadingButton.scss'; export type HeadingButtonProps = Readonly<{ - blockType: - | 'h1' - | 'h2' - | 'h3' - | 'quote' - | 'p' - | 'bold' - | 'underline' - | 'italic'; + blockType: 'h1' | 'h2' | 'h3' | 'quote' | 'p'; onClick?: (event: React.MouseEvent) => void; }>; @@ -46,11 +38,6 @@ export const CWHeadingButton = (props: HeadingButtonProps) => { case 'quote': convertSelectionToNode(() => $createQuoteNode()); break; - case 'bold': - case 'underline': - case 'italic': - applyFormat(blockType); - break; } } else { convertSelectionToNode(() => $createParagraphNode()); diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx index c804ccdd3d2..b5f73106e41 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx @@ -5,7 +5,7 @@ import './NewToolbar.scss'; type NewDesktopToolbarProps = Readonly<{ focus: () => void; }>; - +//FIXME remove export const NewDesktopToolbar = (props: NewDesktopToolbarProps) => { const { focus } = props; return ( diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss index 576e072f920..ae4e53b3e86 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss @@ -1,6 +1,7 @@ .NewToolbar { } +// FIXME: remove .FormattingPopover { padding: 4px; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index a75b1861242..3f06e54ff62 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -4,11 +4,17 @@ import { CreateLink, InsertCodeBlock, InsertTable, + IS_BOLD, + IS_ITALIC, + IS_STRIKETHROUGH, + IS_SUBSCRIPT, + IS_SUPERSCRIPT, + IS_UNDERLINE, ListsToggle, Separator, - StrikeThroughSupSubToggles, } from 'commonwealth-mdxeditor'; import React from 'react'; +import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; import { QuoteButton } from 'views/components/MarkdownEditor/toolbars/QuoteButton'; @@ -41,12 +47,28 @@ export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => {
      - - - + + + - + + + + + diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/formatToIconName.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/formatToIconName.tsx new file mode 100644 index 00000000000..b7793cde924 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/formatToIconName.tsx @@ -0,0 +1,32 @@ +import { + FORMAT, + IS_BOLD, + IS_CODE, + IS_ITALIC, + IS_STRIKETHROUGH, + IS_SUBSCRIPT, + IS_SUPERSCRIPT, + IS_UNDERLINE, +} from 'commonwealth-mdxeditor'; +import { IconName } from 'views/components/component_kit/cw_icons/cw_icon_lookup'; + +export function formatToIconName(format: FORMAT): IconName { + switch (format) { + case IS_BOLD: + return 'bold'; + case IS_ITALIC: + return 'italic'; + case IS_STRIKETHROUGH: + return 'strikethrough'; + case IS_UNDERLINE: + return 'underline'; + case IS_CODE: + return 'code'; + case IS_SUBSCRIPT: + return 'subscript'; + case IS_SUPERSCRIPT: + return 'superscript'; + default: + throw new Error('not supported'); + } +} From 54d702bb9433a9b8ea8f5884f79c47d0da28994f Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Thu, 17 Oct 2024 05:14:48 +0300 Subject: [PATCH 208/425] remove hardcoded datadog.yaml + remove created run dir + update entrypoint script --- Dockerfile.datadog | 2 - datadog-config/datadog.yaml | 4553 --------------------------------- scripts/datadog-entrypoint.sh | 13 +- 3 files changed, 9 insertions(+), 4559 deletions(-) delete mode 100644 datadog-config/datadog.yaml diff --git a/Dockerfile.datadog b/Dockerfile.datadog index 186bd2d097d..9a50dc2ba87 100644 --- a/Dockerfile.datadog +++ b/Dockerfile.datadog @@ -25,7 +25,5 @@ RUN apt-get update && apt-get -y install --reinstall datadog-agent # Expose DogStatsD and trace-agent ports EXPOSE 8125/udp 8126/tcp -RUN mkdir -p /var/run/datadog - # output dir MUST match directory set to DD_CONF_DIR in datadog-entrypoint.sh COPY datadog-config/ /etc/datadog-agent/ \ No newline at end of file diff --git a/datadog-config/datadog.yaml b/datadog-config/datadog.yaml deleted file mode 100644 index af5c31ab8c1..00000000000 --- a/datadog-config/datadog.yaml +++ /dev/null @@ -1,4553 +0,0 @@ -{{ if .Common }} -######################### -## Basic Configuration ## -######################### - -## @param api_key - string - required -## @env DD_API_KEY - string - required -## The Datadog API key used by your Agent to submit metrics and events to Datadog. -## Create a new API key here: https://app.datadoghq.com/organization-settings/api-keys . -## Read more about API keys here: https://docs.datadoghq.com/account_management/api-app-keys/#api-keys . -#api_key: - -## @param app_key - string - optional -## The application key used to access Datadog's programatic API. -## Create a new application key here: https://app.datadoghq.com/organization-settings/application-keys . -## Read more about application keys here: https://docs.datadoghq.com/account_management/api-app-keys/#application-keys . -# -# app_key: - -## @param site - string - optional - default: datadoghq.com -## @env DD_SITE - string - optional - default: datadoghq.com -## The site of the Datadog intake to send Agent data to. -## Set to 'datadoghq.eu' to send data to the EU site. -## Set to 'us3.datadoghq.com' to send data to the US3 site. -## Set to 'us5.datadoghq.com' to send data to the US5 site. -## Set to 'ap1.datadoghq.com' to send data to the AP1 site. -## Set to 'ddog-gov.com' to send data to the US1-FED site. -# -# site: datadoghq.com - -## @param dd_url - string - optional - default: https://app.datadoghq.com -## @env DD_DD_URL - string - optional - default: https://app.datadoghq.com -## @env DD_URL - string - optional - default: https://app.datadoghq.com -## The host of the Datadog intake server to send metrics to, only set this option -## if you need the Agent to send metrics to a custom URL, it overrides the site -## setting defined in "site". It does not affect APM, Logs or Live Process intake which have their -## own "*_dd_url" settings. -## If DD_DD_URL and DD_URL are both set, DD_DD_URL is used in priority. -# -# dd_url: https://app.datadoghq.com - -## @param proxy - custom object - optional -## @env DD_PROXY_HTTP - string - optional -## @env DD_PROXY_HTTPS - string - optional -## @env DD_PROXY_NO_PROXY - space separated list of strings - optional -## If you need a proxy to connect to the Internet, provide it here (default: -## disabled). Refer to https://docs.datadoghq.com/agent/proxy/ to understand how to use these settings. -## For Logs proxy information, refer to https://docs.datadoghq.com/agent/proxy/#proxy-for-logs -# -# proxy: -# https: http://:@: -# http: http://:@: -# no_proxy: -# - -# - - -## @param skip_ssl_validation - boolean - optional - default: false -## @env DD_SKIP_SSL_VALIDATION - boolean - optional - default: false -## Setting this option to "true" tells the Agent to skip validation of SSL/TLS certificates. -# -# skip_ssl_validation: false - -## @param sslkeylogfile - string - optional - default: "" -## @env DD_SSLKEYLOGFILE - string - optional - default: "" -## sslkeylogfile specifies a destination for TLS master secrets -## in NSS key log format to allow external programs -## such as Wireshark to decrypt TLS connections. -## For more details, see https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format. -## Use of sslkeylogfile compromises security and should only be -## used for debugging. -# sslkeylogfile: "" - - -## @param min_tls_version - string - optional - default: "tlsv1.2" -## @env DD_MIN_TLS_VERSION - string - optional - default: "tlsv1.2" -## This option defines the minimum TLS version that will be used when -## submitting data to the Datadog intake specified in "site" or "dd_url". -## This parameter defaults to "tlsv1.2". -## Possible values are: tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3; values are case- -## insensitive. -# -# min_tls_version: "tlsv1.2" - -## @param hostname - string - optional - default: auto-detected -## @env DD_HOSTNAME - string - optional - default: auto-detected -## Force the hostname name. -# -# hostname: - -## @param hostname_file - string - optional -## @env DD_HOSTNAME_FILE - string - optional -## In some environments, auto-detection of the hostname is not adequate and -## environment variables cannot be used to set the value. In such cases, the -## file on the host can also be used provide an appropriate value. If -## 'hostname' value has been set to a non-empty value, this option is ignored. -# -# hostname_file: /var/lib/cloud/data/instance-id - -## @param hostname_fqdn - boolean - optional - default: false -## @env DD_HOSTNAME_FQDN - boolean - optional - default: false -## When the Agent relies on the OS to determine the hostname, make it use the -## FQDN instead of the short hostname. Recommended value: true -## More information at https://dtdg.co/flag-hostname-fqdn -# -# hostname_fqdn: false - -## @param hostname_trust_uts_namespace - boolean - optional - default: false -## @env DD_HOSTNAME_TRUST_UTS_NAMESPACE - boolean - optional - default: false -## By default the Agent does not trust the hostname value retrieved from non-root UTS namespace, -## as it's usually a generated name, unrelated to the host (e.g. when running in a container). -## When enabled, the Agent will trust the value retrieved from non-root UTS namespace instead of failing -## hostname resolution. -## (Linux only) -# -# hostname_trust_uts_namespace: false - -## @param host_aliases - list of strings - optional -## @env DD_HOST_ALIASES - space separated list of strings - optional -## List of host aliases to report in addition to any aliases collected -## automatically from cloud providers. -## More information at -## https://docs.datadoghq.com/agent/faq/how-datadog-agent-determines-the-hostname/?tab=agentv6v7#host-aliases -# -# host_aliases: -# - -# - - -## @param tags - list of key:value elements - optional -## @env DD_TAGS - space separated list of strings - optional -## List of host tags. Attached in-app to every metric, event, log, trace, and service check emitted by this Agent. -## -## This configuration value merges with `DD_EXTRA_TAGS`, allowing some -## tags to be set in a configuration file (`tags`), and additional tags to be added -## with an environment variable (`DD_EXTRA_TAGS`). -## -## Learn more about tagging: https://docs.datadoghq.com/tagging/ -# -# tags: -# - team:infra -# - : - -## @param extra_tags - list of key:value elements - optional -## @env DD_EXTRA_TAGS - space separated list of strings - optional -## List of host tags. Attached in-app to every metric, event, log, trace, and service check emitted by this Agent. -## -## This configuration value merges with `tags`, allowing some -## tags to be set in a configuration file (`tags`), and additional tags to be added -## with an environment variable (`DD_EXTRA_TAGS`). -## -## Learn more about tagging: https://docs.datadoghq.com/tagging/ -# -# extra_tags: -# - region:northerly -# - : - -## @param env - string - optional -## @env DD_ENV - string - optional -## The environment name where the agent is running. Attached in-app to every -## metric, event, log, trace, and service check emitted by this Agent. -# -# env: - -## @param tag_value_split_separator - map - optional -## @env DD_TAG_VALUE_SPLIT_SEPARATOR - list of key:value strings - optional -## Split tag values according to a given separator. Only applies to host tags, -## and tags coming from container integrations. It does not apply to tags on dogstatsd metrics, -## and tags collected by other integrations. -## -## Example use-case: -## -## With a raw collected tag "foo:1;2;3", using the following configuration: -## -## tag_value_split_separator: -## foo: ; -## -## results in the raw tag being transformed into "foo:1", "foo:2", "foo:3" tags -# -# tag_value_split_separator: -# : - -## @param checks_tag_cardinality - string - optional - default: low -## @env DD_CHECKS_TAG_CARDINALITY - string - optional - default: low -## Configure the level of granularity of tags to send for checks metrics and events. Choices are: -## * low: add tags about low-cardinality objects (clusters, hosts, deployments, container images, ...) -## * orchestrator: add tags about pod, (in Kubernetes), or task (in ECS or Mesos) -level of cardinality -## * high: add tags about high-cardinality objects (individual containers, user IDs in requests, ...) -## WARNING: sending container tags for checks metrics may create more metrics -## (one per container instead of one per host). This may impact your custom metrics billing. -# -# checks_tag_cardinality: low - -## @param dogstatsd_tag_cardinality - string - optional - default: low -## @env DD_DOGSTATSD_TAG_CARDINALITY - string - optional - default: low -## Configure the level of granularity of tags to send for DogStatsD metrics and events. Choices are: -## * low: add tags about low-cardinality objects (clusters, hosts, deployments, container images, ...) -## * orchestrator: add tags about pod, (in Kubernetes), or task (in ECS or Mesos) -level of cardinality -## * high: add tags about high-cardinality objects (individual containers, user IDs in requests, ...) -## -## WARNING: sending container tags for dogstatsd metrics may create more metrics -## (one per container instead of one per host). This may impact your custom metrics billing. -# -# dogstatsd_tag_cardinality: low - -## @param histogram_aggregates - list of strings - optional - default: ["max", "median", "avg", "count"] -## @env DD_HISTOGRAM_AGGREGATES - space separated list of strings - optional - default: max median avg count -## Configure which aggregated value to compute. -## Possible values are: min, max, median, avg, sum and count. -# -# histogram_aggregates: -# - max -# - median -# - avg -# - count - -## @param histogram_percentiles - list of strings - optional - default: ["0.95"] -## @env DD_HISTOGRAM_PERCENTILES - space separated list of strings - optional - default: 0.95 -## Configure which percentiles are computed by the Agent. It must be a list of float between 0 and 1. -## Warning: percentiles must be specified as yaml strings -# -# histogram_percentiles: -# - "0.95" - -## @param histogram_copy_to_distribution - boolean - optional - default: false -## @env DD_HISTOGRAM_COPY_TO_DISTRIBUTION - boolean - optional - default: false -## Copy histogram values to distributions for true global distributions (in beta) -## Note: This increases the number of custom metrics created. -# -# histogram_copy_to_distribution: false - -## @param histogram_copy_to_distribution_prefix - string - optional -## @env DD_HISTOGRAM_COPY_TO_DISTRIBUTION_PREFIX - string - optional -## A prefix to add to distribution metrics created when histogram_copy_to_distributions is true -# -# histogram_copy_to_distribution_prefix: "" - -## @param aggregator_stop_timeout - integer - optional - default: 2 -## @env DD_AGGREGATOR_STOP_TIMEOUT - integer - optional - default: 2 -## When stopping the agent, the Aggregator will try to flush out data ready for -## aggregation (metrics, events, ...). Data are flushed to the Forwarder in order -## to be sent to Datadog, therefore the Agent might take at most -## 'aggregator_stop_timeout'+'forwarder_stop_timeout' seconds to exit. -## -## You can set the maximum amount of time, in seconds, allocated to the -## Aggregator to do so. You can disable this feature by setting -## 'aggregator_stop_timeout' to 0. -# -# aggregator_stop_timeout: 2 - -## @param aggregator_buffer_size - integer - optional - default: 100 -## @env DD_AGGREGATOR_BUFFER_SIZE - integer - optional - default: 100 -## The default buffer size for the aggregator use a sane value for most of the -## use cases, however, it could be useful to manually set it in order to trade -## RSS usage with better performances. -# -# aggregator_buffer_size: 100 - -## @param forwarder_timeout - integer - optional - default: 20 -## @env DD_FORWARDER_TIMEOUT - integer - optional - default: 20 -## Forwarder timeout in seconds -# -# forwarder_timeout: 20 - -## @param forwarder_retry_queue_payloads_max_size - integer - optional - default: 15728640 (15MB) -## @env DD_FORWARDER_RETRY_QUEUE_PAYLOADS_MAX_SIZE - integer - optional - default: 15728640 (15MB) -## It defines the maximum size in bytes of all the payloads in the forwarder's retry queue. -## The actual memory used is greater than the payloads size as there are extra fields like HTTP headers, -## but no more than 2.5 times the payload size. -# -# forwarder_retry_queue_payloads_max_size: 15728640 - -## @param forwarder_num_workers - integer - optional - default: 1 -## @env DD_FORWARDER_NUM_WORKERS - integer - optional - default: 1 -## The number of workers used by the forwarder. -# -# forwarder_num_workers: 1 - -## @param forwarder_stop_timeout - integer - optional - default: 2 -## @env DD_FORWARDER_STOP_TIMEOUT - integer - optional - default: 2 -## When stopping the agent, the Forwarder will try to flush all new -## transactions (not the ones in retry state). New transactions will be created -## as the Aggregator flush it's internal data too, therefore the Agent might take -## at most 'aggregator_stop_timeout'+'forwarder_stop_timeout' seconds to exit. -## -## You can set the maximum amount of time, in seconds, allocated to the -## Forwarder to send those transactions. You can disable this feature by setting -## 'forwarder_stop_timeout' to 0. -# -# forwarder_stop_timeout: 2 - -## @param forwarder_storage_max_size_in_bytes - integer - optional - default: 0 -## @env DD_FORWARDER_STORAGE_MAX_SIZE_IN_BYTES - integer - optional - default: 0 -## When the retry queue of the forwarder is full, `forwarder_storage_max_size_in_bytes` -## defines the amount of disk space the Agent can use to store transactions on the disk. -## When `forwarder_storage_max_size_in_bytes` is `0`, the transactions are never stored on the disk. -# -# forwarder_storage_max_size_in_bytes: 50000000 - -## @param forwarder_storage_max_disk_ratio - float - optional - default: 0.8 -## @env DD_FORWARDER_STORAGE_MAX_DISK_RATIO - float - optional - default: 0.8 -## `forwarder_storage_max_disk_ratio` defines the disk capacity limit for storing transactions. -## `0.8` means the Agent can store transactions on disk until `forwarder_storage_max_size_in_bytes` -## is reached or when the disk mount for `forwarder_storage_path` exceeds 80% of the disk capacity, -## whichever is lower. -# -# forwarder_storage_max_disk_ratio: 0.8 - -## @param forwarder_outdated_file_in_days - integer - optional - default: 10 -## @env DD_FORWARDER_OUTDATED_FILE_IN_DAYS - integer - optional - default: 10 -## This value specifies how many days the overflow transactions will remain valid before -## being discarded. During the Agent restart, if a retry file contains transactions that were -## created more than `forwarder_outdated_file_in_days` days ago, they are removed. -# -# forwarder_outdated_file_in_days: 10 - -## @param forwarder_high_prio_buffer_size - int - optional - default: 100 -## Defines the size of the high prio buffer. -## Increasing the buffer size can help if payload drops occur due to high prio buffer being full. -# -# forwarder_high_prio_buffer_size: 100 - -## @param forwarder_low_prio_buffer_size - int - optional - default: 100 -## Defines the size of the low prio buffer. -# -# forwarder_low_prio_buffer_size: 100 - -## @param forwarder_requeue_buffer_size - int - optional - default: 100 -## Defines the size of the requeue prio buffer. -# -# forwarder_requeue_buffer_size: 100 - -## @param forwarder_backoff_base - int - optional - default: 2 -## @env DD_FORWARDER_BACKOFF_BASE - integer - optional - default: 2 -## Defines the rate of exponential growth, and the first retry interval range. -## Do not set a lower value than the default. You may increase it if you use a proxy that benefits from a -## higher rate of exponential growth. -# forwarder_backoff_base: 2 - -## @param forwarder_backoff_max - int - optional - default: 64 -## @env DD_FORWARDER_BACKOFF_MAX - integer - optional - default: 64 -## Defines the maximum number of seconds to wait for a retry. -## Do not set a lower value than the default. You may increase it if you use a proxy that benefits from a -## higher maximum backoff time. -# forwarder_backoff_max: 64 - -## @param cloud_provider_metadata - list of strings - optional - default: ["aws", "gcp", "azure", "alibaba", "oracle", "ibm"] -## @env DD_CLOUD_PROVIDER_METADATA - space separated list of strings - optional - default: aws gcp azure alibaba oracle ibm -## This option restricts which cloud provider endpoint will be used by the -## agent to retrieve metadata. By default the agent will try # AWS, GCP, Azure -## and alibaba providers. Some cloud provider are not enabled by default to not -## trigger security alert when querying unknown IP (for example, when enabling -## Tencent on AWS). -## Setting an empty list will disable querying any cloud metadata endpoints -## (falling back on system metadata). Disabling metadata for the cloud provider in which an Agent runs may result in -## duplicated hosts in your Datadog account and missing Autodiscovery features -## -## Possible values are: -## "aws" AWS EC2, ECS/Fargate -## "gcp" Google Cloud Provider -## "azure" Azure -## "alibaba" Alibaba -## "tencent" Tencent -## "oracle" Oracle Cloud -## "ibm" IBM Cloud -# -# cloud_provider_metadata: -# - "aws" -# - "gcp" -# - "azure" -# - "alibaba" -# - "oracle" -# - "ibm" - -## @param collect_ec2_tags - boolean - optional - default: false -## @env DD_COLLECT_EC2_TAGS - boolean - optional - default: false -## Collect AWS EC2 custom tags as host tags. -## Requires one of: -## - `collect_ec2_tags_use_imds: true` and configuration of the -## EC2 instance to allow tags in instance metadata; or -## - configuration of the EC2 instance to have an IAM role with -## the `EC2:DescribeTags` permission. -## See docs for further details: -## https://docs.datadoghq.com/integrations/faq/how-do-i-pull-my-ec2-tags-without-using-the-aws-integration/ -# -# collect_ec2_tags: false - -## @param exclude_ec2_tags - list of strings - optional - default: [] -## @env DD_EXCLUDE_EC2_TAGS - space separated list of strings - optional - default: [] -## EC2 tags to exclude from being converted into host tags -- only applicable when collect_ec2_tags is true. This does -## not impact tags collected by the AWS Integration (see https://docs.datadoghq.com/integrations/amazon_web_services/ -## for more information on the AWS integration). -# -# exclude_ec2_tags: [] - -## @param collect_ec2_tags_use_imds - boolean - optional - default: false -## @env DD_COLLECT_EC2_TAGS_USE_IMDS - boolean - optional - default: false -## Use instance metadata service (IMDS) instead of EC2 API to collect AWS EC2 custom tags. -## Requires `collect_ec2_tags`. -# -# collect_ec2_tags_use_imds: false - -## @param ec2_metadata_timeout - integer - optional - default: 300 -## @env DD_EC2_METADATA_TIMEOUT - integer - optional - default: 300 -## Timeout in milliseconds on calls to the AWS EC2 metadata endpoints. -# -# ec2_metadata_timeout: 300 - -## @param ec2_prefer_imdsv2 - boolean - optional - default: false -## @env DD_EC2_PREFER_IMDSV2 - boolean - optional - default: false -## If this flag is true then the agent will request EC2 metadata using IMDS v2, -## which offers additional security for accessing metadata. However, in some -## situations (such as a containerized agent on a plain EC2 instance) it may -## require additional configuration on the AWS side. See the AWS guidelines -## for further details: -## https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html#instance-metadata-transition-to-version-2 -# -# ec2_prefer_imdsv2: false - -## @param collect_gce_tags - boolean - optional - default: true -## @env DD_COLLECT_GCE_TAGS - boolean - optional - default: true -## Collect Google Cloud Engine metadata as host tags -# -# collect_gce_tags: true - -## @param exclude_gce_tags - list of strings - optional - default: ["bosh_settings" ,"cli-cert" ,"common-psm1" ,"configure-sh" ,"containerd-configure-sh" ,"disable-address-manager" ,"disable-legacy-endpoints" ,"enable-oslogin" ,"gce-container-declaration" ,"google-container-manifest" ,"ipsec-cert" ,"k8s-node-setup-psm1" ,"kube-env" ,"kubeconfig" ,"kubelet-config" ,"serial-port-logging-enable" ,"shutdown-script" ,"ssh-keys" ,"sshKeys" ,"ssl-cert" ,"startup-script" ,"user-data" ,"windows-keys" ,"windows-startup-script-ps1"] -## @env DD_EXCLUDE_GCE_TAGS - space separated list of strings - optional - default: bosh_settings cli-cert common-psm1 configure-sh containerd-configure-sh disable-address-manager disable-legacy-endpoints enable-oslogin gce-container-declaration google-container-manifest ipsec-cert k8s-node-setup-psm1 kube-env kubeconfig kubelet-config serial-port-logging-enable shutdown-script ssh-keys sshKeys ssl-cert startup-script user-data windows-keys windows-startup-script-ps1 -## Google Cloud Engine metadata attribute to exclude from being converted into -## host tags -- only applicable when collect_gce_tags is true. -# -# exclude_gce_tags: -# - "bosh_settings" -# - "cli-cert" -# - "common-psm1" -# - "configure-sh" -# - "containerd-configure-sh" -# - "disable-address-manager" -# - "disable-legacy-endpoints" -# - "enable-oslogin" -# - "gce-container-declaration" -# - "google-container-manifest" -# - "ipsec-cert" -# - "k8s-node-setup-psm1" -# - "kube-env" -# - "kubeconfig" -# - "kubelet-config" -# - "serial-port-logging-enable" -# - "shutdown-script" -# - "ssh-keys" -# - "sshKeys" -# - "ssl-cert" -# - "startup-script" -# - "user-data" -# - "windows-keys" -# - "windows-startup-script-ps1" - -## @param gce_send_project_id_tag - bool - optional - default: false -## @env DD_GCE_SEND_PROJECT_ID_TAG - bool - optional - default: false -## Send the project ID host tag with the `project_id:` tag key in addition to -## the `project:` tag key. -# -# gce_send_project_id_tag: false - -## @param gce_metadata_timeout - integer - optional - default: 1000 -## @env DD_GCE_METADATA_TIMEOUT - integer - optional - default: 1000 -## Timeout in milliseconds on calls to the GCE metadata endpoints. -# -# gce_metadata_timeout: 1000 - -## @param azure_hostname_style - string - optional - default: "os" -## @env DD_AZURE_HOSTNAME_STYLE - string - optional - default: "os" -## Changes how agent hostname is set on Azure virtual machines. -## -## Possible values: -## "os" - use the hostname reported by the operating system (default) -## "name" - use the instance name -## "name_and_resource_group" - use a combination of the instance name and resource group name -## "full" - use a combination of the instance name, resource group name and subscription id -## "vmid" - use the instance id -# -# azure_hostname_style: "os" - -## @param scrubber - custom object - optional -## Configuration for scrubbing sensitive information from the Agent's logs, configuration and flares. -# -# scrubber: -# - ## @param scrubber.additional_keys - list of strings - optional - ## @env DD_SCRUBBER_ADDITIONAL_KEYS - space-separated list of strings - optional - ## By default, the Agent removes known sensitive keys from Agent and integrations YAML configs before - ## including them in the flare. - ## Use this parameter to define additional sensitive keys that the Agent should scrub from - ## the YAML files included in the flare. - # - # additional_keys: - # - "sensitive_key_1" - # - "sensitive_key_2" - -## @param no_proxy_nonexact_match - boolean - optional - default: false -## @env DD_NO_PROXY_NONEXACT_MATCH - boolean - optional - default: false -## Enable more flexible no_proxy matching. See https://godoc.org/golang.org/x/net/http/httpproxy#Config -## for more information on accepted matching criteria. -# -# no_proxy_nonexact_match: false - -## @param use_proxy_for_cloud_metadata - boolean - optional - default: false -## @env DD_USE_PROXY_FOR_CLOUD_METADATA - boolean - optional - default: false -## By default cloud provider IP's are added to the transport's `no_proxy` list. -## Use this parameter to remove them from the `no_proxy` list. -# -# use_proxy_for_cloud_metadata: false - -## @param inventories_configuration_enabled - boolean - optional - default: true -## @env DD_INVENTORIES_CONFIGURATION_ENABLED - boolean - optional - default: true -## By default the Agent sends its own configuration to Datadog to be displayed in the `Agent Configuration` section of the host -## detail panel. See https://docs.datadoghq.com/infrastructure/list/#agent-configuration for more information. -## -## The Agent configuration is scrubbed of any sensitive information. -# -# inventories_configuration_enabled: true - -## @param auto_exit - custom object - optional -## Configuration for the automatic exit mechanism: the Agent stops when some conditions are met. -# -# auto_exit: - - ## @param noprocess - custom object - optional - ## Configure the `noprocess` automatic exit method. - ## Detect when no other processes (non-agent) are running to trigger automatic exit. `HOST_PROC` is taken into account when gathering processes. - ## Feature is only supported on POSIX systems. - # - # noprocess: - ## @param enabled - boolean - optional - default: false - ## @env DD_AUTO_EXIT_NOPROCESS_ENABLED - boolean - optional - default: false - ## Enable the `noprocess` method - # - # enabled: false - - ## @param excluded_processes - list of strings - optional - ## @env DD_AUTO_EXIT_NOPROCESS_EXCLUDED_PROCESSES - space separated list of strings - optional - ## List of regular expressions to exclude extra processes (on top of built-in list). - # - # excluded_processes: [] - - ## @param validation_period - integer - optional - default: 60 - ## @env DD_AUTO_EXIT_VALIDATION_PERIOD - integer - optional - default: 60 - ## Time (in seconds) delay during which the auto exit validates that the selected method continuously detects an exit condition, before exiting. - ## The value is verified every 30s. By default, three consecutive checks need to return true to trigger an automatic exit. - # - # validation_period: 60 - - -## @param fips - custom object - optional -## [BETA] Enter specific configurations for using the FIPS proxy. -## Uncomment this parameter and the one below to enable them. -# -# fips: - - ## @param enabled - boolean - optional - default: false - ## @env DD_FIPS_ENABLED - boolean - optional - default: false - ## This feature is in BETA. - ## - ## Enable the use of the FIPS proxy to send data to the DataDog backend. Enabling this will force all outgoing traffic - ## from the Agent to the local proxy. - ## It's important to note that enabling this will not make the Datadog Agent FIPS compliant, but will force all outgoing - ## traffic to a local FIPS compliant proxy. The FIPS proxy need to be installed locally in addition to the agent. - ## - ## When setting this to true the following settings would be overridden, ignoring the values from the - ## configuration: - ## - dd_url - ## - apm_config.apm_dd_url - ## - apm_config.profiling_dd_url - ## - apm_config.telemetry.dd_url - ## - process_config.process_dd_url - ## - logs_config.use_http - ## - logs_config.logs_no_ssl - ## - logs_config.logs_dd_url - ## - database_monitoring.metrics.dd_url - ## - database_monitoring.activity.dd_url - ## - database_monitoring.samples.dd_url - ## - compliance_config.endpoints.dd_url - ## - runtime_security_config.endpoints.dd_url - ## - network_devices.metadata.dd_url - # - ## The agent will also ignore 'proxy.*' settings and environment variables related to proxy (HTTP_PROXY, HTTPS_PROXY, - ## DD_PROXY_HTTP and DD_PROXY_HTTPS). - # - # enabled: false - - ## @param local_address - string - optional - default: localhost - ## @env DD_FIPS_LOCAL_ADDRESS - string - optional - default: localhost - ## The local address that the FIPS proxy will bind ports on. - # - # local_address: localhost - -## @param observability_pipelines_worker - custom object - optional -## Configuration for forwarding telemetry to an Observability Pipelines Worker instead of Datadog. -## https://www.datadoghq.com/product/observability-pipelines/ -## Note: This config is interchangeable with `vector` -# -# observability_pipelines_worker: - - ## @param metrics - custom object - optional - ## Specific configurations for metrics - # - # metrics: - - ## @param enabled - boolean - optional - default: false - ## @env DD_OBSERVABILITY_PIPELINES_WORKER_METRICS_ENABLED - boolean - optional - default: false - ## Enables forwarding of metrics to an Observability Pipelines Worker - # - # enabled: false - - ## @param url - string - optional - default: "" - ## @env DD_OBSERVABILITY_PIPELINES_WORKER_METRICS_URL - string - optional - default: "" - ## URL endpoint for the Observability Pipelines Worker to send metrics to - # - # url: "http//127.0.0.1:8080" - - ## @param logs - custom object - optional - ## Specific configurations for logs - # - # logs: - - ## @param enabled - boolean - optional - default: false - ## @env DD_OBSERVABILITY_PIPELINES_WORKER_LOGS_ENABLED - boolean - optional - default: false - ## Enables forwarding of logs to an Observability Pipelines Worker - # - # enabled: false - - ## @param url - string - optional - default: "" - ## @env DD_OBSERVABILITY_PIPELINES_WORKER_LOGS_URL - string - optional - default: "" - ## URL endpoint for the Observability Pipelines Worker to send logs to - # - # url: "http//127.0.0.1:8080" - - ## @param traces - custom object - optional - ## Specific configurations for traces - # - # traces: - - ## @param enabled - boolean - optional - default: false - ## @env DD_OBSERVABILITY_PIPELINES_WORKER_TRACES_ENABLED - boolean - optional - default: false - ## Enables forwarding of traces to an Observability Pipelines Worker - # - # enabled: false - - ## @param url - string - optional - default: "" - ## @env DD_OBSERVABILITY_PIPELINES_WORKER_TRACES_URL - string - optional - default: "" - ## URL endpoint for the Observability Pipelines Worker to send traces to - # - # url: "http//127.0.0.1:8080" - -{{ end }} -{{- if .Agent }} -{{- if .Python }} -{{- if .BothPythonPresent -}} -## @param python_version - integer - optional - default: 2 -## @env DD_PYTHON_VERSION - integer - optional - default: 2 -## The major version of Python used to run integrations and custom checks. -## The only supported values are 2 (to use Python 2) or 3 (to use Python 3). -## Do not change this option when using the official Docker Agent images. -# -# python_version: 2 - -{{ end -}} -{{ end }} - -############################ -## Advanced Configuration ## -############################ - -## @param confd_path - string - optional -## @env DD_CONFD_PATH - string - optional -## The path containing check configuration files. By default, uses the conf.d folder -## located in the Agent configuration folder. -# -# confd_path: "" - -## @param additional_checksd - string - optional -## @env DD_ADDITIONAL_CHECKSD - string - optional -## Additional path indicating where to search for Python checks. By default, uses the checks.d folder -## located in the Agent configuration folder. -# -# additional_checksd: - -## @param expvar_port - integer - optional - default: 5000 -## @env DD_EXPVAR_PORT - integer - optional - default: 5000 -## The port for the go_expvar server. -# -# expvar_port: 5000 - -## @param cmd_port - integer - optional - default: 5001 -## @env DD_CMD_PORT - integer - optional - default: 5001 -## The port on which the IPC api listens. -# -# cmd_port: 5001 - -## @param GUI_port - integer - optional -## @env DD_GUI_PORT - integer - optional -## The port for the browser GUI to be served. -## Setting 'GUI_port: -1' turns off the GUI completely -## Default is: -## * Windows & macOS : `5002` -## * Linux: `-1` -## -# -# GUI_port: - -## @param GUI_session_expiration - duration - optional -## @env GUI_SESSION_EXPIRATION - duration - optional -## The duration after which a GUI session will expire. -## Setting 'GUI_SESSION_EXPIRATION: 0' disable session expiration. -## Default is "0s" (sessions do not expire). -# -# GUI_session_expiration: - -## @param health_port - integer - optional - default: 0 -## @env DD_HEALTH_PORT - integer - optional - default: 0 -## The Agent can expose its health check on a dedicated http port. -## This is useful for orchestrators that support http probes. -## Default is 0 (disabled), set a valid port number (eg. 5555) to enable. -# -# health_port: 0 - -## @param check_runners - integer - optional - default: 4 -## @env DD_CHECK_RUNNERS - integer - optional - default: 4 -## The `check_runners` refers to the number of concurrent check runners available for check instance execution. -## The scheduler attempts to spread the instances over the collection interval and will _at most_ be -## running the number of check runners instances concurrently. -## Setting the value to 1 would result in checks running sequentially. -## -## This is a sensitive setting, and we do NOT recommend changing the default number -## of check runners in the general case. The level of concurrency has effects on -## the Agent's: RSS memory, CPU load, resource contention overhead, etc. -# -# check_runners: 4 - -## @param enable_metadata_collection - boolean - optional - default: true -## @env DD_ENABLE_METADATA_COLLECTION - boolean - optional - default: true -## Metadata collection should always be enabled, except if you are running several -## agents/dsd instances per host. In that case, only one Agent should have it on. -## WARNING: disabling it on every Agent leads to display and billing issues. -# -# enable_metadata_collection: true - -## @param enable_gohai - boolean - optional - default: true -## @env DD_ENABLE_GOHAI - boolean - optional - default: true -## Enable the gohai collection of systems data. -# -# enable_gohai: true - -## @param enable_signing_metadata_collection - boolean - optional - default: true -## @env DD_ENABLE_SIGNING_METADATA_COLLECTION - boolean - optional - default: true -## Enable the Linux package signing medatada collection. -# -# enable_signing_metadata_collection: true - -## @param server_timeout - integer - optional - default: 30 -## @env DD_SERVER_TIMEOUT - integer - optional - default: 30 -## IPC api server timeout in seconds. -# -# server_timeout: 30 - -## @param procfs_path - string - optional -## @env DD_PROCFS_PATH - string - optional -## Some environments may have the procfs file system mounted in a miscellaneous -## location. The procfs_path configuration parameter provides a mechanism to -## override the standard default location: '/proc' - this setting trickles down to -## integrations and affect their behavior if they rely on the psutil python package. -# -# procfs_path: -{{ if .Python }} -## @param disable_py3_validation - boolean - optional - default: false -## @env DD_DISABLE_PY3_VALIDATION - boolean - optional - default: false -## Disable Python3 validation of python checks. -# -# disable_py3_validation: false -# -## @param python3_linter_timeout - integer - optional - default: 120 -## @env DD_PYTHON3_LINTER_TIMEOUT - integer - optional - default: 120 -## Timeout in seconds for validation of compatibility with python 3 when running python 2. -# -# python3_linter_timeout: 120 - -## @param memtrack_enabled - boolean - optional - default: true -## @env DD_MEMTRACK_ENABLED - boolean - optional - default: true -## Enables tracking of memory allocations made from the python runtime loader. -# -# memtrack_enabled: true - -## @param tracemalloc_debug - boolean - optional - default: false -## @env DD_TRACEMALLOC_DEBUG - boolean - optional - default: false -## Enables debugging with tracemalloc for python checks. -## Please note that this option is only available when python_version is set to "3". -## Additionally when this option becomes effective the number of check runners is -## overridden to 1. -# -# tracemalloc_debug: false - -## @param tracemalloc_include - string - optional -## @env DD_TRACEMALLOC_INCLUDE - string - optional -## Comma-separated list of Python checks to enable tracemalloc for when `tracemalloc_debug` is true. -## By default, all Python checks are enabled. -# -# tracemalloc_include: - -## @param tracemalloc_exclude - string - optional -## @env DD_TRACEMALLOC_EXCLUDE - string - optional -## Comma-separated list of Python checks to disable tracemalloc for when `tracemalloc_debug` is true. -## By default, all Python checks are enabled. This setting takes precedence over `tracemalloc_include`. -# -# tracemalloc_exclude: - -## @param windows_use_pythonpath - boolean - optional -## @env DD_WINDOWS_USE_PYTHONPATH - boolean - optional -## Whether to honour the value of the PYTHONPATH env var when set on Windows. -## Disabled by default, so we only load Python libraries bundled with the Agent. -# -# windows_use_pythonpath: false -{{ end }} -## @param secret_backend_command - string - optional -## @env DD_SECRET_BACKEND_COMMAND - string - optional -## `secret_backend_command` is the path to the script to execute to fetch secrets. -## The executable must have specific rights that differ on Windows and Linux. -## -## For more information see: https://github.com/DataDog/datadog-agent/blob/main/docs/agent/secrets.md -# -# secret_backend_command: - -## @param secret_backend_arguments - list of strings - optional -## @env DD_SECRET_BACKEND_ARGUMENTS - space separated list of strings - optional -## If secret_backend_command is set, specify here a list of arguments to give to the command at each run. -# -# secret_backend_arguments: -# - -# - - -## @param secret_backend_output_max_size - integer - optional - default: 1048576 -## @env DD_SECRET_BACKEND_OUTPUT_MAX_SIZE - integer - optional - default: 1048576 -## The size in bytes of the buffer used to store the command answer (apply to both stdout and stderr) -# -# secret_backend_output_max_size: 1048576 - -## @param secret_backend_timeout - integer - optional - default: 30 -## @env DD_SECRET_BACKEND_TIMEOUT - integer - optional - default: 30 -## The timeout to execute the command in second -# -# secret_backend_timeout: 30 - -## @param secret_backend_skip_checks - boolean - optional - default: false -## @env DD_SECRET_BACKEND_SKIP_CHECKS - boolean - optional - default: false -## Disable fetching secrets for check configurations -# -# secret_backend_skip_checks: false -# - -## @param secret_backend_remove_trailing_line_break - boolean - optional - default: false -## @env DD_SECRET_BACKEND_REMOVE_TRAILING_LINE_BREAK - boolean - optional - default: false -## Remove trailing line breaks from secrets returned by the secret_backend_command. Some secret management tools automatically -## add a line break when exporting secrets through files. -# -# secret_backend_remove_trailing_line_break: false - - -{{- if .InternalProfiling -}} -## @param profiling - custom object - optional -## Enter specific configurations for internal profiling. -## -## Please note that: -## 1. This does *not* enable profiling for user applications. -## 2. This only enables internal profiling of the agent go runtime. -## 3. To enable profiling for user apps please refer to -## https://docs.datadoghq.com/tracing/profiling/ -## 4. Enabling this feature will incur in billing charges and other -## unexpected side-effects (ie. agent profiles showing with your -## services). -## -## Uncomment this parameter and the one below to enable profiling. -# -# internal_profiling: -# - ## @param enabled - boolean - optional - default: false - ## @env DD_INTERNAL_PROFILING_ENABLED - boolean - optional - default: false - ## Enable internal profiling for the Agent process. - # - # enabled: false - -{{ end }} - - -{{ end -}} - -{{- if .LogsAgent }} - -################################## -## Log collection Configuration ## -################################## - -## @param logs_enabled - boolean - optional - default: false -## @env DD_LOGS_ENABLED - boolean - optional - default: false -## Enable Datadog Agent log collection by setting logs_enabled to true. -# -# logs_enabled: false - -## @param logs_config - custom object - optional -## Enter specific configurations for your Log collection. -## Uncomment this parameter and the one below to enable them. -## See https://docs.datadoghq.com/agent/logs/ -# -# logs_config: - - ## @param container_collect_all - boolean - optional - default: false - ## @env DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL - boolean - optional - default: false - ## Enable container log collection for all the containers (see ac_exclude to filter out containers) - # - # container_collect_all: false - - ## @param logs_dd_url - string - optional - ## @env DD_LOGS_CONFIG_LOGS_DD_URL - string - optional - ## Define the endpoint and port to hit when using a proxy for logs. The logs are forwarded in TCP - ## therefore the proxy must be able to handle TCP connections. - # - # logs_dd_url: : - - ## @param logs_no_ssl - boolean - optional - default: false - ## @env DD_LOGS_CONFIG_LOGS_NO_SSL - optional - default: false - ## Disable the SSL encryption. This parameter should only be used when logs are - ## forwarded locally to a proxy. It is highly recommended to then handle the SSL encryption - ## on the proxy side. - # - # logs_no_ssl: false - - ## @param processing_rules - list of custom objects - optional - ## @env DD_LOGS_CONFIG_PROCESSING_RULES - list of custom objects - optional - ## Global processing rules that are applied to all logs. The available rules are - ## "exclude_at_match", "include_at_match" and "mask_sequences". More information in Datadog documentation: - ## https://docs.datadoghq.com/agent/logs/advanced_log_collection/#global-processing-rules - # - # processing_rules: - # - type: - # name: - # pattern: - - ## @param force_use_http - boolean - optional - default: false - ## @env DD_LOGS_CONFIG_FORCE_USE_HTTP - boolean - optional - default: false - ## By default, the Agent sends logs in HTTPS batches to port 443 if HTTPS connectivity can - ## be established at Agent startup, and falls back to TCP otherwise. Set this parameter to `true` to - ## always send logs with HTTPS (recommended). - ## Warning: force_use_http means HTTP over TCP, not HTTP over HTTPS. Please use logs_no_ssl for HTTP over HTTPS. - # - # force_use_http: true - - ## @param force_use_tcp - boolean - optional - default: false - ## @env DD_LOGS_CONFIG_FORCE_USE_TCP - boolean - optional - default: false - ## By default, logs are sent through HTTPS if possible, set this parameter - ## to `true` to always send logs via TCP. If `force_use_http` is set to `true`, this parameter - ## is ignored. - # - # force_use_tcp: true - - ## @param use_compression - boolean - optional - default: true - ## @env DD_LOGS_CONFIG_USE_COMPRESSION - boolean - optional - default: true - ## This parameter is available when sending logs with HTTPS. If enabled, the Agent - ## compresses logs before sending them. - # - # use_compression: true - - ## @param compression_level - integer - optional - default: 6 - ## @env DD_LOGS_CONFIG_COMPRESSION_LEVEL - boolean - optional - default: false - ## The compression_level parameter accepts values from 0 (no compression) - ## to 9 (maximum compression but higher resource usage). Only takes effect if - ## `use_compression` is set to `true`. - # - # compression_level: 6 - - ## @param batch_wait - integer - optional - default: 5 - ## @env DD_LOGS_CONFIG_BATCH_WAIT - integer - optional - default: 5 - ## The maximum time (in seconds) the Datadog Agent waits to fill each batch of logs before sending. - # - # batch_wait: 5 - - ## @param open_files_limit - integer - optional - default: 500 - ## @env DD_LOGS_CONFIG_OPEN_FILES_LIMIT - integer - optional - default: 500 - ## The maximum number of files that can be tailed in parallel. - ## Note: the default for Mac OS is 200. The default for - ## all other systems is 500. - # - # open_files_limit: 500 - - ## @param file_wildcard_selection_mode - string - optional - default: `by_name` - ## @env DD_LOGS_CONFIG_FILE_WILDCARD_SELECTION_MODE - string - optional - default: `by_name` - ## The strategy used to prioritize wildcard matches if they exceed the open file limit. - ## - ## Choices are `by_name` and `by_modification_time`. - ## - ## `by_name` means that each log source is considered and the matching files are ordered - ## in reverse name order. While there are less than `logs_config.open_files_limit` files - ## being tailed, this process repeats, collecting from each configured source. - ## - ## `by_modification_time` takes all log sources and first adds any log sources that - ## point to a specific file. Next, it finds matches for all wildcard sources. - ## This resulting list is ordered by which files have been most recently modified - ## and the top `logs_config.open_files_limit` most recently modified files are - ## chosen for tailing. - ## - ## WARNING: `by_modification_time` is less performant than `by_name` and will trigger - ## more disk I/O at the configured wildcard log paths. - # - # file_wildcard_selection_mode: by_name - - ## @param max_message_size_bytes - integer - optional - default: 256000 - ## @env DD_LOGS_CONFIG_MAX_MESSAGE_SIZE_BYTES - integer - optional - default : 256000 - ## The maximum size of single log message in bytes. If maxMessageSizeBytes exceeds - ## the documented API limit of 1MB - any payloads larger than 1MB will be dropped by the intake. - # https://docs.datadoghq.com/api/latest/logs/ - # - # max_message_size_bytes: 256000 - - ## @param integrations_logs_files_max_size - integer - optional - default: 10 - ## @env DD_LOGS_CONFIG_INTEGRATIONS_LOGS_FILES_MAX_SIZE - integer - optional - default: 10 - ## The max size in MB that an integration logs file is allowed to use - # - # integrations_logs_files_max_size - - ## @param integrations_logs_total_usage - integer - optional - default: 100 - ## @env DD_LOGS_CONFIG_INTEGRATIONS_LOGS_TOTAL_USAGE - integer - optional - default: 100 - ## The total combined usage all integrations logs files can use - # - # integrations_logs_total_usage - -{{ end -}} -{{- if .TraceAgent }} - -#################################### -## Trace Collection Configuration ## -#################################### - -## @param apm_config - custom object - optional -## Enter specific configurations for your trace collection. -## Uncomment this parameter and the one below to enable them. -## See https://docs.datadoghq.com/agent/apm/ -# -# apm_config: - - ## @param enabled - boolean - optional - default: true - ## @env DD_APM_ENABLED - boolean - optional - default: true - ## Set to true to enable the APM Agent. - # - # enabled: true - - ## @param env - string - optional - default: none - ## @env DD_APM_ENV - string - optional - default: none - ## The environment tag that Traces should be tagged with. - ## If not set the value will be inherited, in order, from the top level - ## "env" config option if set and then from the 'env:' tag if present in the - ## 'tags' top level config option. - # - # env: none - - ## @param receiver_port - integer - optional - default: 8126 - ## @env DD_APM_RECEIVER_PORT - integer - optional - default: 8126 - ## The port that the trace receiver should listen on. - ## Set to 0 to disable the HTTP receiver. - # - # receiver_port: 8126 - -{{- if (eq .OS "windows")}} - ## Please note that UDS receiver is not available in Windows. - #@ Enabling this setting may result in unexpected behavior. - ## @param receiver_socket - string - optional - default: "" - ## @env DD_APM_RECEIVER_SOCKET - string - optional - default: "" - ## Accept traces through Unix Domain Sockets. - ## Set to "" to disable the UDS receiver. - # - # receiver_socket: "" -{{else}} - ## @param receiver_socket - string - optional - default: unix:///var/run/datadog/apm.socket - ## @env DD_APM_RECEIVER_SOCKET - string - optional - default: unix:///var/run/datadog/apm.socket - ## Accept traces through Unix Domain Sockets. - ## Set to "" to disable the UDS receiver. - # - # receiver_socket: /var/run/datadog/apm.socket -{{ end }} - - ## @param apm_non_local_traffic - boolean - optional - default: false - ## @env DD_APM_NON_LOCAL_TRAFFIC - boolean - optional - default: false - ## Set to true so the Trace Agent listens for non local traffic, - ## i.e if Traces are being sent to this Agent from another host/container - # - # apm_non_local_traffic: false - - ## @param apm_dd_url - string - optional - ## @env DD_APM_DD_URL - string - optional - ## Define the endpoint and port to hit when using a proxy for APM. The traces are forwarded in TCP - ## therefore the proxy must be able to handle TCP connections. - # - # apm_dd_url: : - - ## DEPRECATED - please use `target_traces_per_second` instead. - ## @param max_traces_per_second - integer - optional - default: 10 - ## @env DD_APM_MAX_TPS - integer - optional - default: 10 - ## The target traces per second to sample. Sampling rates to apply are adjusted given - ## the received traffic and communicated to tracers. This configures head base sampling. - ## As of 7.35.0 sampling cannot be disabled and setting 'max_traces_per_second' to 0 no longer - ## disables sampling, but instead sends no traces to the intake. To avoid rate limiting, set this - ## value sufficiently high for your traffic pattern. - # - # max_traces_per_second: 10 - - ## @param target_traces_per_second - integer - optional - default: 10 - ## @env DD_APM_TARGET_TPS - integer - optional - default: 10 - ## The target traces per second to sample. Sampling rates to apply are adjusted given - ## the received traffic and communicated to tracers. This configures head-based sampling. - ## As of 7.35.0 sampling cannot be disabled and setting 'max_traces_per_second' to 0 no longer - ## disables sampling, but instead sends no traces to the intake. To avoid rate limiting, set this - ## value sufficiently high for your traffic pattern. - # - # target_traces_per_second: 10 - - ## @param errors_per_second - integer - optional - default: 10 - ## @env DD_APM_ERROR_TPS - integer - optional - default: 10 - ## The target error trace chunks to receive per second. The TPS is spread - ## to catch all combinations of service, name, resource, http.status, and error.type. - ## Set to 0 to disable the errors sampler. - # - # errors_per_second: 10 - - ## @param max_events_per_second - integer - optional - default: 200 - ## @env DD_APM_MAX_EPS - integer - optional - default: 200 - ## Maximum number of APM events per second to sample. - # - # max_events_per_second: 200 - - ## @param max_memory - integer - optional - default: 500000000 - ## @env DD_APM_MAX_MEMORY - integer - optional - default: 500000000 - ## This value is what the Agent aims to use in terms of memory. If surpassed, the API - ## rate limits incoming requests to aim and stay below this value. - ## Note: The Agent process is killed if it uses more than 150% of `max_memory`. - ## Set the `max_memory` parameter to `0` to disable the memory limitation. - # - # max_memory: 500000000 - - ## @param max_cpu_percent - integer - optional - default: 50 - ## @env DD_APM_MAX_CPU_PERCENT - integer - optional - default: 50 - ## The CPU percentage that the Agent aims to use. If surpassed, the API rate limits - ## incoming requests to aim and stay below this value. Examples: 50 = half a core, 200 = two cores. - ## Set `max_cpu_percent` to `0` to disable rate limiting based on CPU usage. - # - # max_cpu_percent: 50 - - ## @param obfuscation - object - optional - ## Defines obfuscation rules for sensitive data. Disabled by default. - ## See https://docs.datadoghq.com/tracing/setup_overview/configure_data_security/#agent-trace-obfuscation - # - # obfuscation: - # credit_cards: - ## @param DD_APM_OBFUSCATION_CREDIT_CARDS_ENABLED - boolean - optional - ## Enables obfuscation rules for credit cards. Enabled by default. - # enabled: true - ## @param DD_APM_OBFUSCATION_CREDIT_CARDS_LUHN - boolean - optional - ## Enables a Luhn checksum check in order to eliminate false negatives. Disabled by default. - # luhn: false - # - # elasticsearch: - ## @param DD_APM_OBFUSCATION_ELASTICSEARCH_ENABLED - boolean - optional - ## Enables obfuscation rules for spans of type "elasticsearch". Enabled by default. - # enabled: true - ## @param DD_APM_OBFUSCATION_ELASTICSEARCH_KEEP_VALUES - object - optional - ## List of keys that should not be obfuscated. - # keep_values: - # - client_id - ## @param DD_APM_OBFUSCATION_ELASTICSEARCH_OBFUSCATE_SQL_VALUES - boolean - optional - ## The set of keys for which their values will be passed through SQL obfuscation - # obfuscate_sql_values: - # - val1 - # - # opensearch: - ## @param DD_APM_OBFUSCATION_OPENSEARCH_ENABLED - boolean - optional - ## Enables obfuscation rules for spans of type "opensearch". Enabled by default. - # enabled: true - ## @param DD_APM_OBFUSCATION_OPENSEARCH_KEEP_VALUES - object - optional - ## List of keys that should not be obfuscated. - # keep_values: - # - client_id - ## @param DD_APM_OBFUSCATION_OPENSEARCH_OBFUSCATE_SQL_VALUES - boolean - optional - ## The set of keys for which their values will be passed through SQL obfuscation - # obfuscate_sql_values: - # - val1 - # - # http: - ## @param DD_APM_OBFUSCATION_HTTP_REMOVE_QUERY_STRING - boolean - optional - ## Enables obfuscation of query strings in URLs - # remove_query_string: false - ## @param DD_APM_OBFUSCATION_HTTP_REMOVE_PATHS_WITH_DIGITS - boolean - optional - ## If enabled, path segments in URLs containing digits are replaced by "?" - # remove_path_with_digits: false - # - # memcached: - ## @param DD_APM_OBFUSCATION_MEMCACHED_ENABLED - boolean - optional - ## Enables obfuscation rules for spans of type "memcached". Enabled by default. - # enabled: true - ## @param DD_APM_OBFUSCATION_MEMCACHED_KEEP_COMMAND - boolean - optional - ## If enabled, the full command for the query will be kept, including any lookup - ## keys that could be present. The value for storage commands will still be - ## redacted if Memcached obfuscation is enabled. - # keep_command: false - # - # mongodb: - ## @param DD_APM_OBFUSCATION_MONGODB_ENABLED - boolean - optional - ## Enables obfuscation rules for spans of type "mongodb". Enabled by default. - # enabled: true - ## @param DD_APM_OBFUSCATION_MONGODB_KEEP_VALUES - object - optional - ## List of keys that should not be obfuscated. - # keep_values: - # - document_id - ## @param DD_APM_OBFUSCATION_MONGODB_OBFUSCATE_SQL_VALUES - object - optional - ## The set of keys for which their values will be passed through SQL obfuscation - # obfuscate_sql_values: - # - val1 - # - # redis: - ## @param DD_APM_OBFUSCATION_REDIS_ENABLED - boolean - optional - ## Enables obfuscation rules for spans of type "redis". Enabled by default. - # enabled: true - ## @param DD_APM_OBFUSCATION_REDIS_REMOVE_ALL_ARGS - boolean - optional - ## When true, replaces all arguments of a redis command with a single "?". Disabled by default. - # remove_all_args: false - # - ## @param DD_APM_OBFUSCATION_REMOVE_STACK_TRACES - boolean - optional - ## Enables removing stack traces to replace them with "?". Disabled by default. - # remove_stack_traces: false - # - # sql_exec_plan: - ## @param DD_APM_SQL_EXEC_PLAN_ENABLED - boolean - optional - ## Enables obfuscation rules for JSON query execution plans. Disabled by default. - # enabled: false - ## @param DD_APM_SQL_EXEC_PLAN_KEEP_VALUES - object - optional - ## List of keys that should not be obfuscated. - # keep_values: - # - id1 - ## @param DD_APM_SQL_EXEC_PLAN_OBFUSCATE_SQL_VALUES - boolean - optional - ## The set of keys for which their values will be passed through SQL obfuscation - # obfuscate_sql_values: - # - val1 - # - # sql_exec_plan_normalize: - ## @param DD_APM_SQL_EXEC_PLAN_NORMALIZE_ENABLED - boolean - optional - ## Enables obfuscation rules for JSON query execution plans, including cost and row estimates. - ## Produces a normalized execution plan. Disabled by default. - # enabled: false - ## @param DD_APM_SQL_EXEC_PLAN_NORMALIZE_KEEP_VALUES - object - optional - ## List of keys that should not be obfuscated. - # keep_values: - # - id1 - ## @param DD_APM_SQL_EXEC_PLAN_NORMALIZE_OBFUSCATE_SQL_VALUES - boolean - optional - ## The set of keys for which their values will be passed through SQL obfuscation - # obfuscate_sql_values: - # - val1 - - ## @param filter_tags - object - optional - ## @env DD_APM_FILTER_TAGS_REQUIRE - object - optional - ## @env DD_APM_FILTER_TAGS_REJECT - object - optional - ## Defines rules by which to filter traces based on tags. - ## * require - list of key or key/value strings - traces must have those tags in order to be sent to Datadog - ## * reject - list of key or key/value strings - traces with these tags are dropped by the Agent - ## Please note that: - ## 1. Rules take into account the intersection of tags defined. - ## 2. When `filter_tags` and `filter_tags_regex` are used at the same time, all rules are united for filtering. - ## In cases where rules in `filter_tags` and `filter_tags_regex` match the same key, the rule from `filter_tags` - ## takes precendence over the rule from `filter_tags_regex`. - ## - ## For example, in the case of the following configuration: - ## filter_tags: - ## require: ["foo:bar"] - ## filter_tags_regex: - ## require: ["foo:^bar[0-9]{1}$"] - ## With these rules, traces with a tag `foo:bar1` will be dropped, and those with a `foo:bar` tag will be kept - # - # filter_tags: - # require: [] - # reject: [] - - ## @param filter_tags_regex - object - optional - ## Defines rules by which to filter traces based on tags with regex pattern for tag values. - ## * require - list of key or key/value regex pattern strings - traces must have those tags in order to be sent to Datadog - ## * reject - list of key or key/value regex pattern strings - traces with these tags are dropped by the Agent - ## Note: Rules take into account the intersection of tags defined. - ## Using regexp patterns for tag filtering can have performance implications, and is slower than typical tag filtering - ## without regexp. However, this regexp is only run on the root span of a trace, so should not have a critical impact - ## on overall performance. - ## More detailed information can be found in the description of the `filter_tags` parameter above - # - # filter_tags_regex: - # require: [] # e.g. [":"] - # reject: [] # e.g. [":"] - - ## @param replace_tags - list of objects - optional - ## @env DD_APM_REPLACE_TAGS - list of objects - optional - ## Defines a set of rules to replace or remove certain resources, tags containing - ## potentially sensitive information. - ## Each rules has to contain: - ## * name - string - The tag name to replace, for resources use "resource.name". - ## * pattern - string - The pattern to match the desired content to replace - ## * repl - string - what to inline if the pattern is matched - ## - ## See https://docs.datadoghq.com/tracing/setup_overview/configure_data_security/#replace-rules-for-tag-filtering - ## - # - # replace_tags: - # - name: "" - # pattern: "" - # repl: "" - - ## @param ignore_resources - list of strings - optional - ## @env DD_APM_IGNORE_RESOURCES - comma separated list of strings - optional - ## An exclusion list of regular expressions can be provided to disable certain traces based on their resource name - ## all entries must be surrounded by double quotes and separated by commas. - # - # ignore_resources: ["(GET|POST) /healthcheck"] - - ## @param log_file - string - optional - ## @env DD_APM_LOG_FILE - string - optional - ## The full path to the file where APM-agent logs are written. - # - # log_file: - - ## @param connection_limit - integer - default: 2000 - ## @env DD_APM_CONNECTION_LIMIT - integer - default: 2000 - ## The APM connection limit for the Agent. - ## See https://docs.datadoghq.com/tracing/troubleshooting/agent_rate_limits/#max-connection-limit - # - # connection_limit: 2000 - - ## @param compute_stats_by_span_kind - bool - default: false - ## @env DD_APM_COMPUTE_STATS_BY_SPAN_KIND - bool - default: false - ## [BETA] Enables an additional stats computation check on spans to see they have an eligible `span.kind` (server, consumer, client, producer). - ## If enabled, a span with an eligible `span.kind` will have stats computed. If disabled, only top-level and measured spans will have stats computed. - ## NOTE: For stats computed from OTel traces, only top-level spans are considered when this option is off. - ## If you are sending OTel traces and want stats on non-top-level spans, this flag will need to be enabled. - ## If you are sending OTel traces and do not want stats computed by span kind, you need to disable this flag and remove the "enable_otlp_compute_top_level_by_span_kind" APM feature if present. - # compute_stats_by_span_kind: false - - ## @param peer_service_aggregation - bool - default: false - ## @env DD_APM_PEER_SERVICE_AGGREGATION - bool - default: false - ## DEPRECATED - please use `peer_tags_aggregation` instead. - # peer_service_aggregation: false - - ## @param peer_tags_aggregation - bool - default: false - ## @env DD_APM_PEER_TAGS_AGGREGATION - bool - default: false - ## [BETA] Enables aggregation of peer related tags (e.g., `peer.service`, `db.instance`, etc.) in the Agent. - ## If disabled, aggregated trace stats will not include these tags as dimensions on trace metrics. - ## For the best experience with peer tags, Datadog also recommends enabling `compute_stats_by_span_kind`. - ## If you are using an OTel tracer, it's best to have both enabled because client/producer spans with relevant peer tags - ## may not be marked by the Agent as top-level spans. - ## If enabling both causes the Agent to consume too many resources, try disabling `compute_stats_by_span_kind` first. - ## A high cardinality of peer tags or APM resources can also contribute to higher CPU and memory consumption. - ## You can check for the cardinality of these fields by making trace search queries in the Datadog UI. - ## The default list of peer tags can be found in pkg/trace/stats/concentrator.go. - # peer_tags_aggregation: false - - ## @param peer_tags - list of strings - optional - ## @env DD_APM_PEER_TAGS - list of strings - optional - ## [BETA] Optional list of supplementary peer tags that go beyond the defaults. The Datadog backend validates all tags - ## and will drop ones that are unapproved. - # peer_tags: [] - - ## @param features - list of strings - optional - ## @env DD_APM_FEATURES - comma separated list of strings - optional - ## Configure additional beta APM features. - ## The list of items available under apm_config.features is not guaranteed to persist across versions; - ## a feature may eventually be promoted to its own configuration option on the agent, or dropped entirely. - # - # features: ["error_rare_sample_tracer_drop","table_names","component2name","sql_cache","sqllexer","enable_otlp_compute_top_level_by_span_kind","enable_receive_resource_spans_v2"] - - ## @param additional_endpoints - object - optional - ## @env DD_APM_ADDITIONAL_ENDPOINTS - object - optional - ## Enables sending data to multiple endpoints and/or with multiple API keys via dual shipping. - ## See https://docs.datadoghq.com/agent/guide/dual-shipping - # - # additional_endpoints: - # "https://trace.agent.datadoghq.com": - # - apikey2 - # - apikey3 - # "https://trace.agent.datadoghq.eu": - # - apikey4 - - ## @param debug - custom object - optional - ## Specifies settings for the debug server of the trace agent. - # - # debug: - - ## @param port - integer - optional - default: 5012 - ## @env DD_APM_DEBUG_PORT - string - optional - default: 5012 - ## Port for the debug endpoints for the trace Agent. Set it to 0 to disable the server. - # - # port: 5012 - - ## @param instrumentation_enabled - boolean - default: false - ## @env DD_APM_INSTRUMENTATION_ENABLED - boolean - default: false - ## Enables Single Step Instrumentation in the cluster (in beta) - # - # instrumentation_enabled: false - - ## @param instrumentation_enabled_namespaces - list of strings - optional - ## @env DD_APM_INSTRUMENTATION_ENABLED_NAMESPACES - space separated list of strings - optional - ## Enables Single Step Instrumentation in specific namespaces, while Single Step Instrumentation is off in the whole cluster (in beta) - ## Can only be set if DD_APM_INSTRUMENTATION_ENABLED is false. Cannot be set together with DD_APM_INSTRUMENTATION_DISABLED_NAMESPACES. - # - # instrumentation_enabled_namespaces: - # - ns1 - # - apps - - ## @param instrumentation_disabled_namespaces - list of strings - optional - ## @env DD_APM_INSTRUMENTATION_DISABLED_NAMESPACES - space separated list of strings - optional - ## Disables Single Step Instrumentation in specific namespaces, while Single Step Instrumentation is enabled in the whole cluster (in beta) - ## Can only be set if DD_APM_INSTRUMENTATION_ENABLED is true. Cannot be set together with DD_APM_INSTRUMENTATION_ENABLED_NAMESPACES. - # - # instrumentation_disabled_namespaces: - # - ns2 - # - system-ns - - ## @param trace_buffer - integer - optional - default: 0 - ## @env DD_APM_TRACE_BUFFER - integer - optional - default: 0 - ## - ## WARNING: Do not use this config. It is here for debugging and - ## as a temporary fix in certain load scenarios. Setting this - ## results in a performance deterioration and an increase in memory - ## usage when the Trace Agent is under load. This config may be - ## removed in a future version. - ## - ## Specifies the number of trace payloads to buffer after decoding. - ## Traces can be buffered when receiving traces faster than the - ## processor can process them. - ## - # - # trace_buffer: 0 - - ## @param probabilistic_sampler - object - optional - ## Enables and configures the Probabilistic Sampler, compatible with the - ## OTel Probabilistic Sampler Processor ( https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/probabilisticsamplerprocessor#probabilistic-sampling-processor ) - ## - #probabilistic_sampler: - ## @env DD_APM_PROBABILISTIC_SAMPLER_ENABLED - boolean - optional - default: false - ## Enables or disables the probabilistic sampler - # enabled: false - # - ## @env DD_APM_PROBABILISTIC_SAMPLER_SAMPLING_PERCENTAGE - float - optional - default: 0 - ## Samples this percentage (0-100) of traffic - # sampling_percentage: 0 - # - ## @env DD_APM_PROBABILISTIC_SAMPLER_HASH_SEED - integer - optional - default: 0 - ## hash_seed: A seed used for the hash algorithm. This must match other agents and OTel - ## collectors using the probabilistic sampler to ensure consistent sampling. - # hash_seed: 0 - - - {{- if .InternalProfiling -}} - ## @param profiling - custom object - optional - ## Enter specific configurations for internal profiling. - ## - ## Please note that: - ## 1. This does *not* enable profiling for user applications. - ## 2. This only enables internal profiling of the agent go runtime. - ## 3. To enable profiling for user apps please refer to - ## https://docs.datadoghq.com/tracing/profiling/ - ## 4. Enabling this feature will incur in billing charges and other - ## unexpected side-effects (ie. agent profiles showing with your - ## services). - ## - ## Uncomment this parameter and the one below to enable profiling. - # - # internal_profiling: - # - ## @param enabled - boolean - optional - default: false - ## @env DD_INTERNAL_PROFILING_ENABLED - boolean - optional - default: false - ## Enable internal profiling for the trace-agent process. - # - # enabled: false - - {{ end -}} -{{ end -}} -{{- if .ProcessAgent }} - -###################################### -## Process Collection Configuration ## -###################################### - -## @param process_config - custom object - optional -## Enter specific configurations for your Process data collection. -## Uncomment this parameter and the one below to enable them. -## See https://docs.datadoghq.com/graphing/infrastructure/process/ -# -# process_config: - - {{- if (eq .OS "linux")}} - ## @param run_in_core_agent - custom object - optional - ## Controls whether the process Agent or core Agent collects process and/or container information (Linux only). - # run_in_core_agent: - ## @param enabled - boolean - optional - default: false - ## Enables process/container collection on the core Agent instead of the process Agent. - # enabled: false - {{ end }} - - ## @param process_collection - custom object - optional - ## Specifies settings for collecting processes. - # process_collection: - ## @param enabled - boolean - optional - default: false - ## Enables collection of information about running processes. - # enabled: false - - ## @param container_collection - custom object - optional - ## Specifies settings for collecting containers. - # container_collection: - ## @param enabled - boolean - optional - default: true - ## Enables collection of information about running containers. - # enabled: true - - ## Deprecated - use `process_collection.enabled` and `container_collection.enabled` instead - ## @param enabled - string - optional - default: "false" - ## @env DD_PROCESS_CONFIG_ENABLED - string - optional - default: "false" - ## A string indicating the enabled state of the Process Agent: - ## * "false" : The Agent collects only containers information. - ## * "true" : The Agent collects containers and processes information. - ## * "disabled" : The Agent process collection is disabled. - # - # enabled: "true" - - ## @param expvar_port - string - optional - default: 6062 - ## @env DD_PROCESS_CONFIG_EXPVAR_PORT - string - optional - default: 6062 - ## Port for the debug endpoints for the process Agent. - # - # expvar_port: 6062 - - ## @param cmd_port - string - optional - default: 6162 - ## Port for configuring runtime settings for the process Agent. - # - # cmd_port: 6162 - - ## @param log_file - string - optional - ## @env DD_PROCESS_CONFIG_LOG_FILE - string - optional - ## The full path to the file where process Agent logs are written. - # - # log_file: - - ## @param intervals - custom object - optional - default: 10s for normal checks and 2s for others. - ## @env DD_PROCESS_CONFIG_INTERVALS_CONTAINER - integer - optional - default: 10 - ## @env DD_PROCESS_CONFIG_INTERVALS_CONTAINER_REALTIME - integer - optional - default: 2 - ## @env DD_PROCESS_CONFIG_INTERVALS_PROCESS - integer - optional - default: 10 - ## @env DD_PROCESS_CONFIG_INTERVALS_PROCESS_REALTIME - integer - optional - default: 2 - ## The interval, in seconds, at which the Agent runs each check. If you want consistent - ## behavior between real-time, set the `container_realtime` and `process_realtime` intervals to 10. - # - # intervals: - # container: 10 - # container_realtime: 2 - # process: 10 - # process_realtime: 2 - - ## @param process_discovery - custom object - optional - ## Specifies custom settings for the `process_discovery` object. - # process_discovery: - ## @param enabled - boolean - optional - default: true - ## Toggles the `process_discovery` check. If enabled, this check gathers information about running integrations. - # enabled: true - - ## @param interval - duration - optional - default: 4h - minimum: 10m - ## An interval in hours that specifies how often the process discovery check should run. - # interval: 4h - - - ## @param blacklist_patterns - list of strings - optional - ## @env DD_PROCESS_CONFIG_BLACKLIST_PATTERNS - space separated list of strings - optional - ## A list of regex patterns that exclude processes if matched. - # - # blacklist_patterns: - # - - - ## @param queue_size - integer - optional - default: 256 - ## @env DD_PROCESS_CONFIG_QUEUE_SIZE - integer - optional - default: 256 - ## The number of check results to buffer in memory when a POST fails. - # - # queue_size: 256 - - ## @param process_queue_bytes - integer - optional - default: 60000000 - ## @env DD_PROCESS_CONFIG_PROCESS_QUEUE_BYTES - integer - optional - default: 60000000 - ## The amount of data (in bytes) to buffer in memory when a POST fails. - # - # process_queue_bytes: 60000000 - - ## @param rt_queue_size - integer - optional - default: 5 - ## @env DD_PROCESS_CONFIG_RT_QUEUE_SIZE - integer - optional - default: 5 - ## The number of realtime check results to buffer in memory when a POST fails. - # - # rt_queue_size: 5 - - ## @param max_per_message - integer - optional - default: 100 - ## @env DD_PROCESS_CONFIG_MAX_PER_MESSAGE - integer - optional - default: 100 - ## The maximum number of processes or containers per message. - # - # max_per_message: 100 - - ## @param dd_agent_bin - string - optional - ## @env DD_PROCESS_CONFIG_DD_AGENT_BIN - string - optional - ## Overrides the path to the Agent bin used for getting the hostname. Defaults are: - ## * Windows: \embedded\\agent.exe - ## * Unix: /opt/datadog-agent/bin/agent/agent - # - # dd_agent_bin: - - ## @param dd_agent_env - string - optional - default: "" - ## @env DD_PROCESS_CONFIG_DD_AGENT_ENV - string - optional - default: "" - ## Overrides of the environment we pass to fetch the hostname. - # - # dd_agent_env: "" - - ## @param scrub_args - boolean - optional - default: true - ## @env DD_PROCESS_CONFIG_SCRUB_ARGS - boolean - optional - default: true - ## Hide sensitive data on the Live Processes page. - # - # scrub_args: true - - ## @param custom_sensitive_words - list of strings - optional - ## @env DD_PROCESS_CONFIG_CUSTOM_SENSITIVE_WORDS - space separated list of strings - optional - ## Define your own list of sensitive data to be merged with the default one. - ## Read more on Datadog documentation: - ## https://docs.datadoghq.com/graphing/infrastructure/process/#process-arguments-scrubbing - # - # custom_sensitive_words: - # - 'personal_key' - # - '*token' - # - 'sql*' - # - '*pass*d*' - - ## @param disable_realtime_checks - boolean - optional - default: false - ## @env DD_PROCESS_CONFIG_DISABLE_REALTIME - boolean - optional - default: false - ## Disable realtime process and container checks - # - # disable_realtime_checks: false - -{{- if .InternalProfiling -}} - ## @param profiling - custom object - optional - ## Enter specific configurations for internal profiling. - ## - ## Please note that: - ## 1. This does *not* enable profiling for user applications. - ## 2. This only enables internal profiling of the agent go runtime. - ## 3. To enable profiling for user apps please refer to - ## https://docs.datadoghq.com/tracing/profiling/ - ## 4. Enabling this feature will incur in billing charges and other - ## unexpected side-effects (ie. agent profiles showing with your - ## services). - ## - ## Uncomment this parameter and the one below to enable profiling. - # - # internal_profiling: - # - ## @param enabled - boolean - optional - default: false - ## @env DD_INTERNAL_PROFILING_ENABLED - boolean - optional - default: false - ## Enable internal profiling for the Process Agent process. - # - # enabled: false - -{{ end }} - -{{- if .NetworkPath }} -{{- if (ne .OS "darwin")}} - -######################################## -## Network Path Configuration ## -######################################## - -# network_path: - ## @param connections_monitoring - custom object - optional - ## Specific configurations for monitoring network connections via Network Path. - # - # connections_monitoring: - - ## @param enabled - bool - optional - default: false - ## @env DD_NETWORK_PATH_CONNECTIONS_MONITORING_ENABLED - bool - optional - default: false - ## [Beta] Enables monitoring network connections via Network Path. - # - # enabled: false - - ## @param collector - custom object - optional - ## Configuration related to Network Path Collector. - # - # collector: - - ## @param workers - integer - optional - default: 4 - ## @env DD_WORKERS - integer - optional - default: 4 - ## The `workers` refers to the number of concurrent workers available for network path execution. - # - # workers: 4 - -{{ end -}} -{{ end -}} -{{ end -}} -{{- if .Compliance }} -############################################# -## Security Agent Compliance Configuration ## -############################################# - -## @param compliance_config - custom object - optional -## Enter specific configuration for continuous compliance checks. -# compliance_config: - - ## @param enabled - boolean - optional - default: false - ## @env DD_COMPLIANCE_CONFIG_ENABLED - boolean - optional - default: false - ## Set to true to enable Cloud Security Posture Management (CSPM). - # - # enabled: false - - ## @param dir - string - optional - default: /etc/datadog-agent/compliance.d - ## @env DD_COMPLIANCE_CONFIG_DIR - string - optional - default: /etc/datadog-agent/compliance.d - ## Directory path for compliance checks configuration containing enabled benchmarks - # - # dir: /etc/datadog-agent/compliance.d - - ## @param check_interval - duration - optional - default: 20m - ## @env DD_COMPLIANCE_CONFIG_CHECK_INTERVAL - duration - optional - default: 20m - ## Check interval (see https://golang.org/pkg/time/#ParseDuration for available options) - # check_interval: 20m - - ## @param check_max_events_per_run - integer - optional - default: 100 - ## @env DD_COMPLIANCE_CONFIG_CHECK_MAX_EVENTS_PER_RUN - integer - optional - default: 100 - ## - # check_max_events_per_run: 100 -{{ end -}} - -{{- if .SBOM }} -## @param sbom - custom object - optional -## Enter specific configuration for the Cloud Security Management Vulnerability Management feature -# sbom: - ## @param enabled - boolean - optional - default: false - ## set to true to enable Cloud Security Management Vulnerability Management - # enabled: false - - ## uncomment the sections below to enable where the vulnerability scanning is done - - ## @param enabled - boolean - optional - default: false - ## set to true to enable Infrastructure Vulnerabiltilies - # host: - # enabled: false -{{- if (eq .OS "linux")}} - - - # container_image: - # enabled: false -{{ end -}} -{{ end -}} -{{- if .SystemProbe }} - -################################## -## System Probe Configuration ## -################################## - -## @param system_probe_config - custom object - optional -## Enter specific configurations for your System Probe data collection. -## Uncomment this parameter and the one below to enable them. -# -# system_probe_config: -{{- if (eq .OS "windows")}} - ## @param sysprobe_socket - string - optional - default: localhost:3333 - ## @env DD_SYSTEM_PROBE_CONFIG_SYSPROBE_SOCKET - string - optional - default: localhost:3333 - ## The TCP address where system probes are accessed. - # - # sysprobe_socket: localhost:3333 -{{else}} - ## @param sysprobe_socket - string - optional - default: /opt/datadog-agent/run/sysprobe.sock - ## @env DD_SYSTEM_PROBE_CONFIG_SYSPROBE_SOCKET - string - optional - default: /opt/datadog-agent/run/sysprobe.sock - ## The full path to the location of the unix socket where system probes are accessed. - # - # sysprobe_socket: /opt/datadog-agent/run/sysprobe.sock -{{ end }} - ## @param log_file - string - optional - default: /var/log/datadog/system-probe.log - ## @env DD_SYSTEM_PROBE_CONFIG_LOG_FILE - string - optional - default: /var/log/datadog/system-probe.log - ## The full path to the file where system-probe logs are written. - # - # log_file: /var/log/datadog/system-probe.log - - ## @param langauge_detection - custom object - optional - ## Enter specific configurations for language detection - ## Uncomment this parameter and the one below to enable them. - # - # language_detection: - - ## @param enabled - bool - optional - default: false - ## @env DD_SYSTEM_PROBE_CONFIG_LANGUAGE_DETECTION_ENABLED - bool - optional - default: false - ## [Beta] Enables language detection via binary analysis in the system probe. - # - # enabled: false - - ## @param health_port - integer - optional - default: 0 - ## @env DD_SYSTEM_PROBE_HEALTH_PORT - integer - optional - default: 0 - ## The Agent can expose its health check on a dedicated HTTP port. - ## This is useful for orchestrators that support HTTP probes. - ## Default is 0 (disabled). Set a valid port number (example: 5558) to enable. - # - # health_port: 0 - -{{- if .InternalProfiling -}} - ## @param profiling - custom object - optional - ## Enter specific configurations for internal profiling. - ## - ## Please note that: - ## 1. This does *not* enable profiling for user applications. - ## 2. This only enables internal profiling of the agent go runtime. - ## 3. To enable profiling for user apps please refer to - ## https://docs.datadoghq.com/tracing/profiling/ - ## 4. Enabling this feature will incur in billing charges and other - ## unexpected side-effects (ie. agent profiles showing with your - ## services). - ## - ## Uncomment this parameter and the one below to enable profiling. - # - # internal_profiling: - # - ## @param enabled - boolean - optional - default: false - ## @env DD_INTERNAL_PROFILING_ENABLED - boolean - optional - default: false - ## Enable internal profiling for the System Probe process. - # - # enabled: false - - ## @param memory_controller - custom object - optional - ## Cgroup memory controller for internal memory profiling. - ## - ## memory_controller: - # - ## @param enabled - boolean - optional - default: false - ## Enable cgroup memory controller. - # - # enabled: false - # - ## @param thresholds - map of strings - optional - ## Thresholds and the respective active actions to trigger when - ## memory usage is above the specified threshold. - ## Threshold can be either an absolute value - such as 500MB or 2GB - - ## or a percentage of the cgroup allocated memory such as 50%. - ## The action can be: - ## - gc: to trigger the Go garbage collector - ## - profile: to generate a system-probe memory profile in /tmp - ## - log: to simply log that the threshold was reached - # - # thresholds: - # 500MB: gc - # 50%: profile - - ## @param pressure_levels - map of strings - optional - ## Pressure levels and the respective active actions to trigger when - ## memory usage reaches the specified level. - ## The pressure level is 'low', 'medium' or 'critical'. - ## The actions are the same for thresholds (see above). - # - # pressure_levels: - # medium: gc -{{ end }} - -{{- if .NetworkModule }} - -######################################## -## System Probe Network Configuration ## -######################################## - -# network_config: -{{- if (eq .OS "windows")}} - ## Please note that enabling the Network Module of the System - ## Probe will result in a kernel driver being loaded. -{{ end }} - ## @param enabled - boolean - optional - default: false - ## Set to true to enable the Network Module of the System Probe - # - # enabled: false - -{{ end -}} - -{{- if .UniversalServiceMonitoringModule }} - -############################################################# -## System Probe Universal Service monitoring Configuration ## -############################################################# - -# service_monitoring_config: -{{- if (eq .OS "windows")}} - ## Please note that enabling the Universal Service Monitoring - ## Module of the System Probe will result in a kernel driver - ## being loaded. -{{ end }} - ## @param enabled - boolean - optional - default: false - ## Set to true to enable the Universal Service Monitoring Module of the System Probe - # - # enabled: false - -{{ end -}} - -{{- if .PingModule }} - -##################################### -## System Probe Ping Configuration ## -##################################### - -# ping: - ## @param enabled - boolean - optional - default: false - ## Set to true to enable the Ping Module of the System Probe - # - # enabled: false - -{{ end -}} - - -{{- if .TracerouteModule }} - -########################################### -## System Probe Traceroute Configuration ## -########################################### - -# traceroute: - ## @param enabled - boolean - optional - default: false - ## Set to true to enable the Traceroute Module of the System Probe - # - # enabled: false - -{{ end -}} - - -{{- if .SecurityModule }} - -########################################## -## Security Agent Runtime Configuration ## -## ## -## Settings to sent logs to Datadog are ## -## fetched from section `logs_config` ## -########################################## - -# runtime_security_config: - ## @param enabled - boolean - optional - default: false - ## @env DD_RUNTIME_SECURITY_CONFIG_ENABLED - boolean - optional - default: false - ## Set to true to enable Cloud Workload Security (CWS). - # - # enabled: false - - ## @param fim_enabled - boolean - optional - default: false - ## Set to true to enable the File Integrity Monitoring (FIM) feature of Cloud Workload Security (CWS). - # - # fim_enabled: false - -{{- if (eq .OS "windows")}} - ## @param sysprobe_socket - string - optional - default: localhost:3334 - ## @env DD_SYSTEM_PROBE_CONFIG_SYSPROBE_SOCKET - string - optional - default: localhost:3334 - ## The TCP address where the security runtime module is accessed. - # - # socket: localhost:3334 -{{else}} - ## @param socket - string - optional - default: /opt/datadog-agent/run/runtime-security.sock - ## @env DD_RUNTIME_SECURITY_CONFIG_SOCKET - string - optional - default: /opt/datadog-agent/run/runtime-security.sock - ## The full path to the location of the unix socket where security runtime module is accessed. - # - # socket: /opt/datadog-agent/run/runtime-security.sock -{{ end }} - ## @param policies - custom object - optional - ## Policy files - # policies: -{{- if (eq .OS "windows")}} - ## @param dir - string - default: %ProgramData%\Datadog\runtime-security.d - ## @env DD_RUNTIME_SECURITY_CONFIG_POLICIES_DIR - string - default: /etc/datadog-agent/runtime-security.d - ## Path from where the policy files are loaded - # - # dir: c:\ProgramData\Datadog\runtime-security.d -{{else}} - ## @param dir - string - default: /etc/datadog-agent/runtime-security.d - ## @env DD_RUNTIME_SECURITY_CONFIG_POLICIES_DIR - string - default: /etc/datadog-agent/runtime-security.d - ## Path from where the policy files will be loaded - # - # dir: /etc/datadog-agent/runtime-security.d -{{ end }} - ## @param syscall_monitor - custom object - optional - ## Syscall monitoring - # - # syscall_monitor: - - ## @param enabled - boolean - optional - default: false - ## @env DD_RUNTIME_SECURITY_CONFIG_SYSCALL_MONITOR_ENABLED - boolean - optional - default: false - ## Set to true to enable the Syscall monitoring (recommended for troubleshooting only). - # - # enabled: false - - ## @param custom_sensitive_words - list of strings - optional - ## @env DD_RUNTIME_SECURITY_CONFIG_CUSTOM_SENSITIVE_WORDS - space separated list of strings - optional - ## Define your own list of sensitive data to be merged with the default one. - ## Read more on Datadog documentation: - ## https://docs.datadoghq.com/graphing/infrastructure/process/#process-arguments-scrubbing - # - # custom_sensitive_words: - # - 'personal_key' - # - '*token' - # - 'sql*' - # - '*pass*d*' - - ## @param envs_with_value - list of strings - optional - ## @env DD_RUNTIME_SECURITY_CONFIG_ENVS_WITH_VALUE - space separated list of strings - optional - ## Define your own list of non-sensitive environment variable names whose value will not be - ## concealed by the runtime security module. - ## Default: LD_PRELOAD, LD_LIBRARY_PATH, PATH, HISTSIZE, HISTFILESIZE, GLIBC_TUNABLES - # - # envs_with_value: - # - LD_PRELOAD - # - LD_LIBRARY_PATH - # - PATH - # - HISTSIZE - # - HISTFILESIZE - - ## @param activity_dump - custom object - optional - ## Activity dump section configures if/how the Agent sends activity dumps to Datadog - # - # activity_dump: - - ## @param enabled - boolean - optional - default: false - ## @env DD_RUNTIME_SECURITY_CONFIG_ACTIVITY_DUMP_ENABLED - boolean - optional - default: false - ## Set to true to activate the security profiles feature. - # - # enabled: false - - ## @param traced_cgroups_count - integer - optional - default: 5 - ## @env DD_RUNTIME_SECURITY_CONFIG_ACTIVITY_DUMP_TRACED_CGROUPS_COUNT - integer - optional - default: 5 - ## Defines the number of concurrent cgroups to be traced. - # - # traced_cgroups_count: 5 - - ## @param dump_duration - duration - optional - default: 30m - ## @env DD_RUNTIME_SECURITY_CONFIG_ACTIVITY_DUMP_DUMP_DURATION - duration - optional - default: 30m - ## Defines the duration of cgroups learning phase. Minimum value is 10m. - # - # dump_duration: 30m - - ## @param network - custom object - optional - ## Network section is used to configure Cloud Workload Security (CWS) network features. - # - # network: - - ## @param enabled - boolean - optional - default: true - ## @env DD_RUNTIME_SECURITY_CONFIG_NETWORK_ENABLED - boolean - optional - default: true - ## Set to true to activate the CWS network detections. - # - # enabled: true - -{{- if (eq .OS "windows")}} - -##################################################### -## Datadog Agent Windows Crash Detection module -##################################################### - -# windows_crash_detection: - ## @param enabled - boolean - optional - default: false - ## Enables the system probe module which supports the Windows crash detection check. - # - # enabled: false -{{ end }} - -{{ end -}} -{{ end -}} - -{{- if .SecurityAgent -}} -#################################### -## Runtime Security configuration ## -#################################### - -# runtime_security_config: - ## @param enabled - boolean - optional - default: false - ## Set to true to enable Cloud Workload Security (CWS). - # - # enabled: false - -{{- if (eq .OS "windows")}} - ## @param socket - string - optional - default: localhost:3334 - ## The local address and port where the security runtime module is accessed - # - # socket: localhost:3334 -{{else}} - ## @param socket - string - optional - default: /opt/datadog-agent/run/runtime-security.sock - ## The full path to the location of the unix socket where security runtime module is accessed. - # - # socket: /opt/datadog-agent/run/runtime-security.sock -{{ end }} - -########################################## -## Compliance monitoring configuration ## -########################################## - -# compliance_config: - ## @param enabled - boolean - optional - default: false - ## Set to true to enable Cloud Security Posture Management (CSPM). - # - # enabled: false -{{ end -}} -{{- if .Dogstatsd }} - -############################# -## DogStatsD Configuration ## -############################# - -## @param use_dogstatsd - boolean - optional - default: true -## @env DD_USE_DOGSTATSD - boolean - optional - default: true -## Set this option to false to disable the Agent DogStatsD server. -# -# use_dogstatsd: true - -## @param dogstatsd_port - integer - optional - default: 8125 -## @env DD_DOGSTATSD_PORT - integer - optional - default: 8125 -## Override the Agent DogStatsD port. -## Note: Make sure your client is sending to the same UDP port. -# -# dogstatsd_port: 8125 - -## @param bind_host - string - optional - default: localhost -## @env DD_BIND_HOST - string - optional - default: localhost -## The host to listen on for Dogstatsd and traces. This is ignored by APM when -## `apm_config.apm_non_local_traffic` is enabled and ignored by DogStatsD when `dogstatsd_non_local_traffic` -## is enabled. The trace-agent uses this host to send metrics to. -## The `localhost` default value is invalid in IPv6 environments where dogstatsd listens on "::1". -## To solve this problem, ensure Dogstatsd is listening on IPv4 by setting this value to "127.0.0.1". -# -# bind_host: localhost - -{{- if (eq .OS "windows")}} -## Please note that UDS receiver is not available in Windows. -#@ Enabling this setting may result in unexpected behavior. -## @param dogstatsd_socket - string - optional - default: "" -## @env DD_DOGSTATSD_SOCKET - string - optional - default: "" -## Listen for Dogstatsd metrics on a Unix Socket (*nix only). -## Set to "" to disable this feature. -# -# dogstatsd_socket: "" -{{else}} -## @param dogstatsd_socket - string - optional - default: "/var/run/datadog/dsd.socket" -## @env DD_DOGSTATSD_SOCKET - string - optional - default: "/var/run/datadog/dsd.socket" -## Listen for Dogstatsd metrics on a Unix Socket (*nix only). -## Set to "" to disable this feature. -# -# dogstatsd_socket: "/var/run/datadog/dsd.socket" -{{ end }} - -## @param dogstatsd_origin_detection - boolean - optional - default: false -## @env DD_DOGSTATSD_ORIGIN_DETECTION - boolean - optional - default: false -## When using Unix Socket, DogStatsD can tag metrics with container metadata. -## If running DogStatsD in a container, host PID mode (e.g. with --pid=host) is required. -# -# dogstatsd_origin_detection: false - -## @param dogstatsd_origin_detection_client - boolean - optional - default: false -## @env DD_DOGSTATSD_ORIGIN_DETECTION_CLIENT - boolean - optional - default: false -## Whether the Agent should use a client-provided container ID to enrich the metrics, events and service checks with container tags. -## Note: This requires using a client compatible with DogStatsD protocol version 1.2. -# -# dogstatsd_origin_detection_client: false - -## @param dogstatsd_buffer_size - integer - optional - default: 8192 -## @env DD_DOGSTATSD_BUFFER_SIZE - integer - optional - default: 8192 -## The buffer size use to receive statsd packets, in bytes. -# -# dogstatsd_buffer_size: 8192 - -## @param dogstatsd_non_local_traffic - boolean - optional - default: false -## @env DD_DOGSTATSD_NON_LOCAL_TRAFFIC - boolean - optional - default: false -## Set to true to make DogStatsD listen to non local UDP traffic. -# -# dogstatsd_non_local_traffic: false - -## @param dogstatsd_stats_enable - boolean - optional - default: false -## @env DD_DOGSTATSD_STATS_ENABLE - boolean - optional - default: false -## Publish DogStatsD's internal stats as Go expvars. -# -# dogstatsd_stats_enable: false - -## @param dogstatsd_logging_enabled - boolean - optional - default: true -## Set to true to write DogstatsD metrics received by the Agent to dogstats_stats log files. -## Requires `dogstatsd_stats_enable: true`. -# -# dogstatsd_logging_enabled: true - -## @param dogstatsd_log_file_max_size - custom - optional - default: 10MB -## Maximum size of dogstatsd log file. Use either a size (for example, 10MB) or -## provide value in bytes (for example, 10485760.) -# -# dogstatsd_log_file_max_size: 10MB - -## @param dogstatsd_queue_size - integer - optional - default: 1024 -## @env DD_DOGSTATSD_QUEUE_SIZE - integer - optional - default: 1024 -## Configure the internal queue size of the Dogstatsd server. -## Reducing the size of this queue will reduce the maximum memory usage of the -## Dogstatsd server but as a trade-off, it could increase the number of packet drops. -# -# dogstatsd_queue_size: 1024 - -## @param dogstatsd_stats_buffer - integer - optional - default: 10 -## @env DD_DOGSTATSD_STATS_BUFFER - integer - optional - default: 10 -## Set how many items should be in the DogStatsD's stats circular buffer. -# -# dogstatsd_stats_buffer: 10 - -## @param dogstatsd_stats_port - integer - optional - default: 5000 -## @env DD_DOGSTATSD_STATS_PORT - integer - optional - default: 5000 -## The port for the go_expvar server. -# -# dogstatsd_stats_port: 5000 - -## @param dogstatsd_so_rcvbuf - integer - optional - default: 0 -## @env DD_DOGSTATSD_SO_RCVBUF - integer - optional - default: 0 -## The number of bytes allocated to DogStatsD's socket receive buffer (POSIX system only). -## By default, the system sets this value. If you need to increase the size of this buffer -## but keep the OS default value the same, you can set DogStatsD's receive buffer size here. -## The maximum accepted value might change depending on the OS. -# -# dogstatsd_so_rcvbuf: 0 - -## @param dogstatsd_metrics_stats_enable - boolean - optional - default: false -## @env DD_DOGSTATSD_METRICS_STATS_ENABLE - boolean - optional - default: false -## Set this parameter to true to have DogStatsD collects basic statistics (count/last seen) -## about the metrics it processed. Use the Agent command "dogstatsd-stats" to visualize -## those statistics. -# -# dogstatsd_metrics_stats_enable: false - -## @param dogstatsd_tags - list of key:value elements - optional -## @env DD_DOGSTATSD_TAGS - list of key:value elements - optional -## Additional tags to append to all metrics, events and service checks received by -## this DogStatsD server. -# -# dogstatsd_tags: -# - : -# -## @param dogstatsd_mapper_profiles - list of custom object - optional -## @env DD_DOGSTATSD_MAPPER_PROFILES - list of custom object - optional -## The profiles will be used to convert parts of metrics names into tags. -## If a profile prefix is matched, other profiles won't be tried even if that profile matching rules doesn't match. -## The profiles and matching rules are processed in the order defined in this configuration. -## -## For each profile, following fields are available: -## name (required): profile name -## prefix (required): mapping only applies to metrics with the prefix. If set to `*`, it will match everything. -## mappings: mapping rules, see below. -## For each mapping, following fields are available: -## match (required): pattern for matching the incoming metric name e.g. `test.job.duration.*` -## match_type (optional): pattern type can be `wildcard` (default) or `regex` e.g. `test\.job\.(\w+)\.(.*)` -## name (required): the metric name the metric should be mapped to e.g. `test.job.duration` -## tags (optional): list of key:value pair of tag key and tag value -## The value can use $1, $2, etc, that will be replaced by the corresponding element capture by `match` pattern -## This alternative syntax can also be used: ${1}, ${2}, etc -# -# dogstatsd_mapper_profiles: -# - name: # e.g. "airflow", "consul", "some_database" -# prefix: # e.g. "airflow.", "consul.", "some_database." -# mappings: -# - match: # e.g. `test.job.duration.*` to match `test.job.duration.my_job_name` -# match_type: # e.g. `wildcard` or `regex` -# name: # e.g. `test.job.duration` -# tags: -# : # e.g. `job_name: "$1"`, $1 is replaced by value capture by * -# - match: 'test.worker.*.*.start_time' # to match `test.worker...start_time` -# name: 'test.worker.start_time' -# tags: -# worker_type: '$1' -# worker_name: '$2' -# - match: 'test\.task\.duration\.(\w+)\.(.*)' # no need to escape in yaml context using single quote -# match_type: regex -# name: 'test.task' -# tags: -# task_type: '$1' -# task_name: '$2' - -## @param dogstatsd_mapper_cache_size - integer - optional - default: 1000 -## @env DD_DOGSTATSD_MAPPER_CACHE_SIZE - integer - optional - default: 1000 -## Size of the cache (max number of mapping results) used by Dogstatsd mapping feature. -# -# dogstatsd_mapper_cache_size: 1000 - -## @param dogstatsd_entity_id_precedence - boolean - optional - default: false -## @env DD_DOGSTATSD_ENTITY_ID_PRECEDENCE - boolean - optional - default: false -## Disable enriching Dogstatsd metrics with tags from "origin detection" when Entity-ID is set. -# -# dogstatsd_entity_id_precedence: false - - -## @param dogstatsd_no_aggregation_pipeline - boolean - optional - default: true -## @env DD_DOGSTATSD_NO_AGGREGATION_PIPELINE - boolean - optional - default: true -## Enable the no-aggregation pipeline in DogStatsD: a pipeline receiving metrics -## with timestamp and forwarding them to the intake without extra processing except -## for tagging. -# -# dogstatsd_no_aggregation_pipeline: true - -## @param dogstatsd_no_aggregation_pipeline_batch_size - integer - optional - default: 2048 -## @env DD_DOGSTATSD_NO_AGGREGATION_PIPELINE_BATCH_SIZE - integer - optional - default: 2048 -## How many metrics maximum in payloads sent by the no-aggregation pipeline to the intake. -# -# dogstatsd_no_aggregation_pipeline_batch_size: 2048 - -## @param statsd_forward_host - string - optional - default: "" -## @env DD_STATSD_FORWARD_HOST - string - optional - default: "" -## Forward every packet received by the DogStatsD server to another statsd server. -## WARNING: Make sure that forwarded packets are regular statsd packets and not "DogStatsD" packets, -## as your other statsd server might not be able to handle them. -# -# statsd_forward_host: "" - -## @param statsd_forward_port - integer - optional - default: 0 -## @env DD_STATSD_FORWARD_PORT - integer - optional - default: 0 -## Port or the "statsd_forward_host" to forward StatsD packet to. -# -# statsd_forward_port: 0 - -## @param statsd_metric_namespace - string - optional - default: "" -## @env DD_STATSD_METRIC_NAMESPACE - string - optional - default: "" -## Set a namespace for all StatsD metrics coming from this host. -## Each metric received is prefixed with the namespace before it's sent to Datadog. -# -# statsd_metric_namespace: "" - -{{ end -}} -{{- if .Metadata }} - -## @param metadata_providers - list of custom object - optional -## @env DD_METADATA_PROVIDERS - list of custom object - optional -## Metadata providers, add or remove from the list to enable or disable collection. -## Intervals are expressed in seconds. You can also set a provider's interval to 0 -## to disable it. -# -# metadata_providers: -# - name: k8s -# interval: 60 - -{{ end -}} -{{- if .JMX }} - -####################### -## JMX Configuration ## -####################### - -## @param jmx_custom_jars - list of strings - optional -## @env DD_JMX_CUSTOM_JARS - space separated list of strings - optional -## If you only run Autodiscovery tests, jmxfetch might fail to pick up custom_jar_paths -## set in the check templates. If that is the case, force custom jars here. -# -# jmx_custom_jars: -# - /jmx-jars/jboss-cli-client.jar - -## @param jmx_use_cgroup_memory_limit - boolean - optional - default: false -## @env DD_JMX_USE_CGROUP_MEMORY_LIMIT - boolean - optional - default: false -## When running in a memory cgroup, openjdk 8u131 and higher can automatically adjust -## its heap memory usage in accordance to the cgroup/container's memory limit. -## The Agent set a Xmx of 200MB if none is configured. -## Note: OpenJDK version < 8u131 or >= 10 as well as other JVMs might fail -## to start if this option is set. -# -# jmx_use_cgroup_memory_limit: false - -## @param jmx_use_container_support - boolean - optional - default: false -## @env DD_JMX_USE_CONTAINER_SUPPORT - boolean - optional - default: false -## When running in a container, openjdk 10 and higher can automatically detect -## container specific configuration instead of querying the operating system -## to adjust resources allotted to the JVM. -## Note: openjdk versions prior to 10 and other JVMs might fail to start if -## this option is set. -# -# jmx_use_container_support: false - -## @param jmx_max_ram_percentage - float - optional - default: 25.0 -## @env DD_JMX_MAX_RAM_PERCENTAGE - float - optional - default: 25.0 -## When running in a container with jmx_use_container_support enabled, the JVM can -## automatically declare the maximum heap size based off of a percentage of -## total container allocated memory. This option is overwritten if -## you use -Xmx to manually define the size of the heap. This option applies -## to containers with a total memory limit greater than ~250mb. If -## jmx_use_container_support is disabled this option has no effect. -# -# jmx_max_ram_percentage: 25.0 - -## @param jmx_log_file - string - optional -## @env DD_JMX_LOG_FILE - string - optional -## Path of the log file where JMXFetch logs are written. -# -# jmx_log_file: - -## @param jmx_max_restarts - integer - optional - default: 3 -## @env DD_JMX_MAX_RESTARTS - integer - optional - default: 3 -## Number of JMX restarts allowed in the restart-interval before giving up. -# -# jmx_max_restarts: 3 - -## @param jmx_restart_interval - integer - optional - default: 5 -## @env DD_JMX_RESTART_INTERVAL - integer - optional - default: 5 -## Duration of the restart interval in seconds. -# -# jmx_restart_interval: 5 - -## @param jmx_check_period - integer - optional - default: 15000 -## @env DD_JMX_CHECK_PERIOD - integer - optional - default: 15000 -## Duration of the period for check collections in milliseconds. -# -# jmx_check_period: 15000 - -## @param jmx_thread_pool_size - integer - optional - default: 3 -## @env DD_JMX_THREAD_POOL_SIZE - integer - optional - default: 3 -## JMXFetch collects multiples instances concurrently. Defines the maximum level of concurrency: -## * Higher concurrency increases CPU utilization during metric collection. -## * Lower concurrency results in lower CPU usage but may increase the total collection time. -## A value of 1 processes instances serially. -# -# jmx_thread_pool_size: 3 - -## @param jmx_collection_timeout - integer - optional - default: 60 -## @env DD_JMX_COLLECTION_TIMEOUT - integer - optional - default: 60 -## Defines the maximum waiting period in seconds before timing up on metric collection. -# -# jmx_collection_timeout: 60 - -## @param jmx_reconnection_thread_pool_size - integer - optional - default: 3 -## @env DD_JMX_RECONNECTION_THREAD_POOL_SIZE - integer - optional - default: 3 -## JMXFetch reconnects to multiples instances concurrently. Defines the maximum level of concurrency: -## * Higher concurrency increases CPU utilization during reconnection. -## * Lower concurrency results in lower CPU usage but may increase the total reconnection time -## A value of 1 processes instance reconnections serially. -# -# jmx_reconnection_thread_pool_size: 3 - -## @param jmx_reconnection_timeout - integer - optional - default: 60 -## @env DD_JMX_RECONNECTION_TIMEOUT - integer - optional - default: 60 -## Determines the maximum waiting period in seconds before timing up on instance reconnection. -# -# jmx_reconnection_timeout: 60 - -## @param jmx_statsd_telemetry_enabled - boolean - optional - default: false -## @env DD_JMX_STATSD_TELEMETRY_ENABLED - boolean - optional - default: false -## Specifies whether the JMXFetch statsd client telemetry is enabled. -# -# jmx_statsd_telemetry_enabled: false - -## @param jmx_telemetry_enabled - boolean - optional - default: false -## @env DD_JMX_TELEMETRY_ENABLED - boolean - optional - default: false -## Specifies whether additional JMXFetch telemetry is enabled. -# -# jmx_telemetry_enabled: false - -{{ end -}} -{{- if .Logging }} - -########################### -## Logging Configuration ## -########################### - -## @param log_level - string - optional - default: info -## @env DD_LOG_LEVEL - string - optional - default: info -## Minimum log level of the Datadog Agent. -## Valid log levels are: trace, debug, info, warn, error, critical, and off. -## Note: When using the 'off' log level, quotes are mandatory. -# -# log_level: 'info' - -## @param log_file - string - optional -## @env DD_LOG_FILE - string - optional -## Path of the log file for the Datadog Agent. -## See https://docs.datadoghq.com/agent/guide/agent-log-files/ -# -# log_file: - -## @param log_format_json - boolean - optional - default: false -## @env DD_LOG_FORMAT_JSON - boolean - optional - default: false -## Set to 'true' to output Agent logs in JSON format. -# -# log_format_json: false - -## @param log_to_console - boolean - optional - default: true -## @env DD_LOG_TO_CONSOLE - boolean - optional - default: true -## Set to 'false' to disable Agent logging to stdout. -# -# log_to_console: true - -## @param disable_file_logging - boolean - optional - default: false -## @env DD_DISABLE_FILE_LOGGING - boolean - optional - default: false -## Set to 'true' to disable logging to the log file. -# -# disable_file_logging: false - -## @param log_file_max_size - custom - optional - default: 10MB -## @env DD_LOG_FILE_MAX_SIZE - custom - optional - default: 10MB -## Maximum size of one log file. Use either a size (e.g. 10MB) or -## provide value in bytes: 10485760 -# -# log_file_max_size: 10MB - -## @param log_file_max_rolls - integer - optional - default: 1 -## @env DD_LOG_FILE_MAX_ROLLS - integer - optional - default: 1 -## Maximum amount of "old" log files to keep. -## Set to 0 to not limit the number of files to create. -# -# log_file_max_rolls: 1 - -## @param log_to_syslog - boolean - optional - default: false -## @env DD_LOG_TO_SYSLOG - boolean - optional - default: false -## Set to 'true' to enable logging to syslog. -## Note: Even if this option is set to 'false', the service launcher of your environment -## may redirect the Agent process' stdout/stderr to syslog. In that case, if you wish -## to disable logging to syslog entirely, set 'log_to_console' to 'false' as well. -# -# log_to_syslog: false - -## @param syslog_uri - string - optional -## @env DD_SYSLOG_URI - string - optional -## Define a custom remote syslog uri if needed. If 'syslog_uri' is left undefined/empty, -## a local domain socket connection is attempted. -# -# syslog_uri: - -## @param syslog_rfc - boolean - optional - default: false -## @env DD_SYSLOG_RFC - boolean - optional - default: false -## Set to 'true' to output in an RFC 5424-compliant format for Agent logs. -# -# syslog_rfc: false - -## @param syslog_pem - string - optional -## @env DD_SYSLOG_PEM - string - optional -## If TLS enabled, you must specify a path to a PEM certificate here. -# -# syslog_pem: - -## @param syslog_key - string - optional -## @env DD_SYSLOG_KEY - string - optional -## If TLS enabled, you must specify a path to a private key here. -# -# syslog_key: - -## @param syslog_tls_verify - boolean - optional - default: true -## @env DD_SYSLOG_TLS_VERIFY - boolean - optional - default: true -## If TLS enabled, you may enforce TLS verification here. -# -# syslog_tls_verify: true - -## @param log_format_rfc3339 - boolean - optional - default false -## @env DD_LOG_FORMAT_RFC3339 - boolean - optional - default false -## If enabled the Agent will log using the RFC3339 format for the log time. -# -# log_format_rfc3339: false - -## @param log_all_goroutines_when_unhealthy - boolean - optional - default false -## @env DD_LOG_ALL_GOROUTINES_WHEN_UNHEALTHY - boolean - optional - default false -## If enabled, when the health probe of an internal component fails, the stack traces -## of all the goroutines are logged. -# -# log_all_goroutines_when_unhealthy: false - -{{ end -}} -{{- if .Autoconfig }} - -############################## -## Autoconfig Configuration ## -############################## - -## @param autoconf_template_dir - string - optional - default: /datadog/check_configs -## @env DD_AUTOCONF_TEMPLATE_DIR - string - optional - default: /datadog/check_configs -## Directory containing configuration templates for Autoconfig. -# -# autoconf_template_dir: /datadog/check_configs - -## @param autoconf_config_files_poll - boolean - optional - default: false -## @env DD_AUTOCONF_CONFIG_FILES_POLL - boolean - optional - default: false -## Should the we check for new/updated integration configuration files on disk. -## WARNING: Only files containing checks configuration are supported (logs configuration are not supported). -# -# autoconf_config_files_poll: false - -## @param autoconf_config_files_poll_interval - integer - optional - default: 60 -## @env DD_AUTOCONF_CONFIG_FILES_POLL_INTERVAL - integer - optional - default: 60 -## How frequently should the Agent check for new/updated integration configuration files (in seconds). -## This value must be >= 1 (i.e. 1 second). -## WARNING: Only files containing checks configuration are supported (logs configuration are not supported). -# -# autoconf_config_files_poll_interval: 60 - -## @param config_providers - List of custom object - optional -## @env DD_CONFIG_PROVIDERS - List of custom object - optional -## The providers the Agent should call to collect checks configurations. Available providers are: -## * kubelet - The kubelet provider handles templates embedded in pod annotations. -## * docker - The Docker provider handles templates embedded in container labels. -## * clusterchecks - The clustercheck provider retrieves cluster-level check configurations from the cluster-agent. -## * kube_services - The kube_services provider watches Kubernetes services for cluster-checks -## -## See https://docs.datadoghq.com/guides/autodiscovery/ to learn more -# -# config_providers: -# - name: kubelet -# polling: true -# - name: docker -# polling: true -# - name: clusterchecks -# grace_time_seconds: 60 -{{ if .ClusterChecks }} -# - name: kube_services -# polling: true -{{ end -}} -# - name: etcd -# polling: true -# template_dir: /datadog/check_configs -# template_url: http://127.0.0.1 -# username: -# password: -# - name: consul -# polling: true -# template_dir: datadog/check_configs -# template_url: http://127.0.0.1 -# ca_file: -# ca_path: -# cert_file: -# key_file: -# username: -# password: -# token: -# - name: zookeeper -# polling: true -# template_dir: /datadog/check_configs -# template_url: 127.0.0.1 -# username: -# password: - -## @param extra_config_providers - list of strings - optional -## @env DD_EXTRA_CONFIG_PROVIDERS - space separated list of strings - optional -## Add additional config providers by name using their default settings, and pooling enabled. -## This list is available as an environment variable binding. -# -# extra_config_providers: -# - clusterchecks - -## @param autoconfig_exclude_features - list of comma separated strings - optional -## @env DD_AUTOCONFIG_EXCLUDE_FEATURES - list of space separated strings - optional -## Exclude features automatically detected and enabled by environment autodiscovery. -## Supported syntax is a list of `(:)`. Currently only the `name` attribute is supported. -## When no attribute is present, it defaults to `name:` attribute. -# -# autoconfig_exclude_features: -# - cloudfoundry -# - containerd -# - cri -# - docker -# - ecsec2 -# - ecsfargate -# - eksfargate -# - kubernetes -# - orchestratorexplorer -# - podman - -## @param autoconfig_include_features - list of comma separated strings - optional -## @env DD_AUTOCONFIG_INCLUDE_FEATURES - list of space separated strings - optional -## Force activation of features (as if they were discovered by environment autodiscovery). -# -# autoconfig_include_features: -# - cloudfoundry -# - containerd -# - cri -# - docker -# - ecsec2 -# - ecsfargate -# - eksfargate -# - kubernetes -# - orchestratorexplorer -# - podman - -{{ end -}} -{{- if .Autodiscovery }} - -########################################### -## Container Autodiscovery Configuration ## -########################################### - -## @param container_cgroup_root - string - optional - default: /host/sys/fs/cgroup/ -## @env DD_CONTAINER_CGROUP_ROOT - string - optional - default: /host/sys/fs/cgroup/ -## Change the root directory to look at to get cgroup statistics. -## Default if environment variable "DOCKER_DD_AGENT" is set to "/host/sys/fs/cgroup" -## and "/sys/fs/cgroup" if not. -# -# container_cgroup_root: /host/sys/fs/cgroup/ - -## @param container_proc_root - string - optional - default: /host/proc -## @env DD_CONTAINER_PROC_ROOT - string - optional - default: /host/proc -## Change the root directory to look at to get proc statistics. -## Default if environment variable "DOCKER_DD_AGENT" is set "/host/proc" and "/proc" if not. -# -# container_proc_root: /host/proc - -## @param listeners - list of key:value elements - optional -## @env DD_LISTENERS - list of key:value elements - optional -## Choose "auto" if you want to let the Agent find any relevant listener on your host -## At the moment, the only auto listener supported is Docker -## If you have already set Docker anywhere in the listeners, the auto listener is ignored -# -# listeners: -# - name: auto -# - name: docker - -## @param extra_listeners - list of strings - optional -## @env DD_EXTRA_LISTENERS - space separated list of strings - optional -## You can also add additional listeners by name using their default settings. -## This list is available as an environment variable binding. -# -# extra_listeners: -# - kubelet - -## @param ac_exclude - list of comma separated strings - optional -## @env DD_AC_EXCLUDE - list of space separated strings - optional -## Exclude containers from metrics and AD based on their name or image. -## If a container matches an exclude rule, it won't be included unless it first matches an include rule. -## An excluded container won't get any individual container metric reported for it. -## See: https://docs.datadoghq.com/agent/guide/autodiscovery-management/ -# -# ac_exclude: [] - -## @param ac_include - list of comma separated strings - optional -## @env DD_AC_INCLUDE - list of space separated strings - optional -## Include containers from metrics and AD based on their name or image: -## See: https://docs.datadoghq.com/agent/guide/autodiscovery-management/ -# -# ac_include: [] - -## @param exclude_pause_container - boolean - optional - default: true -## @env DD_EXCLUDE_PAUSE_CONTAINER - boolean - optional - default: true -## Exclude default pause containers from orchestrators. -## By default the Agent doesn't monitor kubernetes/openshift pause container. -## They are still counted in the container count (just like excluded containers). -# -# exclude_pause_container: true - -## @param docker_query_timeout - integer - optional - default: 5 -## @env DD_DOCKER_QUERY_TIMEOUT - integer - optional - default: 5 -## Set the default timeout value when connecting to the Docker daemon. -# -# docker_query_timeout: 5 - -## @param ad_config_poll_interval - integer - optional - default: 10 -## @env DD_AD_CONFIG_POLL_INTERVAL - integer - optional - default: 10 -## The default interval in second to check for new autodiscovery configurations -## on all registered configuration providers. -# -# ad_config_poll_interval: 10 - -## @param cloud_foundry_garden - custom object - optional -## Settings for Cloudfoundry application container autodiscovery. -# -# cloud_foundry_garden: - - ## @param listen_network - string - optional - default: unix - ## @env DD_CLOUD_FOUNDRY_GARDEN_LISTEN_NETWORK - string - optional - default: unix - ## The network on which the garden API is listening. Possible values are `unix` or `tcp` - # - # listen_network: unix - - ## @param listen_address - string - optional - default: /var/vcap/data/garden/garden.sock - ## @env DD_CLOUD_FOUNDRY_GARDEN_LISTEN_ADDRESS - string - optional - default: /var/vcap/data/garden/garden.sock - ## The address on which the garden API is listening. - # - # listen_address: /var/vcap/data/garden/garden.sock - -## @param podman_db_path - string - optional - default: "" -## @env DD_PODMAN_DB_PATH - string - optional - default: "" -## Settings for Podman DB that Datadog Agent collects container metrics. -# -# podman_db_path: "" - -{{ end -}} -{{- if .ClusterAgent }} - -################################# -## Cluster Agent Configuration ## -################################# - -## @param cluster_agent - custom object - optional -## Settings for the Cluster Agent. -## See https://docs.datadoghq.com/agent/cluster_agent/ -# -# cluster_agent: - - ## @param enabled - boolean - optional - default: false - ## Set to true to enable the Cluster Agent. - # - # enabled: false - - ## @param auth_token - string - optional - default: "" - ## Auth token used to make requests to the Kubernetes API server. - # - # auth_token: "" - - ## @param url - string - optional - default: "" - ## The Cluster Agent endpoint. There's no need to set it if "kubernetes_service_name" is set. - # - # url: "" - - ## @param kubernetes_service_name - string - optional - default: "datadog-cluster-agent" - ## Name of the Kubernetes service for the Cluster Agent. - # - # kubernetes_service_name: "datadog-cluster-agent" - - ## @param max_leader_connections - integer - optional - default: 100 - ## Maximum number of connections between a follower and a leader. - # - # max_leader_connections: 100 - - ## @param client_reconnect_period_seconds - integer - optional - default: 1200 - ## Set the refersh period for Agent to Cluster Agent connection (new connection is created, old connection is closed). - ## Set to 0 to disable periodic reconnection. - # - # client_reconnect_period_seconds: 1200 - - ## @param tagging_fallback - boolean - optional - default: false - ## Set to true to enabled fallback to local metamapper when the connection with the Cluster Agent fails. - # - # tagging_fallback: false - - ## @param server - custom object - optional - ## Sets the connection timeouts - # - # server: - - ## @param read_timeout_seconds - integer - optional - default: 2 - ## Read timeout in seconds. - # - # read_timeout_seconds: 2 - - ## @param write_timeout_seconds - integer - optional - default: 2 - ## Write timeout in seconds. - # - # write_timeout_seconds: 2 - - ## @param idle_timeout_seconds - integer - optional - default: 60 - ## Idle timeout in seconds. - # - # idle_timeout_seconds: 60 - -{{ end -}} -{{- if .ClusterChecks }} - -################################# -## Cluster check Configuration ## -################################# - -## @param cluster_checks - custom object - optional -## Enter specific configurations for your cluster check. -## The cluster-agent is able to autodiscover cluster resources and dispatch checks on -## the node-agents (provided the clustercheck config provider is enabled on them). -## Uncomment this parameter and the one below to enable them. -## See https://docs.datadoghq.com/agent/kubernetes/cluster/ -# -# cluster_checks: - - ## @param enabled - boolean - optional - default: false - ## @env DD_CLUSTER_CHECKS_ENABLED - boolean - optional - default: false - ## Set to true to enable the dispatching logic on the leader cluster-agent. - # - # enabled: false - - ## @param node_expiration_timeout - integer - optional - default: 30 - ## @env DD_CLUSTER_CHECKS_NODE_EXPIRATION_TIMEOUT - integer - optional - default: 30 - ## Set "node_expiration_timeout" time in second after which Node-agents that have not - ## queried the cluster-agent are deleted, and their checks re-dispatched to other nodes. - # - # node_expiration_timeout: 30 - - ## @param warmup_duration - integer - optional - default: 30 - ## @env DD_CLUSTER_CHECKS_WARMUP_DURATION - integer - optional - default: 30 - ## Set the "warmup_duration" duration in second for the cluster-agent to wait for all - ## node-agents to report to it before dispatching configurations. - # - # warmup_duration: 30 - - ## @param cluster_tag_name - string - optional - default: cluster_name - ## @env DD_CLUSTER_CHECKS_CLUSTER_TAG_NAME - string - optional - default: cluster_name - ## If a cluster_name value is set or autodetected, a "" tag is added - ## to all cluster-check configurations sent to the node-agents. - ## Set a custom tag name here, or disable it by setting an empty name. - # - # cluster_tag_name: cluster_name - - ## @param extra_tags - list of key:value elements - optional - ## @env DD_CLUSTER_CHECKS_EXTRA_TAGS - list of key:value elements - optional - ## Set a list of additionnal tags can to be added to every cluster-check configuration. - # - # extra_tags: - # - : - - ## @param advanced_dispatching_enabled - boolean - optional - default: false - ## @env DD_CLUSTER_CHECKS_ADVANCED_DISPATCHING_ENABLED - boolean - optional - default: false - ## If advanced_dispatching_enabled is true the leader cluster-agent collects stats - ## from the cluster level check runners to optimize the check dispatching logic. - # - # advanced_dispatching_enabled: false - - ## @param clc_runners_port - integer - optional - default: 5005 - ## @env DD_CLUSTER_CHECKS_CLC_RUNNERS_PORT - integer - optional - default: 5005 - ## Set the "clc_runners_port" used by the cluster-agent client to reach cluster level - ## check runners and collect their stats. - # - # clc_runners_port: 5005 - -{{ end -}} -{{- if .AdmissionController }} - -######################################## -## Admission controller Configuration ## -######################################## - -## @param admission_controller - custom object - optional -## Enter specific configurations for your admission controller. -## The Datadog admission controller is a component of the Datadog Cluster Agent. -## It has two main functionalities: -## Inject environment variables (DD_AGENT_HOST and DD_ENTITY_ID) to configure DogStatsD and APM tracer libraries into your application containers. -## Inject Datadog reserved tags (env, service, version) from application labels into the container environment variables. -## Uncomment this parameter and the one below to enable it. -## See https://docs.datadoghq.com/agent/cluster_agent/admission_controller/ -# -# admission_controller: - - ## @param enabled - boolean - optional - default: false - ## @env DD_ADMISSION_CONTROLLER_ENABLED - boolean - optional - default: false - ## Set to true to enable the admission controller in the cluster-agent. - # - # enabled: false - - ## @param validation - custom object - optional - ## The admission controller's validation configuration. - # - # validation: - - ## @param enabled - boolean - optional - default: true - ## @env DD_ADMISSION_CONTROLLER_VALIDATION_ENABLED - boolean - optional - default: true - ## Set to true to enable validation webhooks controller in the cluster-agent. - # - # enabled: true - - ## @param mutation - custom object - optional - ## The admission controller's mutation configuration. - # - # mutation: - - ## @param enabled - boolean - optional - default: true - ## @env DD_ADMISSION_CONTROLLER_MUTATION_ENABLED - boolean - optional - default: true - ## Set to true to enable mutation webhooks controller in the cluster-agent. - # - # enabled: true - - ## @param mutate_unlabelled - boolean - optional - default: false - ## @env DD_ADMISSION_CONTROLLER_MUTATE_ENABLED - boolean - optional - default: false - ## Enable injecting config without having the pod label admission.datadoghq.com/enabled="true". - # - # mutate_unlabelled: false - - ## @param port - integer - optional - default: 8000 - ## @env DD_ADMISSION_CONTROLLER_PORT - integer - optional - default: 8000 - ## The admission controller server port. - # - # port: 8000 - - ## @param timeout_seconds - integer - optional - default: 10 - ## @env DD_ADMISSION_CONTROLLER_TIMEOUT_SECONDS - integer - optional - default: 10 - ## The admission controller server timeout in seconds. - # - # timeout_seconds: 10 - - ## @param service_name - string - optional - default: datadog-admission-controller - ## @env DD_ADMISSION_CONTROLLER_SERVICE_NAME - string - optional - default: datadog-admission-controller - ## The name of the Kubernetes service that exposes the admission controller. - # - # service_name: datadog-admission-controller - - ## @param webhook_name - string - optional - default: datadog-webhook - ## @env DD_ADMISSION_CONTROLLER_WEBHOOK_NAME - string - optional - default: datadog-webhook - ## The name of the Kubernetes webhook object. - # - # webhook_name: datadog-webhook - - ## @param pod_owners_cache_validity - integer - optional - default: 10 - ## @env DD_ADMISSION_CONTROLLER_POD_OWNERS_CACHE_VALIDITY - integer - optional - default: pod_owners_cache_validity - ## The in-memory cache TTL for pod owners in minutes. - # - # pod_owners_cache_validity: 10 - - ## @param namespace_selector_fallback - boolean - optional - default: false - ## @env DD_ADMISSION_CONTROLLER_NAMESPACE_SELECTOR_FALLBACK - boolean - optional - default: false - ## Use namespace selectors instead of object selectors to watch objects. - ## For Kubernetes versions from 1.10 to 1.14 (inclusive) - # - # namespace_selector_fallback: false - - ## @param certificate - custom object - optional - ## The webhook's certificate configuration. - # - # certificate: - - ## @param validity_bound - integer - optional - default: 8760 - ## @env DD_ADMISSION_CONTROLLER_CERTIFICATE_VALIDITY_BOUND - integer - optional - default: 8760 - ## The certificate's validity bound in hours, default 1 year (365*24). - # - # validity_bound: 8760 - - ## @param expiration_threshold - integer - optional - default: 720 - ## @env DD_ADMISSION_CONTROLLER_CERTIFICATE_EXPIRATION_THRESHOLD - integer - optional - default: 720 - ## The certificate's refresh threshold in hours, default 1 month (30*24). - # - # expiration_threshold: 720 - - ## @param secret_name - string - optional - default: webhook-certificate - ## @env DD_ADMISSION_CONTROLLER_CERTIFICATE_SECRET_NAME - string - optional - default: webhook-certificate - ## Name of the Secret object containing the webhook certificate. - # - # secret_name: webhook-certificate - - ## @param inject_config - custom object - optional - ## Configuration injection parameters. - # - # inject_config: - - ## @param enabled - boolean - optional - default: true - ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_ENABLED - boolean - optional - default: true - ## Enable configuration injection (configure DogStatsD and APM tracer libraries). - # - # enabled: true - - ## @param endpoint - string - optional - default: /injectconfig - ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_ENDPOINT - string - optional - default: /injectconfig - ## Admission controller's endpoint responsible for handling configuration injection requests. - # - # endpoint: /injectconfig - - ## @param mode - string - optional - default: hostip - ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_MODE - string - optional - default: hostip - ## The kind of configuration to be injected, it can be "hostip", "service", or "socket". - # - # mode: hostip - - ## @param local_service_name - string - optional - default: datadog - ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_LOCAL_SERVICE_NAME - string - optional - default: datadog - ## Configure the local service name that exposes the Datadog Agent. Only applicable in "service" mode. - # - # local_service_name: datadog - - ## @param socket_path - string - optional - default: /var/run/datadog - ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_SOCKET_PATH - string - optional - default: /var/run/datadog - ## Configure Datadog Agent's socket path. Only applicable in "socket" mode. - # - # socket_path: /var/run/datadog - - ## @param trace_agent_socket - string - optional - default: unix:///var/run/datadog/apm.socket - ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_TRACE_AGENT_SOCKET - string - optional - default: unix:///var/run/datadog/apm.socket - ## Configure Trace Agent's socket path in the app container (DD_TRACE_AGENT_URL). - ## Only applicable in "socket" mode. - # - # trace_agent_socket: unix:///var/run/datadog/apm.socket - - ## @param type_socket_volumes - boolean - optional - default: false - ## @env DD_ADMISSION_CONTROLLER_INJECT_CONFIG_TYPE_SOCKET_VOLUMES - boolean - optional - default: false - ## When enabled, injected volumes are of type "Socket". This means that - ## injected pods will not start until the Agent creates the dogstatsd and - ## trace-agent sockets. This ensures no lost traces or dogstatsd metrics but - ## can cause the pod to wait if the agent has issues creating the sockets. - # - # type_socket_volumes: false - - ## @param inject_tags - custom object - optional - ## Tags injection parameters. - # - # inject_tags: - - ## @param enabled - boolean - optional - default: true - ## @env DD_ADMISSION_CONTROLLER_INJECT_TAGS_ENABLED - boolean - optional - default: true - ## Enable standard tags injection. - # - # enabled: true - - ## @param endpoint - string - optional - default: /injecttags - ## @env DD_ADMISSION_CONTROLLER_INJECT_TAGS_ENDPOINT - string - optional - default: /injecttags - ## Admission controller's endpoint responsible for handling tags injection requests. - # - # endpoint: /injecttags - - ## @param failure_policy - string - optional - default: Ignore - ## @env DD_ADMISSION_CONTROLLER_FAILURE_POLICY - string - optional - default: Ignore - ## Set the failure policy for dynamic admission control. - ## The default of Ignore means that pods will still be admitted even if the webhook is unavailable to inject them. - ## Setting to Fail will require the admission controller to be present and pods to be injected before they are allowed to run. - # - # failure_policy: Ignore - - ## @param reinvocation_policy - string - optional - default: IfNeeded - ## @env DD_ADMISSION_CONTROLLER_REINVOCATION_POLICY - string - optional - default: IfNeeded - ## Set the reinvocation policy for dynamic admission control. - ## See https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#reinvocation-policy - # - # reinvocation_policy: IfNeeded - - ## @param add_aks_selectors - boolean - optional - default: false - ## @env DD_ADMISSION_CONTROLLER_ADD_AKS_SELECTORS - boolean - optional - default: false - ## Adds in the admission controller webhook the selectors that are required in AKS. - ## See https://docs.microsoft.com/en-us/azure/aks/faq#can-i-use-admission-controller-webhooks-on-aks - # - # add_aks_selectors: false - - ## @param auto_instrumentation - custom object - optional - ## Library injection parameters. - # - # auto_instrumentation: - - ## @param init_resources - custom object - optional - ## CPU and Memory resources of the init containers. - # - # init_resources: - - ## @param cpu - string - optional - ## @env DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_INIT_RESOURCES_CPU - string - optional - ## Configures the CPU request and limit for the init containers. - # - # cpu: - - ## @param memory - string - optional - ## @env DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_INIT_RESOURCES_MEMORY - string - optional - ## Configures the memory request and limit for the init containers. - # - # memory: - - ## @param init_security_context - json - optional - ## @env DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_INIT_SECURITY_CONTEXT - json - optional - ## Security context for the init containers in JSON format. Follows the Kubernetes security context spec, - ## https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#securitycontext-v1-core, - ## ignores unknown properties. - # - # init_security_context: '{"privileged": false}' - # - # DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_INIT_SECURITY_CONTEXT='{"privileged": false}' -{{ end -}} -{{- if .DockerTagging }} - -######################### -## Container detection ## -######################### - -## @param container_cgroup_prefix - string - optional - default: /docker/ -## @env DD_CONTAINER_CGROUP_PREFIX - string - optional - default: /docker/ -## On hosts with mixed workloads, non-containernized processes can -## mistakenly be detected as containerized. Use this parameter to -## tune the detection logic to your system and avoid false-positives. -# -# container_cgroup_prefix: "/docker/" - -########################### -## Docker tag extraction ## -########################### - -## @param docker_labels_as_tags - map - optional -## @env DD_DOCKER_LABELS_AS_TAGS - json - optional -## The Agent can extract container label values and set them as metric tags values associated to a . -## If you prefix your tag name with `+`, it will only be added to high cardinality metrics (Docker check). -# -# docker_labels_as_tags: -# : -# : + -# -# DD_DOCKER_LABELS_AS_TAGS='{"LABEL_NAME":"tag_key"}' - -## @param docker_env_as_tags - map - optional -## @env DD_DOCKER_ENV_AS_TAGS - json - optional -## The Agent can extract environment variables values and set them as metric tags values associated to a . -## If you prefix your tag name with `+`, it will only be added to high cardinality metrics (Docker check). -# -# docker_env_as_tags: -# : -# -# DD_DOCKER_ENV_AS_TAGS='{"ENVVAR_NAME": "tag_key"}' - -{{ end -}} -{{- if .KubernetesTagging }} - -############################### -## Kubernetes tag extraction ## -############################### - -## @param kubernetes_pod_labels_as_tags - map - optional -## @env DD_KUBERNETES_POD_LABELS_AS_TAGS - json - optional -## The Agent can extract pod labels values and set them as metric tags values associated to a . -## If you prefix your tag name with +, it will only be added to high cardinality metrics. -# -# kubernetes_pod_labels_as_tags: -# : -# : + -# -# DD_KUBERNETES_POD_LABELS_AS_TAGS='{"LABEL_NAME":"tag_key"}' - -## @param kubernetes_pod_annotations_as_tags - map - optional -## @env DD_KUBERNETES_POD_ANNOTATIONS_AS_TAGS - json - optional -## The Agent can extract annotations values and set them as metric tags values associated to a . -## If you prefix your tag name with +, it will only be added to high cardinality metrics. -# -# kubernetes_pod_annotations_as_tags: -# : -# : + -# -# DD_KUBERNETES_POD_ANNOTATIONS_AS_TAGS='{"ANNOTATION_NAME":"tag_key"}' - -## @param kubernetes_namespace_labels_as_tags - map - optional -## @env DD_KUBERNETES_NAMESPACE_LABELS_AS_TAGS - json - optional -## The Agent can extract namespace label values and set them as metric tags values associated to a . -## If you prefix your tag name with +, it will only be added to high cardinality metrics. -# -# kubernetes_namespace_labels_as_tags: -# : -# : + -# -# DD_KUBERNETES_NAMESPACE_LABELS_AS_TAGS='{"": ""}' - -## @param container_env_as_tags - map - optional -## @env DD_CONTAINER_ENV_AS_TAGS - map - optional -## The Agent can extract environment variable values and set them as metric tags values associated to a . -## Requires the container runtime socket to be reachable. (Supported container runtimes: Containerd, Docker) -# -# container_env_as_tags: -# : - -## @param container_labels_as_tags - map - optional -## @env DD_CONTAINER_LABELS_AS_TAGS - map - optional -## The Agent can extract container label values and set them as metric tags values associated to a . -## If you prefix your tag name with `+`, it will only be added to high cardinality metrics. (Supported container -## runtimes: Containerd, Docker). -# -# container_labels_as_tags: -# : -# : + - -{{ end -}} -{{- if .ECS }} - -################################### -## ECS integration Configuration ## -################################### - -## @param ecs_agent_container_name - string - optional - default: ecs-agent -## @env DD_ECS_AGENT_CONTAINER_NAME - string - optional - default: ecs-agent -## The ECS Agent container should be autodetected when running with the -## default (ecs-agent) name. If not, change the container name here: -# -# ecs_agent_container_name: ecs-agent - -## @param ecs_agent_url - string - optional - default: http://localhost:51678 -## @env DD_ECS_AGENT_URL - string - optional - default: http://localhost:51678 -## The ECS Agent container should be autodetected when running with the -## default (ecs-agent) name. If not, change the container name the -## Agent should look for with ecs_agent_container_name, or force a fixed url here: -# -# ecs_agent_url: http://localhost:51678 - -## @param ecs_collect_resource_tags_ec2 - boolean - optional - default: false -## @env DD_ECS_COLLECT_RESOURCE_TAGS_EC2 - boolean - optional - default: false -## The Agent can collect resource tags from the metadata API exposed by the -## ECS Agent for tasks scheduled with the EC2 launch type. -# -# ecs_collect_resource_tags_ec2: false - -## @param ecs_resource_tags_replace_colon - boolean - optional - default: false -## @env DD_ECS_RESOURCE_TAGS_REPLACE_COLON - boolean - optional - default: false -## The Agent replaces colon `:` characters in the ECS resource tag keys by underscores `_`. -# -# ecs_resource_tags_replace_colon: false - -## @param ecs_metadata_timeout - integer - optional - default: 500 -## @env DD_ECS_METADATA_TIMEOUT - integer - optional - default: 500 -## Timeout in milliseconds on calls to the AWS ECS metadata endpoints. -# -# ecs_metadata_timeout: 500 - -## @param ecs_task_collection_enabled - boolean - optional - default: false -## @env DD_ECS_TASK_COLLECTION_ENABLED - boolean - optional - default: false -## The Agent can collect detailed task information from the metadata API exposed by the ECS Agent, -## which is used for the orchestrator ECS check. -# -# ecs_task_collection_enabled: false - -{{ end -}} -{{- if .CRI }} - -################################### -## CRI integration Configuration ## -################################### - -## @param cri_socket_path - string - optional - default: "" -## @env DD_CRI_SOCKET_PATH - string - optional - default: "" -## To activate the CRI check, indicate the path of the CRI socket you're using -## and mount it in the container if needed. -## If left empty, the CRI check is disabled. -## see: https://docs.datadoghq.com/integrations/cri/ -# -# cri_socket_path: "" - -## @param cri_connection_timeout - integer - optional - default: 1 -## @env DD_CRI_CONNECTION_TIMEOUT - integer - optional - default: 1 -## Configure the initial connection timeout in seconds. -# -# cri_connection_timeout: 1 - -## @param cri_query_timeout - integer - optional - default: 5 -## @env DD_CRI_QUERY_TIMEOUT - integer - optional - default: 5 -## Configure the timeout in seconds for querying the CRI. -# -# cri_query_timeout: 5 - -{{ end -}} -{{- if .Containerd}} - -########################################## -## Containerd integration Configuration ## -########################################## - -## @param cri_socket_path - string - optional - default: /var/run/containerd/containerd.sock -## @env DD_CRI_SOCKET_PATH - string - optional - default: /var/run/containerd/containerd.sock -## To activate the Containerd check, indicate the path of the Containerd socket you're using -## and mount it in the container if needed. -## see: https://docs.datadoghq.com/integrations/containerd/ -# -# cri_socket_path: /var/run/containerd/containerd.sock - -## @param cri_query_timeout - integer - optional - default: 5 -## @env DD_CRI_QUERY_TIMEOUT - integer - optional - default: 5 -## Configure the timeout in seconds for querying the Containerd API. -# -# cri_query_timeout: 5 - -## Deprecated - use `containerd_namespaces` instead -## @param containerd_namespace - list of strings - optional - default: [] -## @env DD_CONTAINERD_NAMESPACE - space separated list of strings - optional - default: [] -## Activating the Containerd check also activates the CRI check, as it contains an additional subset of useful metrics. -## Defaults to [] which configures the agent to report metrics and events from all the containerd namespaces. -## To watch specific namespaces, list them here. -## https://github.com/containerd/cri/blob/release/1.2/pkg/constants/constants.go#L22-L23 -# -# containerd_namespace: -# - k8s.io - -## @param containerd_namespaces - list of strings - optional - default: [] -## @env DD_CONTAINERD_NAMESPACES - space separated list of strings - optional - default: [] -## Activating the Containerd check also activates the CRI check, as it contains an additional subset of useful metrics. -## Defaults to [] which configures the agent to report metrics and events from all the containerd namespaces. -## containerd_namespaces acts as an alias for containerd_namespace. When both containerd_namespaces and containerd_namespace -## are configured, the Agent merges the two lists. -# -# containerd_namespaces: -# - k8s.io -# -## @param containerd_exclude_namespaces - list of strings - optional - default: ["moby"] -## @env DD_CONTAINERD_EXCLUDE_NAMESPACES - space separated list of strings - optional - default: ["moby"] -## When containerd_namespaces is set to [], containerd_exclude_namespaces -## allows the exclusion of containers from specific namespaces. By default it -## excludes "moby", to prevent Docker containers from being detected as -## containerd containers. -# -# containerd_exclude_namespaces: -# - moby - -{{ end -}} -{{- if .Kubelet }} - -################################################### -## Kubernetes kubelet connectivity Configuration ## -################################################### - -## @param kubernetes_kubelet_host - string - optional -## @env DD_KUBERNETES_KUBELET_HOST - string - optional -## The kubelet host should be autodetected when running inside a pod. -## If you run into connectivity issues, set the host here according to your cluster setup. -# -# kubernetes_kubelet_host: - -## @param kubernetes_http_kubelet_port - integer - optional - default: 10255 -## @env DD_KUBERNETES_HTTP_KUBELET_PORT - integer - optional - default: 10255 -## The kubelet http port should be autodetected when running inside a pod. -## If you run into connectivity issues, set the http port here according to your cluster setup. -# -# kubernetes_http_kubelet_port: 10255 - -## @param kubernetes_https_kubelet_port - integer - optional - default: 10250 -## @env DD_KUBERNETES_HTTPS_KUBELET_PORT - integer - optional - default: 10250 -## The kubelet https port should be autodetected when running inside a pod. -## If you run into connectivity issues, set the https port here according to your cluster setup. -# -# kubernetes_https_kubelet_port: 10250 - -## @param kubelet_tls_verify - boolean - optional - default: true -## @env DD_KUBELET_TLS_VERIFY - boolean - optional - default: true -## Set to false if you don't want the Agent to verify the kubelet's certificate when using HTTPS. -# -# kubelet_tls_verify: true - -## @param kubelet_client_ca - string - optional - default: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -## @env DD_KUBELET_CLIENT_CA - string - optional - default: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -## Kublet client CA file path. -# -# kubelet_client_ca: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt - -## @param kubelet_auth_token_path - string - optional -## @env DD_KUBELET_AUTH_TOKEN_PATH - string - optional -## If authentication is needed, the Agent uses the pod's service account's -## credentials. If you want to use a different account, or are running the Agent -## on the host, set a custom token file path here. -# -# kubelet_auth_token_path: - -## @param kubelet_client_crt - string - optional -## @env DD_KUBELET_CLIENT_CRT - string - optional -## Set a custom Client CRT file path. -# -# kubelet_client_crt: - -## @param kubelet_client_key - string - optional -## @env DD_KUBELET_CLIENT_KEY - string - optional -## Set a custom Client key file path. -# -# kubelet_client_key: - -## @param kubelet_wait_on_missing_container - integer - optional - default: 0 -## @env DD_KUBELET_WAIT_ON_MISSING_CONTAINER - integer - optional - default: 0 -## On some kubelet versions, containers can take up to a second to -## register in the podlist. This option allows to wait for up to a given -## number of seconds (in 250ms chunks) when a container does not exist in the podlist. -# -# kubelet_wait_on_missing_container: 0 - -## @param kubelet_cache_pods_duration - integer - optional - default: 5 -## @env DD_KUBELET_CACHE_PODS_DURATION - integer - optional - default: 5 -## Polling frequency in seconds of the Agent to the kubelet "/pods" endpoint. -# -# kubelet_cache_pods_duration: 5 - -## @param kubernetes_pod_expiration_duration - integer - optional - default: 900 -## @env DD_KUBERNETES_POD_EXPIRATION_DURATION - integer - optional - default: 900 -## Set the time in second after which the Agent ignores the pods that have exited. -## Set the duration to 0 to disable this filtering. -# -# kubernetes_pod_expiration_duration: 900 - -## @param kubelet_listener_polling_interval - integer - optional - default: 5 -## @env DD_KUBELET_LISTENER_POLLING_INTERVAL - integer - optional - default: 5 -## Polling frequency in seconds at which autodiscovery will query the pod watcher to detect new pods/containers. -## Note that kubelet_cache_pods_duration needs to be lower than this setting, or autodiscovery will only poll more frequently the same cached data (kubelet_cache_pods_duration controls the cache refresh frequency). -# -# kubelet_listener_polling_interval: 5 - -{{ end -}} -{{- if .KubeApiServer }} - -#################################################### -## Kubernetes apiserver integration Configuration ## -#################################################### - -## @param kubernetes_kubeconfig_path - string - optional - default: "" -## @env DD_KUBERNETES_KUBECONFIG_PATH - string - optional - default: "" -## When running in a pod, the Agent automatically uses the pod's service account -## to authenticate with the API server. -## Provide the path to a custom KubeConfig file if you wish to install the Agent out of a pod -## or customize connection parameters. -## See https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/ -# -# kubernetes_kubeconfig_path: "" - -## @param kubernetes_apiserver_ca_path - string - optional - default: "" -## @env DD_KUBERNETES_APISERVER_CA_PATH - string - optional - default: "" -## When running in a pod, the Agent automatically uses the pod's service account CA. -## Use this option to keep using the InCluster config but overriding the default CA Path. -## This parameter has no effect if `kubernetes_kubeconfig_path` is set. -# -# kubernetes_apiserver_ca_path: "" - -## @param kubernetes_apiserver_tls_verify - boolean - optional - default: true -## @env DD_KUBERNETES_APISERVER_TLS_VERIFY - boolean - optional - default: true -## When running in a pod, the Agent automatically uses the pod's service account CA. -## Use this option to keep using the InCluster config but deactivating TLS verification (in case APIServer CA is not ServiceAccount CA) -## This parameter has no effect if `kubernetes_kubeconfig_path` is set. -# -# kubernetes_apiserver_tls_verify: true - -## @param kubernetes_apiserver_use_protobuf - boolean - optional - default: false -## @env DD_KUBERNETES_APISERVER_USE_PROTOBUF - boolean - optional - default: false -## By default, communication with the apiserver is in json format. Setting the following -## option to true allows communication in the binary protobuf format. -# -# kubernetes_apiserver_use_protobuf: false - -## @param kubernetes_collect_metadata_tags - boolean - optional - default: true -## @env DD_KUBERNETES_COLLECT_METADATA_TAGS - boolean - optional - default: true -## Set this to false to disable tag collection for the Agent. -## Note: In order to collect Kubernetes service names, the Agent needs certain rights. -## See https://github.com/DataDog/datadog-agent/blob/main/Dockerfiles/agent/README.md#kubernetes -# -# kubernetes_collect_metadata_tags: true - -## @param kubernetes_metadata_tag_update_freq - integer - optional - default: 60 -## @env DD_KUBERNETES_METADATA_TAG_UPDATE_FREQ - integer - optional - default: 60 -## Set how often in secons the Agent refreshes the internal mapping of services to ContainerIDs. -# -# kubernetes_metadata_tag_update_freq: 60 - -## @param kubernetes_apiserver_client_timeout - integer - optional - default: 10 -## @env DD_KUBERNETES_APISERVER_CLIENT_TIMEOUT - integer - optional - default: 10 -## Set the timeout for the Agent when connecting to the Kubernetes API server. -# -# kubernetes_apiserver_client_timeout: 10 - -## @param collect_kubernetes_events - boolean - optional - default: false -## @env DD_COLLECT_KUBERNETES_EVENTS - boolean - optional - default: false -## Set `collect_kubernetes_events` to true to enable collection of kubernetes -## events to be sent to Datadog. -## Note: leader election must be enabled below to collect events. -## Only the leader Agent collects events. -## See https://github.com/DataDog/datadog-agent/blob/main/Dockerfiles/agent/README.md#event-collection -# -# collect_kubernetes_events: false - -## @param kubernetes_event_collection_timeout - integer - optional - default: 100 -## @env DD_KUBERNETES_EVENT_COLLECTION_TIMEOUT - integer - optional - default: 100 -## Set the timeout between two successful event collections in milliseconds. -# -# kubernetes_event_collection_timeout: 100 - -## @param leader_election - boolean - optional - default: false -## @env DD_LEADER_ELECTION - boolean - optional - default: false -## Set the parameter to true to enable leader election on this node. -## See https://github.com/DataDog/datadog-agent/blob/main/Dockerfiles/agent/README.md#leader-election -# -# leader_election: false - -## @param leader_lease_duration - integer - optional - default: 60 -## @env DD_LEADER_LEASE_DURATION - integer - optional - default: 60 -## Set the leader election lease in seconds. -# -# leader_lease_duration: 60 - -## @param kubernetes_node_labels_as_tags - map - optional -## @env DD_KUBERNETES_NODE_LABELS_AS_TAGS - json - optional -## Configure node labels that should be collected and their name as host tags. -## Note: Some of these labels are redundant with metadata collected by cloud provider crawlers (AWS, GCE, Azure) -# -# kubernetes_node_labels_as_tags: -# kubernetes.io/hostname: nodename -# beta.kubernetes.io/os: os -# -# DD_KUBERNETES_NODE_LABELS_AS_TAGS='{"NODE_LABEL": "TAG_KEY"}' - -## @param kubernetes_node_annotations_as_tags - map - optional -## @env DD_KUBERNETES_NODE_ANNOTATIONS_AS_TAGS - json - optional -## Configure node annotationss that should be collected and their name as host tags. -# -# kubernetes_node_annotations_as_tags: -# cluster.k8s.io/machine: machine -# -# DD_KUBERNETES_NODE_ANNOTATIONS_AS_TAGS='{"NODE_ANNOTATION": "TAG_KEY"}' - -## @param kubernetes_node_annotations_as_host_aliases - list - optional -## @env DD_KUBERNETES_NODE_ANNOTATIONS_AS_HOST_ALIASES - list - optional -## Configure node annotations that should be collected and used as host aliases. -# -# kubernetes_node_annotations_as_host_aliases: -# - cluster.k8s.io/machine -# -# DD_KUBERNETES_NODE_ANNOTATIONS_AS_HOST_ALIASES='["cluster.k8s.io/machine"]' - -## @param cluster_name - string - optional -## @env DD_CLUSTER_NAME - string - optional -## Set a custom kubernetes cluster identifier to avoid host alias collisions. -## The cluster name can be up to 40 characters with the following restrictions: -## * Lowercase letters, numbers, and hyphens only. -## * Must start with a letter. -## * Must end with a number or a letter. -## -## These are the same rules as the ones enforced by GKE: -## https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#Cluster.FIELDS.name -# -# cluster_name: - -## @param disable_cluster_name_tag_key - boolean - optional - default: false -## @env DD_DISABLE_CLUSTER_NAME_TAG_KEY - boolean - optional - default: false -## Disable using the 'cluster_name' tag key to submit orchestrator cluster name tag. -## The Agent will continue sending the cluster name tag with 'kube|ecs_cluster_name' key -## regardless of the value of this parameter. -# -# disable_cluster_name_tag_key: false - -## @param kubernetes_ad_tags_disabled -- list of strings - optional -## @env DD_KUBERNETES_AD_TAGS_DISABLED -- list of strings - optional -## Can only be set to a single valid value: [ "kube_service" ] -## in order to not attach the kube_service tag on ready pods -# -# kubernetes_ad_tags_disabled: -# - kube_service - -{{ end -}} -{{- if .PrometheusScrape }} -## @param prometheus_scrape - custom object - optional -## This section configures the Autodiscovery based on the Prometheus annotations -# -# prometheus: - - ## @param enabled - boolean - optional - default: false - ## Enables the prometheus config provider - # - # enabled: false - - ## @param service_endpoints - boolean - optional - default: false - ## Enables Service Endpoints checks in the prometheus config provider - # - # service_endpoints: false - - ## @param checks - custom object - optional - ## Defines any extra prometheus/openmetrics check configurations to be handled by the prometheus config provider - # - # checks: {} - - ## @param version - integer - optional - default: 1 - ## Version of the openmetrics check to be scheduled by the Prometheus auto-discovery - # - # version: 1 - -{{ end -}} -{{- if .CloudFoundryBBS }} -####################################################### -## Cloud Foundry BBS Configuration for Autodiscovery ## -####################################################### - -## @param cloud_foundry_bbs - custom object - optional -## This section configures how the Cluster Agent accesses BBS API to gather information -## necessary for autodiscovery on BBS-based Cloud Foundry deployments. -# -# cloud_foundry_bbs: - - ## @param url - string - optional - default: https://bbs.service.cf.internal:8889 - ## @env DD_CLOUD_FOUNDRY_BBS_URL - string - optional - default: https://bbs.service.cf.internal:8889 - ## URL of the BBS API. - # - # url: https://bbs.service.cf.internal:8889 - - ## @param poll_interval - integer - optional - default: 15 - ## @env DD_CLOUD_FOUNDRY_BBS_POLL_INTERVAL - integer - optional - default: 15 - ## Refresh rate of BBS API, in seconds. Values lower than 10 might influence - ## performance of other operations in the cluster. - # - # poll_interval: 15 - - ## @param ca_file - string - optional - default: "" - ## @env DD_CLOUD_FOUNDRY_BBS_CA_FILE - string - optional - default: "" - ## PEM-encoded CA certificate used when connecting to the BBS API. - # - # ca_file: "" - - ## @param cert_file - string - optional - default: "" - ## @env DD_CLOUD_FOUNDRY_BBS_CERT_FILE - string - optional - default: "" - ## PEM-encoded client certificate used when connecting to the BBS API. - # - # cert_file: "" - - ## @param key_file - string - optional - default: "" - ## @env DD_CLOUD_FOUNDRY_BBS_KEY_FILE - string - optional - default: "" - ## PEM-encoded client key used when connecting to the BBS API. - # - # key_file: "" - - ## @param env_include - list of strings - optional - default: [] - ## @env DD_CLOUD_FOUNDRY_BBS_ENV_INCLUDE - list of strings - optional - ## List of regular expressions to allow a set of environment variables to be included as container tags - # - # env_include: [] - ## @param env_exclude - list of strings - optional - default: [] - ## @env DD_CLOUD_FOUNDRY_BBS_ENV_EXCLUDE - list of strings - optional - ## List of regular expressions to forbid a set of environment variables to be included as container tags - # - # env_exclude: [] - -{{ end -}} -{{- if .CloudFoundryCC }} -#################################################################### -## Cloud Foundry Cloud Controller Configuration for Autodiscovery ## -#################################################################### - -## @param cloud_foundry_cc - custom object - optional -## This section configures how the Cluster Agent accesses CC API to gather information -## necessary for autodiscovery on Cloud Foundry deployments. -# -# cloud_foundry_cc: - - ## @param url - string - optional - default: https://cloud-controller-ng.service.cf.internal:9024 - ## @env DD_CLOUD_FOUNDRY_CC_URL - string - optional - default: https://cloud-controller-ng.service.cf.internal:9024 - ## URL of the CC API. - # - # url: https://cloud-controller-ng.service.cf.internal:9024 - - ## @param client_id - string - optional - ## @env DD_CLOUD_FOUNDRY_CC_CLIENT_ID - ## Client ID for oauth with UAA to get a token to access the CC API. - # - # client_id: - - ## @param client_secret - string - optional - ## @env DD_CLOUD_FOUNDRY_CC_CLIENT_SECRET - ## Client secrect for oauth with UAA to get a token to access the CC API. - # - # client_secret: - - ## @param skip_ssl_validation - boolean - optional - default: false - ## @env DD_CLOUD_FOUNDRY_CC_SKIP_SSL_VALIDATION - ## Whether or not to skip SSL validation when interacting with CC API. - # - # skip_ssl_validation: false - - ## @param poll_interval - integer - optional - default: 60 - ## @env DD_CLOUD_FOUNDRY_CC_POLL_INTERVAL - ## Refresh rate of CC API, in seconds. Values lower than 10 might influence - ## performance of other operations in the cluster. - # - # poll_interval: 60 - - ## @param apps_batch_size - integer - optional - default: 5000 - ## @env DD_CLOUD_FOUNDRY_CC_APPS_BATCH_SIZE - ## Number of apps per page to collect when calling the list apps endpoint of the CC API. Max 5000. - # - # apps_batch_size: 5000 - -{{ end -}} -{{- if .SNMP }} - -################################### -## Network Devices Configuration ## -################################### - -## @param network_devices - custom object - optional -## Configuration related to Network Devices Monitoring -# -# network_devices: - - ## @param namespace - string - optional - default: default - ## Namespace can be used to disambiguate devices with the same IP. - ## Changing namespace will cause devices being recreated in NDM app. - ## It should contain less than 100 characters and should not contain any of - ## `<`, `>`, `\n`, `\t`, `\r` characters. - ## This field is used by NDM features (SNMP check, SNMP Traps listener, etc). - # - # namespace: default - - ## @param autodiscovery - custom object - optional - ## Creates and schedules a listener to automatically discover your SNMP devices. - ## Discovered devices can then be monitored with the SNMP integration by using - ## the auto_conf.yaml file provided by default. - # - # autodiscovery: - - ## @param workers - integer - optional - default: 2 - ## The number of concurrent tasks used to discover SNMP devices. Increasing this value - ## discovers devices faster but at the cost of increased resource consumption. - # - # workers: 2 - - ## @param discovery_interval - integer - optional - default: 3600 - ## How often to discover new SNMP devices, in seconds. Decreasing this value - ## discovers devices faster (within the limit of the time taken to scan subnets) - ## but at the cost of increased resource consumption. - # - # discovery_interval: 3600 - - ## @param discovery_allowed_failures - integer - optional - default: 3 - ## The number of failed requests to a given SNMP device before removing it from the list of monitored - ## devices. - ## If a device shuts down, the Agent stops monitoring it after `discovery_interval * discovery_allowed_failures` seconds. - # - # discovery_allowed_failures: 3 - - ## @param loader - string - optional - default: python - ## Check loader to use. Available loaders: - ## - core: (recommended) Uses new corecheck SNMP integration - ## - python: Uses legacy python SNMP integration - # - # loader: core - - ## @param min_collection_interval - number - optional - default: 15 - ## This changes the collection interval for the check instances created - ## from discovered SNMP devices. - ## For more information, see: - ## https://docs.datadoghq.com/developers/write_agent_check/#collection-interval - # - # min_collection_interval: 15 - - ## @param use_device_id_as_hostname - boolean - optional - default: false - ## Use `device:` (device_id is composed of `:`) as `hostname` - ## for metrics and service checks (meaning that metrics and services checks will have - ## `host:device:` as tag). - ## This option is needed for custom tags. - # - # use_device_id_as_hostname: true - - ## @param collect_topology - boolean - optional - default: true - ## Enable the collection of topology (LLDP/CDP) data - # - # collect_topology: true - - ## @param ping - custom object - optional - ## Configure ICMP pings for all hosts in SNMP autodiscovery - ## Devices will be pinged with these settings each time the SNMP - ## check is run. - ## - ## By default, Datadog tries to use an unprivileged UDP socket to send ICMP - ## pings, but some Linux systems require using a raw socket. - ## - ## If `linux.use_raw_socket` is set, you must enable the `ping` module - ## of system-probe for elevated privileges. See - ## system-probe.yaml.example for details. - # - # ping: - # enabled: true # Disabled by default - # timeout: 3000 # Timeout in milliseconds - # count: 2 # Number of ping packets to send per check run - # interval: 10 # Time between sending pings (up to `count` packets) in milliseconds - # linux: # Linux-specific configuration - # use_raw_socket: true # Send pings in a privileged fashion using a raw socket. - # # This may be required if your system doesn't support - # # sending pings in an unprivileged fashion (using a UDP socket). - # # If `use_raw_socket` is set to true, you MUST also enable - # # system-probe which has elevated privileges. To enable it, see system-probe.yaml.example. - - ## @param configs - list - required - ## The actual list of configurations used to discover SNMP devices in various subnets. - ## Example: - ## configs: - ## - network_address: 10.0.0.0/24 - ## snmp_version: 1 - ## community_string: public - ## - network_address: 10.0.1.0/28 - ## community_string: public - ## ignored_ip_addresses: - ## - 10.0.1.0 - ## - 10.0.1.1 - # - # configs: - ## @param network_address - string - required - ## The subnet in CIDR format to scan for SNMP devices. - ## All unignored IP addresses in the CIDR range are scanned. - ## For optimal discovery time, be sure to use the smallest network mask - ## possible as is appropriate for your network topology. - ## Ex: 10.0.1.0/24 - # - # - network_address: - - ## @param ignored_ip_addresses - list of strings - optional - ## A list of IP addresses to ignore when scanning the network. - # - # ignored_ip_addresses: - # - - # - - - ## @param port - integer - optional - default: 161 - ## The UDP port to use when connecting to SNMP devices. - # - # port: 161 - - ## @param snmp_version - integer - optional - default: - ## Set the version of the SNMP protocol. Available options are: `1`, `2` or `3`. - ## If unset, the Agent tries to guess the correct version based on other configuration - ## parameters, for example: if `user` is set, the Agent uses SNMP v3. - # - # snmp_version: - - ## @param timeout - integer - optional - default: 5 - ## The number of seconds before timing out. - # - # timeout: 5 - - ## @param retries - integer - optional - default: 3 - ## The number of retries before failure. - # - # retries: 3 - - ## @param community_string - string - optional - ## Required for SNMP v1 & v2. - ## Enclose the community string with single quote like below (to avoid special characters being interpreted). - ## Ex: 'public' - # - # community_string: '' - - ## @param user - string - optional - ## The username to connect to your SNMP devices. - ## SNMPv3 only. - # - # user: - - ## @param authKey - string - optional - ## The passphrase to use with your Authentication type. - ## SNMPv3 only. - # - # authKey: - - ## @param authProtocol - string - optional - ## The authentication protocol to use when connecting to your SNMP devices. - ## Available options are: MD5, SHA, SHA224, SHA256, SHA384, SHA512 - ## Defaults to MD5 when `authentication_key` is specified. - ## SNMPv3 only. - # - # authProtocol: - - ## @param privKey - string - optional - ## The passphrase to use with your privacy protocol. - ## SNMPv3 only. - # - # privKey: - - ## @param privProtocol - string - optional - ## The privacy protocol to use when connecting to your SNMP devices. - ## Available options are: DES, AES (128 bits), AES192, AES192C, AES256, AES256C - ## Defaults to DES when `privacy_key` is specified. - ## SNMPv3 only. - # - # privProtocol: - - ## @param context_name - string - optional - ## The name of your context (optional SNMP v3-only parameter). - # - # context_name: - - ## @param tags - list of strings - optional - ## A list of tags to attach to every metric and service check of all devices discovered in the subnet. - ## - ## Learn more about tagging at https://docs.datadoghq.com/tagging - # - # tags: - # - : - # - : - - ## @param ad_identifier - string - optional - default: snmp - ## A unique identifier to attach to devices from that subnetwork. - ## When configuring the SNMP integration in snmp.d/auto_conf.yaml, - ## specify the corresponding ad_identifier at the top of the file. - # - # ad_identifier: snmp - - ## @param loader - string - optional - default: python - ## Check loader to use. Available loaders: - ## - core: will use corecheck SNMP integration - ## - python: will use python SNMP integration - # - # loader: core - - ## @param min_collection_interval - number - optional - default: 15 - ## This changes the collection interval for the check instances created from - ## discovered SNMP devices. It applies to each specific config from `snmp_listener.configs` - ## and has precedence over `snmp_listener.min_collection_interval`. - ## For more information, see: - ## https://docs.datadoghq.com/developers/write_agent_check/#collection-interval - # - # min_collection_interval: 15 - - ## @param use_device_id_as_hostname - boolean - optional - default: false - ## Use `device:` (device_id is composed of `:`) as `hostname` - ## for metrics and service checks (meaning that metrics and services checks will have - ## `host:device:` as tag). - ## This option is needed for custom tags. - # - # use_device_id_as_hostname: true - - ## @param oid_batch_size - integer - optional - default: 5 - ## The number of OIDs handled by each batch. - # - # oid_batch_size: 5 - - ## @param interface_configs - map - optional - ## This option is used to override interface inbound/outbound speed and add interface tags - ## Example: - ## interface_configs: - ## "10.0.0.1": # target device IP address - ## - match_field: "name" # (required) the field to match, can be `name` (interface name) or `index` (ifIndex) - ## match_value: "eth0" # (required) the value to match - ## in_speed: 50 # (optional) inbound speed value in bits per sec, no value or 0 means no override - ## out_speed: 25 # (optional) outbound speed value in bits per sec, no value or 0 means no override - ## tags: # (optional) interface level tags - ## - "testTagKey:testTagValue" - ## - "tagKey2:tagValue2" - # - # interface_config: - # "10.0.0.1": - # - match_field: name - # match_value: eth0 - # in_speed: 50 - # out_speed: 25 - # - match_field: index - # match_value: '10' - # in_speed: 50 - # out_speed: 25 - # "10.0.0.2": - # - match_field: name - # match_value: eth3 - # in_speed: 50 - # out_speed: 25 - # "10.0.0.3": - # - match_field: name - # match_value: eth4 - # tags: - # - "monitored:true" - # - "customKey:customValue" - - ## @param ping - custom object - optional - ## Configure ICMP pings for all hosts in SNMP autodiscovery - ## Devices will be pinged with these settings each time the SNMP - ## check is run. - ## - ## By default, Datadog tries to use an unprivileged UDP socket to send ICMP - ## pings, but some linux systems require using a raw socket. - ## - ## If `linux.use_raw_socket` is set, you must enable the `ping` module - ## of system-probe for elevated privileges. See - ## system-probe.yaml.example for details. - # - # ping: - # enabled: true # Disabled by default - # timeout: 3000 # Timeout in milliseconds - # count: 2 # Number of ping packets to send per check run - # interval: 10 # Time between sending pings (up to `count` packets) in milliseconds - # linux: # Linux-specific configuration - # use_raw_socket: true # Send pings in a privileged fashion using a raw socket. - # # This may be required if your system doesn't support - # # sending pings in an unprivileged fashion (using a UDP socket). - # # If `use_raw_socket` is set to true, you MUST also enable - # # system-probe which has elevated privileges. To enable it, see system-probe.yaml.example. - - - ## @param snmp_traps - custom object - optional - ## This section configures SNMP traps collection. - ## Traps are forwarded as logs and can be found in the logs explorer with a source:snmp-traps query - # - # snmp_traps: - - ## @param enabled - boolean - optional - default: false - ## Set to true to enable collection of traps. - # - # enabled: false - - ## @param port - integer - optional - default: 9162 - ## @env DD_SNMP_TRAPS_CONFIG_PORT - integer - optional - default: 9162 - ## The UDP port to use when listening for incoming trap packets. - ## Because the Datadog Agent does not run as root, the port cannot be below 1024. - ## However, if you run `sudo setcap 'cap_net_bind_service=+ep' /opt/datadog-agent/bin/agent/agent`, - ## the Datadog Agent can listen on ports below 1024. - # - # port: 9162 - - ## @param community_strings - list of strings - required - ## A list of known SNMP community strings that devices can use to send traps to the Agent. - ## Traps with an unknown community string are ignored. - ## Enclose the community string with single quote like below (to avoid special characters being interpreted). - ## Must be non-empty. - # - # community_strings: - # - '' - # - '' - - ## @param users - list of custom objects - optional - ## List of SNMPv3 users that can be used to listen for traps. - ## Each user can contain: - ## * user - string - The username used by devices when sending Traps to the Agent. - ## * authKey - string - (Optional) The passphrase to use with the given user and authProtocol - ## * authProtocol - string - (Optional) The authentication protocol to use when listening for traps from this user. - ## Available options are: MD5, SHA, SHA224, SHA256, SHA384, SHA512. - ## Defaults to MD5 when authKey is set. - ## * privKey - string - (Optional) The passphrase to use with the given user privacy protocol. - ## * privProtocol - string - (Optional) The privacy protocol to use when listening for traps from this user. - ## Available options are: DES, AES (128 bits), AES192, AES192C, AES256, AES256C. - ## Defaults to DES when privKey is set. - # - # users: - # - user: - # authKey: - # authProtocol: - # privKey: - # privProtocol: - - ## @param bind_host - string - optional - ## The hostname to listen on for incoming trap packets. - ## Binds to 0.0.0.0 by default (accepting all packets). - # - # bind_host: 0.0.0.0 - - ## stop_timeout - float - optional - default: 5.0 - ## The maximum number of seconds to wait for the trap server to stop when the Agent shuts down. - # - # stop_timeout: 5.0 - - ## @param netflow - custom object - optional - ## This section configures NDM NetFlow (and sFlow, IPFIX) collection. - # - # netflow: - - ## @param enabled - boolean - optional - default: false - ## Set to true to enable collection of NetFlow traffic. - # - # enabled: false - - ## @param listeners - custom object - optional - ## This section configures one or more listeners ports that will receive flow traffic. - ## Each listener have the following options: - ## * flow_type - string - The flow type correspond to the incoming flow protocol. - ## Choices are: netflow5, netflow9, ipfix, sflow5 - ## * port - string - (Optional) The port used to receive incoming flow traffic. - ## Default port differ by flow type: netflow5(2055), netflow9(2055), ipfix(4739), sflow5(6343) - ## * bind_host - string - (Optional) The hostname to listen on for incoming netflow packets. - ## Binds to 0.0.0.0 by default (accepting all packets). - ## * workers - string - (Optional) Number of workers to use for this listener. - ## Defaults to 1. - ## * mapping - (Optional) List of NetflowV9/IPFIX fields to additionally collect. - ## Defaults to None. - ## * field - integer - The Netflow field type ID to collect. - ## * destination - string - Name of the collected field, is queryable under @ in Datadog. - ## Default fields can be overridden, for example, `destination.port` overrides - ## the default destination port collected. - ## * type - string - The field type. - ## Available options are: string, integer, hex. - ## Defaults to hex. - ## * endianness - string - (Optional) If type is integer, endianness can be set using this parameter. - ## Available options are: big, little. - ## Defaults to big. - # - # listeners: - # - flow_type: netflow9 - # port: 2055 - # mapping: - # - field: 1234 - # destination: transport_rtp_ssrc - # type: integer - # - flow_type: netflow5 - # port: 2056 - # - flow_type: ipfix - # port: 4739 - # - flow_type: sflow5 - # port: 6343 - - ## stop_timeout - integer - optional - default: 5 - ## The maximum number of seconds to wait for the NetFlow listeners to stop when the Agent shuts down. - # - # stop_timeout: 5 - - ## @param reverse_dns_enrichment_enabled - boolean - optional - default: false - ## Set to true to enable reverse DNS enrichment of private source and destination IP addresses in NetFlow records. - # reverse_dns_enrichment_enabled: false - -## @param reverse_dns_enrichment - custom object - optional -## This section configures the reverse DNS enrichment component that can be used by other components in the Datadog Agent. -# reverse_dns_enrichment: - - ## @param workers - integer - optional - default: 10 - ## The number of concurrent workers used to perform reverse DNS lookups. - # workers: 10 - - ## @param chan_size - integer - optional - default: 5000 - ## The size of the channel used to send reverse DNS lookup requests to the workers. - # chan_size: 5000 - - ## @param cache - custom object - optional - ## This section configures the cache used by the reverse DNS enrichment component. - # cache: - - ## @param enabled - boolean - optional - default: true - ## Set to true to enable reverse DNS enrichment caching. - # - # enabled: true - - ## @param entry_ttl - duration - optional - default: 24h - ## The amount of time that a cache entry remains valid before it is expired and removed from the cache. - # entry_ttl: 24h - - ## @param clean_interval - duration - optional - default: 2h - ## An interval that specifies how often expired entries are removed from the cache to free space. - # clean_interval: 2h - - ## @param persist_interval - duration - optional - default: 2h - ## An interval that specifies how often the cache is persisted to disk so the cache can be reloaded when the Agent is upgraded or restarted. - # persist_interval: 2h - - ## @param max_retries - integer - optional - default: 10 - ## The maximum number of retries to perform when a DNS lookup operation fails, after which the hostname "" is returned and cached for the IP address. - # max_retries: 10 - - ## @param max_size - integer - optional - default: 1000000 - ## The maximum size in entries of the cache, above which additional entries will not be cached. - # - # max_size: 1000000 - - ## @param rate_limiter - custom object - optional - ## This section configures the rate limiter used by the reverse DNS enrichment component. - # rate_limiter: - - ## @param enabled - boolean - optional - default: true - ## Set to true to enable the reverse DNS enrichment rate limiter. - # - # enabled: true - - ## @param limit_per_sec - integer - optional - default: 1000 - ## The maximum number of reverse DNS lookups allowed per second by the rate limiter. - # limit_per_sec: 1000 - - ## @param limit_throttled_per_sec - integer - optional - default: 1 - ## The maximum number of reverse DNS lookups allowed per second when the rate limiter is throttled due to errors exceeding the threshold. - # limit_throttled_per_sec: 1 - - ## @param throttle_error_threshold - integer - optional - default: 10 - ## The number of consecutive errors that will trigger the rate limiter to throttle down to limit_throttled_per_sec. - # throttle_error_threshold: 10 - - ## @param recovery_intervals - integer - optional - default: 5 - ## The number of intervals over which to increase the rate limit back to limit_per_sec when lookups are again successful after being throttled due to errors. - # recovery_intervals: 5 - - ## @param recovery_interval - duration - optional - default: 5s - ## The interval between incrementally increasing the rate limit back to limit_per_sec when lookups are again successful after being throttled due to errors. - ## The rate limit will be increased by (limit_per_sec - limit_throttled_per_sec) / recovery_intervals every recovery_interval, until it reaches - ## limit_per_sec. For example, with limit_per_sec=1000, limit_throttled_per_sec=1, recovery_intervals=5, recovery_interval=5s, the limit will - ## be increased by 200 every 5 seconds until reaching 1000. - # recovery_interval: 5s - -{{end -}} -{{- if .OTLP }} -################################### -## OpenTelemetry Configuration ## -################################### - -## @param otlp_config - custom object - optional -## This section configures OTLP ingest in the Datadog Agent. -# -# otlp_config: - - ## @param receiver - custom object - optional - ## The receiver configuration. It follows the OpenTelemetry Collector's OTLP Receiver Configuration. - ## This template lists the most commonly used settings; see the OpenTelemetry Collector documentation - ## for a full list of available settings: - ## https://github.com/open-telemetry/opentelemetry-collector/blob/main/receiver/otlpreceiver/config.md - # - # receiver: - - ## @param protocols - custom object - optional - ## Configuration for the supported protocols. - # - # protocols: - - ## @param grpc - custom object - optional - ## Configuration for OTLP/gRPC listener. - ## Setting this as an empty section enables the OTLP/gRPC listener with default options. - # - # grpc: - - ## @param endpoint - string - optional - default: 0.0.0.0:4317 - ## @env DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT - string - optional - default: 0.0.0.0:4317 - ## The OTLP/gRPC listener endpoint. - # - # endpoint: 0.0.0.0:4317 - - ## @param transport - string - optional - default: tcp - ## @env DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_TRANSPORT - string - optional - default: tcp - ## The OTLP/gRPC listener transport protocol. - ## Known protocols are "tcp", "udp", "ip", "unix", "unixgram", and "unixpacket". - # - # transport: tcp - - ## @param max_recv_msg_size_mib - number - optional - default: 4 - ## @env DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_MAX_RECV_MSG_SIZE_MIB - number - optional - default: 4 - ## The maximum size (in MiB) of messages accepted by the OTLP/gRPC endpoint. - # - # max_recv_msg_size_mib: 4 - - ## @param http - custom object - optional - ## Configuration for OTLP/HTTP listener. - ## Setting this as an empty section enables the OTLP/HTTP listener with default options. - # - # http: - - ## @param endpoint - string - optional - default: 0.0.0.0:4318 - ## @env DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT - string - optional - default: 0.0.0.0:4318 - ## The OTLP/HTTP listener endpoint. - # - # endpoint: 0.0.0.0:4318 - - ## @param metrics - custom object - optional - ## Metrics-specific configuration for OTLP ingest in the Datadog Agent. - # - # metrics: - - ## @param enabled - boolean - optional - default: true - ## @env DD_OTLP_CONFIG_METRICS_ENABLED - boolean - optional - default: true - ## Set to false to disable metrics support in the OTLP ingest endpoint. - ## To enable the OTLP ingest, the otlp_config.receiver section must be set. - # - # enabled: true - - ## @param resource_attributes_as_tags - boolean - optional - default: false - ## @env DD_OTLP_CONFIG_METRICS_RESOURCE_ATTRIBUTES_AS_TAGS - boolean - optional - default: false - ## Set to true to add resource attributes of a metric to its metric tags. Please note that any of - ## the subset of resource attributes in this list https://docs.datadoghq.com/opentelemetry/guide/semantic_mapping/ - ## are converted to Datadog conventions and set to to metric tags whether this option is enabled or not. - # - # resource_attributes_as_tags: false - - ## Deprecated - use `instrumentation_scope_metadata_as_tags` instead in favor of - ## https://github.com/open-telemetry/opentelemetry-proto/releases/tag/v0.15.0 - ## Both must not be set at the same time. - ## @param instrumentation_library_metadata_as_tags - boolean - optional - default: false - ## @env DD_OTLP_CONFIG_METRICS_INSTRUMENTATION_LIBRARY_METADATA_AS_TAGS - boolean - optional - default: false - ## Set to true to add metadata about the instrumentation library that created a metric. - # - # instrumentation_library_metadata_as_tags: false - - ## @param instrumentation_scope_metadata_as_tags - boolean - optional - default: false - ## @env DD_OTLP_CONFIG_METRICS_INSTRUMENTATION_SCOPE_METADATA_AS_TAGS - boolean - optional - default: false - ## Set to true to add metadata about the instrumentation scope that created a metric. - # - # instrumentation_scope_metadata_as_tags: false - - ## @param tag_cardinality - string - optional - default: low - ## @env DD_OTLP_CONFIG_METRICS_TAG_CARDINALITY - string - optional - default: low - ## Configure the level of granularity of tags to send for OTLP metrics. Choices are: - ## * low: add tags about low-cardinality objects (clusters, hosts, deployments, container images, ...) - ## * orchestrator: add tags about pod, (in Kubernetes), or task (in ECS or Mesos) -level of cardinality - ## * high: add tags about high-cardinality objects (individual containers, user IDs in requests, ...) - ## WARNING: sending container tags for checks metrics may create more metrics - ## (one per container instead of one per host). This may impact your custom metrics billing. - # - # tag_cardinality: low - - ## @param delta_ttl - int - optional - default: 3600 - ## @env DD_OTLP_CONFIG_METRICS_DELTA_TTL - int - optional - default: 3600 - ## The amount of time (in seconds) that values are kept in memory for - ## calculating deltas for cumulative monotonic metrics. - # - # delta_ttl: 3600 - - ## @param histograms - custom object - optional - ## Configuration for OTLP Histograms. - ## See https://docs.datadoghq.com/metrics/otlp/?tab=histogram for details. - # - # histograms: - - ## @param mode - string - optional - default: distributions - ## @env DD_OTLP_CONFIG_METRICS_HISTOGRAMS_MODE - string - optional - default: distributions - ## How to report histograms. Valid values are: - ## - ## - `distributions` to report metrics as Datadog distributions (recommended). - ## - `nobuckets` to not report bucket metrics, - ## - `counters` to report one metric per histogram bucket. - # - # mode: distributions - - ## Deprecated - use `send_aggregation_metrics` instead. This flag will override `send_aggregation_metrics` if both are set. - ## @param send_count_sum_metrics - boolean - optional - default: false - ## @env DD_OTLP_CONFIG_METRICS_HISTOGRAMS_SEND_COUNT_SUM_METRICS - boolean - optional - default: false - ## Whether to report sum, count, min, and max as separate histogram metrics. - # - # send_count_sum_metrics: false - - ## @param send_aggregation_metrics - boolean - optional - default: false - ## @env DD_OTLP_CONFIG_METRICS_HISTOGRAMS_SEND_AGGREGATION_METRICS - boolean - optional - default: false - ## Whether to report sum, count, min, and max as separate histogram metrics. - # - # send_aggregation_metrics: false - - ## @param sums - custom object - optional - ## Configuration for OTLP Sums. - ## See https://docs.datadoghq.com/metrics/otlp/?tab=sum for details. - # - # sums: - - ## @param cumulative_monotonic_mode - string - optional - default: to_delta - ## @env DD_OTLP_CONFIG_METRICS_SUMS_CUMULATIVE_MONOTONIC_MODE - string - optional - default: to_delta - ## How to report cumulative monotonic sums. Valid values are: - ## - ## - `to_delta` to calculate delta for sum in the client side and report as Datadog counts. - ## - `raw_value` to report the raw value as a Datadog gauge. - # - # cumulative_monotonic_mode: to_delta - - ## @param initial_cumulative_monotonic_value - string - optional - default: auto - ## How to report the initial value for cumulative monotonic sums. Valid values are: - ## - ## - `auto` reports the initial value if its start timestamp is set and it happens after the process was started. - ## - `drop` always drops the initial value. - ## - `keep` always reports the initial value. - # - # initial_cumulative_monotonic_value: auto - - ## @param summaries - custom object - optional - ## Configuration for OTLP Summaries. - ## See https://docs.datadoghq.com/metrics/otlp/?tab=summary for more details. - # - # summaries: - - ## @param mode - string - optional - default: gauges - ## @env DD_OTLP_CONFIG_METRICS_SUMMARIES_MODE - string - optional - default: gauges - ## How to report summaries. Valid values are: - ## - ## - `noquantiles` to not report quantile metrics. - ## - `gauges` to report one gauge metric per quantile. - # - # mode: gauges - - ## @param traces - custom object - optional - ## Traces-specific configuration for OTLP ingest in the Datadog Agent. - # - # traces: - - ## @param enabled - boolean - optional - default: true - ## @env DD_OTLP_CONFIG_TRACES_ENABLED - boolean - optional - default: true - ## Set to false to disable traces support in the OTLP ingest endpoint. - ## To enable the OTLP ingest, the otlp_config.receiver section must be set. - # - # enabled: true - - ## @param span_name_as_resource_name - boolean - optional - default: false - ## @env DD_OTLP_CONFIG_TRACES_SPAN_NAME_AS_RESOURCE_NAME - boolean - optional - default: false - ## If set to true the OpenTelemetry span name will used in the Datadog resource name. - ## If set to false the resource name will be filled with the instrumentation library name + span kind. - # - # span_name_as_resource_name: false - - ## @param span_name_remappings - map - optional - ## @env DD_OTLP_CONFIG_TRACES_SPAN_NAME_REMAPPINGS - json - optional - ## Defines a map of span names and preferred names to map to. This can be used to automatically map Datadog Span - ## Operation Names to an updated value. - ## span_name_remappings: - ## "io.opentelemetry.javaagent.spring.client": "spring.client" - ## "instrumentation:express.server": "express" - ## "go.opentelemetry.io_contrib_instrumentation_net_http_otelhttp.client": "http.client" - # - # span_name_remappings: - # : - - ## @param probabilistic_sampler - custom object - optional - ## Probabilistic sampler controlling the rate of ingestion. Using this sampler works consistently - ## in a distributed system where the sampling rate is shared. Exceptions are made for errors and - ## rare traces (if enabled via apm_config.enable_rare_sampler). - # - # probabilistic_sampler: - ## @param sampling_percentage - number - optional - default: 100 - ## @env DD_OTLP_CONFIG_TRACES_PROBABILISTIC_SAMPLER_SAMPLING_PERCENTAGE - number - optional - default: 100 - ## Percentage of traces to ingest (0 100]. Invalid values (<= 0 || > 100) are disconsidered and the default is used. - ## If incoming spans have a sampling.priority set by the user, it will be followed and the sampling percentage will - ## be overridden. - # - # sampling_percentage: 100 - - ## @param logs - custom object - optional - ## Logs-specific configuration for OTLP ingest in the Datadog Agent. - # - # logs: - - ## @param enabled - boolean - optional - default: false - ## @env DD_OTLP_CONFIG_LOGS_ENABLED - boolean - optional - default: false - ## Set to true to enable logs support in the OTLP ingest endpoint. - ## To enable the OTLP ingest, the otlp_config.receiver section must be set. - # - # enabled: true - -## @param debug - custom object - optional - ## Debug-specific configuration for OTLP ingest in the Datadog Agent. - ## This template lists the most commonly used settings; see the OpenTelemetry Collector documentation - ## for a full list of available settings: - ## https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/debugexporter#getting-started - # - # debug: - ## @param verbosity - string - optional - default: normal - ## @env DD_OTLP_CONFIG_DEBUG_VERBOSITY - string - optional - default: normal - ## Verbosity of debug logs when Datadog Agent receives otlp traces/metrics. - ## Valid values are basic, normal, detailed, none. - # - # verbosity: normal -{{- if (eq .OS "windows")}} -##################################################### -## Datadog Agent Manager System Tray Configuration ## -##################################################### - -## @param system_tray - custom object - optional -## This section configures the Datadog Agent Manager System Tray -# -# system_tray: - ## @param log_file - string - optional - default: %ProgramData%\Datadog\logs\ddtray.log - ## @env DD_TRAY_LOG_FILE - string - optional - ## The full path to the file where Datadog Agent Manager System Tray logs are written. - # - # log_file: -{{end -}} -{{end -}} - - -{{- if .APMInjection -}} -############################################## -## Datadog APM Auto-injection Configuration ## -############################################## - -## @param injection_controller_config - custom object -## This section configures the Datadog APM Auto Injection controller. -## Uncomment this parameter and the one below to enable them. -# -# injection_controller_config: - - ## @param enabled - boolean - optional - default: false - ## Set to true to enable the APM Auto-injection. - ## Please note that enabling this service will result in a kernel driver being loaded. - # - # enabled: false - - ## @param log_file - string - optional - default: c:\programdata\datadog\logs\apm-inject.log - ## The full path to the file where injection controller logs are written. - # - # log_file: c:\programdata\datadog\logs\apm-inject.log - - ## @param log_level - string - optional - default: info - ## Minimum log level of the injection controller. - ## Valid log levels are: debug, info, warn, and error. - # - # log_level: 'info' - - ## @param log_to_console - boolean - optional - default: true - ## Set to 'false' to disable injection controller logging to stdout. - # - # log_to_console: true - - ## @param socket_port - integer - optional - default: 3030 - ## The port used for the injection controller communications API (served on localhost). - # - # socket_port: 3030 - - # internal_profiling: - # - ## @param enabled - boolean - optional - default: false - ## Enable internal profiling for the injection controller process. - # - # enabled: false - -## @param service_configs - list of custom objects -## This section configures the services which will be automatically injected with APM -## configurations, as well as the APM configurations which will be injected. -# -# service_configs: - - ## @param service configuration - custom object - ## In order to configure APM auto-injection for a service or set of services, an injection condition - ## and APM configuration must be provided. - ## - ## Example: - ## - conditions: - ## command_line_regex: executable_name.exe - ## configuration: - ## service_language: dotnet - ## dd_env: staging - ## dd_service: exampleService - ## dd_version: 1.2.3 - ## - ## To learn about all the available service matching conditions & configuration options, visit - ## https://docs.datadoghq.com/tracing/trace_collection/library_injection_local - -{{end}} \ No newline at end of file diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index 90756ee63b6..a3169933a1c 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash DD_CONF_DIR="/etc/datadog-agent" +DD_RUN_DIR="/var/run/datadog" # START OF CODE EXTRACTED FROM https://github.com/DataDog/heroku-buildpack-datadog/blob/master/extra/datadog.sh # This code was extracted in order to maintain functionality when switching from @@ -13,6 +14,9 @@ export REDIS_CONF="$INTEGRATIONS_CONF/redisdb.d" # Get the lower case for the log level DD_LOG_LEVEL_LOWER=$(echo "$DD_LOG_LEVEL" | tr '[:upper:]' '[:lower:]') +# Move Datadog config files into place +cp "$DATADOG_CONF.example" "$DATADOG_CONF" + # Update the Datadog conf yaml to disable cloud provider metadata sed -i -e"s|^.*cloud_provider_metadata:.*$|cloud_provider_metadata: []|" "$DATADOG_CONF" @@ -84,10 +88,11 @@ if [ "$DD_ENABLE_HEROKU_POSTGRES" == "true" ]; then touch "$POSTGRES_CONF/conf.yaml" echo -e "init_config: \ninstances: \n" > "$POSTGRES_CONF/conf.yaml" - echo "[DEBUG] Creating Datadog Postgres integration config..." + echo "[DEBUG] Creating Datadog Postgres integration config (DD_POSTGRES_URL_VAR: $DD_POSTGRES_URL_VAR)..." for PG_URL in $DD_POSTGRES_URL_VAR do if [ -n "${!PG_URL}" ]; then + echo "DB_URL: ${!PG_URL}" POSTGREGEX='^postgres://([^:]+):([^@]+)@([^:]+):([^/]+)/(.*)$' if [[ ${!PG_URL} =~ $POSTGREGEX ]]; then echo -e " - host: ${BASH_REMATCH[3]}" >> "$POSTGRES_CONF/conf.yaml" @@ -169,9 +174,9 @@ if [ -n "$DISABLE_DATADOG_AGENT" ]; then echo "The Datadog Agent has been disabled. Unset the DISABLE_DATADOG_AGENT or set missing environment variables." else if [ "$APP_ENV" = "production" ] || [ "$ENABLE_DATADOG_AGENT" = "true" ]; then - datadog-agent run & - /opt/datadog-agent/embedded/bin/trace-agent --config=/etc/datadog-agent/datadog.yaml & - /opt/datadog-agent/embedded/bin/process-agent --config=/etc/datadog-agent/datadog.yaml & + datadog-agent run -c $DATADOG_CONF & + /opt/datadog-agent/embedded/bin/trace-agent -c $DATADOG_CONF & + /opt/datadog-agent/embedded/bin/process-agent -c $DATADOG_CONF & fi fi From f74f6a0c8c66eb5474696731892b8128f0c0ff41 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Thu, 17 Oct 2024 05:15:19 +0300 Subject: [PATCH 209/425] comment out config dir copying --- Dockerfile.datadog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.datadog b/Dockerfile.datadog index 9a50dc2ba87..59e06d5707a 100644 --- a/Dockerfile.datadog +++ b/Dockerfile.datadog @@ -26,4 +26,4 @@ RUN apt-get update && apt-get -y install --reinstall datadog-agent EXPOSE 8125/udp 8126/tcp # output dir MUST match directory set to DD_CONF_DIR in datadog-entrypoint.sh -COPY datadog-config/ /etc/datadog-agent/ \ No newline at end of file +# COPY datadog-config/ /etc/datadog-agent/ \ No newline at end of file From cf0f5fc3d6d64a32983bf6b7cf62d2ce3446e92a Mon Sep 17 00:00:00 2001 From: Salman Date: Thu, 17 Oct 2024 07:29:00 +0500 Subject: [PATCH 210/425] issue#9446/subscribe-icons-should-change-color --- .../ThreadOptions/ToggleThreadSubscribe.tsx | 3 ++- .../new_designs/cw_thread_action.scss | 25 +++++++++++++++++++ .../client/styles/mixins/colors.module.scss | 24 ++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ToggleThreadSubscribe.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ToggleThreadSubscribe.tsx index 69cbaa21191..79c1b6833b9 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ToggleThreadSubscribe.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ToggleThreadSubscribe.tsx @@ -75,7 +75,8 @@ export const ToggleThreadSubscribe = (props: ToggleThreadSubscribeProps) => { return ( Date: Thu, 17 Oct 2024 07:37:57 +0500 Subject: [PATCH 211/425] eslint-fix --- .../client/scripts/views/components/component_kit/cw_avatar.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx index eb5ceefff15..7b88f60d974 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx @@ -22,6 +22,7 @@ export const CWAvatarSkeleton = ({ size }: BaseAvatarProps) => { ); }; +// eslint-disable-next-line react/no-multi-comp export const CWAvatar = (props: AvatarProps) => { const { avatarUrl, size } = props; @@ -41,6 +42,7 @@ export const CWAvatar = (props: AvatarProps) => { type JdenticonProps = BaseAvatarProps & { address?: string }; +// eslint-disable-next-line react/no-multi-comp export const CWJdenticon = (props: JdenticonProps) => { const { address, size } = props; From 32ea88376e9c145e152b7296559f502d3d0a3736 Mon Sep 17 00:00:00 2001 From: israellund Date: Wed, 16 Oct 2024 22:41:02 -0400 Subject: [PATCH 212/425] added trash icon to web links --- .../UrlLinkSelector/UrlSelector.tsx | 21 ++++++++++--------- .../UrlLinkSelector/UrlSelectorItem.tsx | 11 ++++++++-- .../styles/components/UrlLinkSelector.scss | 2 ++ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelector.tsx b/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelector.tsx index 4ac47a65e24..79902428b44 100644 --- a/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelector.tsx +++ b/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelector.tsx @@ -1,10 +1,9 @@ -import React, { useCallback, useState } from 'react'; +import React, { useCallback } from 'react'; import 'components/UrlLinkSelector.scss'; +import { Link } from 'models/Thread'; import app from 'state'; -import { CWTextInput } from 'views/components/component_kit/cw_text_input'; import { QueryList } from 'views/components/component_kit/cw_query_list'; -import { Link } from 'models/Thread'; import { UrlSelectorItem } from './UrlSelectorItem'; type UrlSelectorProps = { @@ -22,18 +21,20 @@ export const UrlSelector = ({ onSelect, urlsToSet }: UrlSelectorProps) => { const renderItem = useCallback( (i: number, url: Link) => { const isSelected = !!urlsToSet.find( - ({ identifier }) => identifier === url.identifier + ({ identifier }) => identifier === url.identifier, ); return ( - onSelect(url)} - isSelected={isSelected} - /> +
      + onSelect(url)} + isSelected={isSelected} + /> +
      ); }, - [onSelect, urlsToSet] + [onSelect, urlsToSet], ); if (!app.chain || !app.activeChainId()) { diff --git a/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelectorItem.tsx b/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelectorItem.tsx index a3196480769..b559214c795 100644 --- a/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelectorItem.tsx +++ b/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelectorItem.tsx @@ -1,7 +1,8 @@ +import { Link } from 'models/Thread'; import React from 'react'; import { CWCheck } from 'views/components/component_kit/cw_icons/cw_icons'; +import { CWIconButton } from '../component_kit/cw_icon_button'; import { CWText } from '../component_kit/cw_text'; -import { Link } from 'models/Thread'; interface UrlSelectorItemProps { link: Link; @@ -15,7 +16,7 @@ const UrlSelectorItem = ({ isSelected, }: UrlSelectorItemProps) => { return ( -
      onClick(link)}> +
      {isSelected && }
      @@ -25,6 +26,12 @@ const UrlSelectorItem = ({ {link.identifier}
      + onClick(link)} + />
      ); }; diff --git a/packages/commonwealth/client/styles/components/UrlLinkSelector.scss b/packages/commonwealth/client/styles/components/UrlLinkSelector.scss index c56aaf26fc9..67778ab9a0d 100644 --- a/packages/commonwealth/client/styles/components/UrlLinkSelector.scss +++ b/packages/commonwealth/client/styles/components/UrlLinkSelector.scss @@ -21,6 +21,8 @@ .proposal-item { padding-block: 6px; display: flex; + align-items: center; + padding-right: 10px; font-size: 14px; cursor: pointer; From 2577349ffb67cb2cffd69650abd6870c0cae5cb6 Mon Sep 17 00:00:00 2001 From: israellund Date: Wed, 16 Oct 2024 23:16:09 -0400 Subject: [PATCH 213/425] code quality fix to pass test --- .../scripts/views/components/UrlLinkSelector/UrlSelector.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelector.tsx b/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelector.tsx index 79902428b44..c8033bc20b6 100644 --- a/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelector.tsx +++ b/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelector.tsx @@ -41,6 +41,7 @@ export const UrlSelector = ({ onSelect, urlsToSet }: UrlSelectorProps) => { return; } + // eslint-disable-next-line react/no-multi-comp const EmptyComponent = () => (
      {getEmptyContentMessage()}
      ); From 5b870c92dc7ebfda95608490b594197a3c24f4f3 Mon Sep 17 00:00:00 2001 From: Salman Date: Thu, 17 Oct 2024 08:24:01 +0500 Subject: [PATCH 214/425] uncrossed-icon-remove --- .../component_kit/new_designs/cw_thread_action.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_thread_action.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_thread_action.tsx index b1852830a1e..3cc8ca606e5 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_thread_action.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_thread_action.tsx @@ -2,7 +2,6 @@ import { ArrowBendUpRight, ArrowFatUp, BellSimple, - BellSimpleSlash, ChatCenteredDots, Coins, DotsThree, @@ -55,11 +54,7 @@ const renderPhosphorIcon = ( case 'share': return ; case 'subscribe': - return selected ? ( - - ) : ( - - ); + return ; case 'overflow': return ; case 'leaderboard': From 2a44413de6c5b0ca0640538438ec580bfba11404 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Thu, 17 Oct 2024 06:55:22 +0300 Subject: [PATCH 215/425] few fixes --- Dockerfile.datadog | 3 +-- scripts/datadog-entrypoint.sh | 8 +++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Dockerfile.datadog b/Dockerfile.datadog index 59e06d5707a..c95692b5e70 100644 --- a/Dockerfile.datadog +++ b/Dockerfile.datadog @@ -25,5 +25,4 @@ RUN apt-get update && apt-get -y install --reinstall datadog-agent # Expose DogStatsD and trace-agent ports EXPOSE 8125/udp 8126/tcp -# output dir MUST match directory set to DD_CONF_DIR in datadog-entrypoint.sh -# COPY datadog-config/ /etc/datadog-agent/ \ No newline at end of file +RUN mkdir -p /var/run/datadog \ No newline at end of file diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index a3169933a1c..6033033adf5 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -88,11 +88,9 @@ if [ "$DD_ENABLE_HEROKU_POSTGRES" == "true" ]; then touch "$POSTGRES_CONF/conf.yaml" echo -e "init_config: \ninstances: \n" > "$POSTGRES_CONF/conf.yaml" - echo "[DEBUG] Creating Datadog Postgres integration config (DD_POSTGRES_URL_VAR: $DD_POSTGRES_URL_VAR)..." for PG_URL in $DD_POSTGRES_URL_VAR do if [ -n "${!PG_URL}" ]; then - echo "DB_URL: ${!PG_URL}" POSTGREGEX='^postgres://([^:]+):([^@]+)@([^:]+):([^/]+)/(.*)$' if [[ ${!PG_URL} =~ $POSTGREGEX ]]; then echo -e " - host: ${BASH_REMATCH[3]}" >> "$POSTGRES_CONF/conf.yaml" @@ -174,9 +172,9 @@ if [ -n "$DISABLE_DATADOG_AGENT" ]; then echo "The Datadog Agent has been disabled. Unset the DISABLE_DATADOG_AGENT or set missing environment variables." else if [ "$APP_ENV" = "production" ] || [ "$ENABLE_DATADOG_AGENT" = "true" ]; then - datadog-agent run -c $DATADOG_CONF & - /opt/datadog-agent/embedded/bin/trace-agent -c $DATADOG_CONF & - /opt/datadog-agent/embedded/bin/process-agent -c $DATADOG_CONF & + datadog-agent run -C $DATADOG_CONF & + /opt/datadog-agent/embedded/bin/trace-agent -C $DATADOG_CONF & + /opt/datadog-agent/embedded/bin/process-agent --cfgpath $DATADOG_CONF & fi fi From 0f8bd32bb3c3223a0fe76165f67e6931955ce5fc Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Thu, 17 Oct 2024 07:12:02 +0300 Subject: [PATCH 216/425] fix args --- scripts/datadog-entrypoint.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/datadog-entrypoint.sh b/scripts/datadog-entrypoint.sh index 6033033adf5..7e703ec7e6c 100644 --- a/scripts/datadog-entrypoint.sh +++ b/scripts/datadog-entrypoint.sh @@ -72,7 +72,6 @@ fi # find "$DD_CONF_DIR"/conf.d -name "conf.yaml.default" -exec mv {} {}_disabled \; #fi -# Update the Postgres configuration from above using the Heroku application environment variable if [ "$DD_LOG_LEVEL_LOWER" == "debug" ]; then echo "[DEBUG] DD_ENABLE_HEROKU_POSTGRES: $DD_ENABLE_HEROKU_POSTGRES" fi @@ -109,7 +108,6 @@ if [ "$DD_ENABLE_HEROKU_POSTGRES" == "true" ]; then unset IFS fi -# Update the Redis configuration from above using the Heroku application environment variable if [ "$DD_LOG_LEVEL_LOWER" == "debug" ]; then echo "[DEBUG] DD_ENABLE_HEROKU_REDIS: $DD_ENABLE_HEROKU_REDIS" fi @@ -172,8 +170,8 @@ if [ -n "$DISABLE_DATADOG_AGENT" ]; then echo "The Datadog Agent has been disabled. Unset the DISABLE_DATADOG_AGENT or set missing environment variables." else if [ "$APP_ENV" = "production" ] || [ "$ENABLE_DATADOG_AGENT" = "true" ]; then - datadog-agent run -C $DATADOG_CONF & - /opt/datadog-agent/embedded/bin/trace-agent -C $DATADOG_CONF & + datadog-agent run -c $DATADOG_CONF & + /opt/datadog-agent/embedded/bin/trace-agent -c $DATADOG_CONF & /opt/datadog-agent/embedded/bin/process-agent --cfgpath $DATADOG_CONF & fi fi From a1fc46625a19aef3b3a0007b06adfc5cada69a81 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 04:27:09 -0700 Subject: [PATCH 217/425] fix type --- libs/model/src/thread/CreateThreadReaction.command.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/model/src/thread/CreateThreadReaction.command.ts b/libs/model/src/thread/CreateThreadReaction.command.ts index 935360ce7ae..351e57cc40e 100644 --- a/libs/model/src/thread/CreateThreadReaction.command.ts +++ b/libs/model/src/thread/CreateThreadReaction.command.ts @@ -46,7 +46,7 @@ export function CreateThreadReaction(): Command< address_id: address.id!, thread_id: thread.id, reaction: payload.reaction, - calculated_voting_weight, + calculated_voting_weight: calculated_voting_weight?.toString(), canvas_msg_id: payload.canvas_msg_id, canvas_signed_data: payload.canvas_signed_data, }, From 30c886d578a0fc7242dfa5f8abaed9858274d907 Mon Sep 17 00:00:00 2001 From: Marcin Date: Thu, 17 Oct 2024 13:32:39 +0200 Subject: [PATCH 218/425] Add ERC20 contest deployment mutation and props, update contest creation logic. --- .../deploySingleERC20ContestOnchain.ts | 52 +++++++++++++++++++ .../scripts/state/api/contests/index.ts | 2 + .../SignTransactionsStep.tsx | 24 ++++++++- 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 packages/commonwealth/client/scripts/state/api/contests/deploySingleERC20ContestOnchain.ts diff --git a/packages/commonwealth/client/scripts/state/api/contests/deploySingleERC20ContestOnchain.ts b/packages/commonwealth/client/scripts/state/api/contests/deploySingleERC20ContestOnchain.ts new file mode 100644 index 00000000000..aecc3eba5e6 --- /dev/null +++ b/packages/commonwealth/client/scripts/state/api/contests/deploySingleERC20ContestOnchain.ts @@ -0,0 +1,52 @@ +import { useMutation } from '@tanstack/react-query'; + +import { commonProtocol } from '@hicommonwealth/shared'; +import Contest from 'helpers/ContractHelpers/Contest'; + +export interface DeploySingleERC20ContestOnchainProps { + ethChainId: number; + chainRpc: string; + namespaceName: string; + contestInterval: number; + winnerShares: number[]; + voteToken: string; + voterShare: number; + walletAddress: string; + exchangeToken: string; +} + +const deploySingleERC20ContestOnchain = async ({ + ethChainId, + chainRpc, + namespaceName, + contestInterval, + winnerShares, + voteToken, + voterShare, + walletAddress, + exchangeToken, +}: DeploySingleERC20ContestOnchainProps) => { + const contest = new Contest( + '', + commonProtocol.factoryContracts[ethChainId].factory, + chainRpc, + ); + + return await contest.newSingleERC20Contest( + namespaceName, + contestInterval, + winnerShares, + voteToken, + voterShare, + walletAddress, + exchangeToken, + ); +}; + +const useDeploySingleERC20ContestOnchainMutation = () => { + return useMutation({ + mutationFn: deploySingleERC20ContestOnchain, + }); +}; + +export default useDeploySingleERC20ContestOnchainMutation; diff --git a/packages/commonwealth/client/scripts/state/api/contests/index.ts b/packages/commonwealth/client/scripts/state/api/contests/index.ts index bc8e8ac918e..547e154bc27 100644 --- a/packages/commonwealth/client/scripts/state/api/contests/index.ts +++ b/packages/commonwealth/client/scripts/state/api/contests/index.ts @@ -1,6 +1,7 @@ import useCreateContestMutation from './createContest'; import useDeployRecurringContestOnchainMutation from './deployRecurringContestOnchain'; import useDeploySingleContestOnchainMutation from './deploySingleContestOnchain'; +import useDeploySingleERC20ContestOnchainMutation from './deploySingleERC20ContestOnchain'; import useFundContestOnchainMutation from './fundContestOnchain'; import useGetContestBalanceQuery from './getContestBalance'; import useGetContestsQuery from './getContests'; @@ -10,6 +11,7 @@ export { useCreateContestMutation, useDeployRecurringContestOnchainMutation, useDeploySingleContestOnchainMutation, + useDeploySingleERC20ContestOnchainMutation, useFetchFarcasterCastsQuery, useFundContestOnchainMutation, useGetContestBalanceQuery, diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/SignTransactionsStep/SignTransactionsStep.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/SignTransactionsStep/SignTransactionsStep.tsx index 5be63af9567..c5a435f4951 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/SignTransactionsStep/SignTransactionsStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/SignTransactionsStep/SignTransactionsStep.tsx @@ -13,7 +13,9 @@ import { useCreateContestMutation, useDeployRecurringContestOnchainMutation, useDeploySingleContestOnchainMutation, + useDeploySingleERC20ContestOnchainMutation, } from 'state/api/contests'; +import { DeploySingleERC20ContestOnchainProps } from 'state/api/contests/deploySingleERC20ContestOnchain'; import useUserStore from 'state/ui/user'; import { useCommunityStake } from 'views/components/CommunityStake'; import { CWDivider } from 'views/components/component_kit/cw_divider'; @@ -61,6 +63,9 @@ const SignTransactionsStep = ({ useDeploySingleContestOnchainMutation(); const { mutateAsync: deployRecurringContestOnchainMutation } = useDeployRecurringContestOnchainMutation(); + const { mutateAsync: deploySingleERC20ContestOnchainMutation } = + useDeploySingleERC20ContestOnchainMutation(); + const { mutateAsync: createContestMutation } = useCreateContestMutation(); const user = useUserStore(); @@ -115,6 +120,18 @@ const SignTransactionsStep = ({ exchangeToken, }; + const singleERC20 = { + ethChainId, + chainRpc, + namespaceName, + contestInterval: contestLength, + winnerShares, + voteToken: exchangeToken, + voterShare, + walletAddress, + exchangeToken, + } as DeploySingleERC20ContestOnchainProps; + const recurring = { ethChainId, chainRpc, @@ -142,8 +159,11 @@ const SignTransactionsStep = ({ // @ts-expect-error recurring, )) - : // @ts-expect-error - (contestAddress = await deploySingleContestOnchainMutation(single)); + : weightedTopicsEnabled + ? (contestAddress = + await deploySingleERC20ContestOnchainMutation(singleERC20)) + : // @ts-expect-error + (contestAddress = await deploySingleContestOnchainMutation(single)); await createContestMutation({ contest_address: contestAddress, From aba4fa9a3f6198c8087483fa96ff72f8bc57d81e Mon Sep 17 00:00:00 2001 From: israellund Date: Thu, 17 Oct 2024 07:56:58 -0400 Subject: [PATCH 219/425] made requested changes --- .../ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx index f9151a98747..8b4d1082615 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx @@ -188,8 +188,7 @@ export const AuthorAndPublishInfo = ({ - {/*@ts-expect-error */} - {collaboratorsInfo.map( + {collaboratorsInfo?.map( ({ User, }: { From bed841b027773e726710b0861bc14a5b564ebb6c Mon Sep 17 00:00:00 2001 From: Marcin Date: Thu, 17 Oct 2024 14:16:15 +0200 Subject: [PATCH 220/425] Add initialTokenValue to useTokenFinder, update tokenValue logic, and add TokenBanner style. --- .../components/TokenFinder/useTokenFinder.ts | 8 ++++++-- .../steps/DetailsFormStep/DetailsFormStep.scss | 4 ++++ .../steps/DetailsFormStep/DetailsFormStep.tsx | 17 +++++++++++++++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/TokenFinder/useTokenFinder.ts b/packages/commonwealth/client/scripts/views/components/TokenFinder/useTokenFinder.ts index 42aa9cf029f..6a709b1e237 100644 --- a/packages/commonwealth/client/scripts/views/components/TokenFinder/useTokenFinder.ts +++ b/packages/commonwealth/client/scripts/views/components/TokenFinder/useTokenFinder.ts @@ -4,10 +4,14 @@ import { useDebounce } from 'usehooks-ts'; type UseTokenFinderProps = { nodeEthChainId: number; + initialTokenValue?: string | null; }; -const useTokenFinder = ({ nodeEthChainId }: UseTokenFinderProps) => { - const [tokenValue, setTokenValue] = useState(''); +const useTokenFinder = ({ + nodeEthChainId, + initialTokenValue, +}: UseTokenFinderProps) => { + const [tokenValue, setTokenValue] = useState(initialTokenValue || ''); const debouncedTokenValue = useDebounce(tokenValue, 500); const { data: tokenMetadata, isLoading: tokenMetadataLoading } = diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.scss b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.scss index 4186b195fae..03f8bc1e0d1 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.scss +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.scss @@ -261,6 +261,10 @@ } } + .TokenBanner { + margin-bottom: 16px; + } + .CoverImageUploader { max-height: 175px; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx index 92604be93a9..996105e13c4 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx @@ -106,6 +106,7 @@ const DetailsFormStep = ({ tokenMetadataLoading, } = useTokenFinder({ nodeEthChainId: app.chain.meta.ChainNode?.eth_chain_id || 0, + initialTokenValue: contestFormData?.fundingTokenAddress, }); const communityId = app.activeChainId() || ''; @@ -308,6 +309,14 @@ const DetailsFormStep = ({ isSearchable={false} options={weightedTopics} isDisabled={editMode} + onChange={(t) => { + if (t?.weightedVoting === TopicWeightedVoting.ERC20) { + const token = topicsData?.find( + (topic) => topic.id === t.value, + )?.tokenAddress; + setTokenValue(token || ''); + } + }} />
      )} @@ -428,7 +437,11 @@ const DetailsFormStep = ({ debouncedTokenValue={debouncedTokenValue} tokenMetadataLoading={tokenMetadataLoading} tokenMetadata={tokenMetadata} - tokenValue={tokenValue} + tokenValue={ + editMode + ? contestFormData?.fundingTokenAddress || '' + : tokenValue + } setTokenValue={setTokenValue} tokenError={getTokenError()} containerClassName="funding-token-address-input" @@ -774,7 +787,7 @@ const DetailsFormStep = ({
      From a3fac0e37ada012242cf3291e8f0f80ec04762a8 Mon Sep 17 00:00:00 2001 From: israellund Date: Thu, 17 Oct 2024 08:21:19 -0400 Subject: [PATCH 221/425] made requested css change --- .../components/UrlLinkSelector/UrlSelectorItem.tsx | 14 ++++++++------ .../client/styles/components/UrlLinkSelector.scss | 4 +++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelectorItem.tsx b/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelectorItem.tsx index b559214c795..182ce72cbba 100644 --- a/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelectorItem.tsx +++ b/packages/commonwealth/client/scripts/views/components/UrlLinkSelector/UrlSelectorItem.tsx @@ -26,12 +26,14 @@ const UrlSelectorItem = ({ {link.identifier}
      - onClick(link)} - /> +
      + onClick(link)} + /> +
      ); }; diff --git a/packages/commonwealth/client/styles/components/UrlLinkSelector.scss b/packages/commonwealth/client/styles/components/UrlLinkSelector.scss index 67778ab9a0d..2a4683f6aa5 100644 --- a/packages/commonwealth/client/styles/components/UrlLinkSelector.scss +++ b/packages/commonwealth/client/styles/components/UrlLinkSelector.scss @@ -24,7 +24,6 @@ align-items: center; padding-right: 10px; font-size: 14px; - cursor: pointer; .text { width: calc(100% - 15%); @@ -47,6 +46,9 @@ fill: $black; width: 18px; } + .trash-icon { + cursor: pointer; + } } } } From 2f148dee37310543acd05d29e67ffc526bf63635 Mon Sep 17 00:00:00 2001 From: Marcin Date: Thu, 17 Oct 2024 14:26:27 +0200 Subject: [PATCH 222/425] Refactor contest path segment handling logic --- .../scripts/views/components/Breadcrumbs/utils.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/Breadcrumbs/utils.ts b/packages/commonwealth/client/scripts/views/components/Breadcrumbs/utils.ts index 29cea244171..ea8373403d7 100644 --- a/packages/commonwealth/client/scripts/views/components/Breadcrumbs/utils.ts +++ b/packages/commonwealth/client/scripts/views/components/Breadcrumbs/utils.ts @@ -175,14 +175,8 @@ export const generateBreadcrumbs = ( } if (pathSegments.includes('contests')) { - if (pathSegments.length === 4 && pathSegments[1] === 'manage') { - if (pathSegments[3] === 'launch') { - pathSegments[3] = 'Launch Contest'; - } else { - pathSegments[3] = 'Edit Contest'; - } - } else { - pathSegments[2] = 'Leaderboard'; + if (index === 2 && pathSegment !== 'launch') { + label = 'Edit'; } } From 24c9d42457113beff103c23770cd0849d0e369c6 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 05:36:22 -0700 Subject: [PATCH 223/425] type fixes --- libs/model/src/comment/CreateComment.command.ts | 2 +- .../src/comment/CreateCommentReaction.command.ts | 2 +- libs/model/src/services/stakeHelper.ts | 4 ++-- libs/model/src/tester/e2eSeeds.ts | 4 ++-- libs/model/src/thread/CreateThread.command.ts | 2 +- libs/schemas/src/commands/community.schemas.ts | 1 - libs/shared/src/commonProtocol/utils.ts | 15 +++++++++++++-- .../ReactionButton/CommentReactionButton.tsx | 6 +++--- .../component_kit/new_designs/cw_upvote.tsx | 2 +- .../ReactionButton/ReactionButton.tsx | 10 ++++------ 10 files changed, 28 insertions(+), 20 deletions(-) diff --git a/libs/model/src/comment/CreateComment.command.ts b/libs/model/src/comment/CreateComment.command.ts index a0422b3983b..cafd5c52226 100644 --- a/libs/model/src/comment/CreateComment.command.ts +++ b/libs/model/src/comment/CreateComment.command.ts @@ -71,7 +71,7 @@ export function CreateComment(): Command< text, address_id: address.id!, reaction_count: 0, - reaction_weights_sum: 0, + reaction_weights_sum: '0', created_by: '', search: getCommentSearchVector(text), content_url: contentUrl, diff --git a/libs/model/src/comment/CreateCommentReaction.command.ts b/libs/model/src/comment/CreateCommentReaction.command.ts index 412e87a0b3f..9bca7ad2c8c 100644 --- a/libs/model/src/comment/CreateCommentReaction.command.ts +++ b/libs/model/src/comment/CreateCommentReaction.command.ts @@ -38,7 +38,7 @@ export function CreateCommentReaction(): Command< address_id: address.id!, comment_id: comment.id, reaction: payload.reaction, - calculated_voting_weight, + calculated_voting_weight: calculated_voting_weight?.toString(), canvas_msg_id: payload.canvas_msg_id, canvas_signed_data: payload.canvas_signed_data, }, diff --git a/libs/model/src/services/stakeHelper.ts b/libs/model/src/services/stakeHelper.ts index 5d153d68ddc..dd9e28b063f 100644 --- a/libs/model/src/services/stakeHelper.ts +++ b/libs/model/src/services/stakeHelper.ts @@ -17,9 +17,9 @@ import { contractHelpers } from '../services/commonProtocol'; export async function getVotingWeight( topic_id: number, address: string, -): Promise { +): Promise { if (config.STAKE.REACTION_WEIGHT_OVERRIDE) - return config.STAKE.REACTION_WEIGHT_OVERRIDE; + return BigNumber.from(config.STAKE.REACTION_WEIGHT_OVERRIDE); const topic = await models.Topic.findByPk(topic_id, { include: [ diff --git a/libs/model/src/tester/e2eSeeds.ts b/libs/model/src/tester/e2eSeeds.ts index cae953543d3..fb17cf55918 100644 --- a/libs/model/src/tester/e2eSeeds.ts +++ b/libs/model/src/tester/e2eSeeds.ts @@ -201,7 +201,7 @@ export const e2eTestEntities = async function ( stage: 'discussion', view_count: 0, reaction_count: 0, - reaction_weights_sum: 0, + reaction_weights_sum: '0', comment_count: 0, search: getThreadSearchVector( `testThread Title ${-i - 1}`, @@ -233,7 +233,7 @@ export const e2eTestEntities = async function ( stage: 'discussion', view_count: 0, reaction_count: 0, - reaction_weights_sum: 0, + reaction_weights_sum: '0', comment_count: 0, search: getThreadSearchVector( `testThread Title ${-i - 1 - 2}`, diff --git a/libs/model/src/thread/CreateThread.command.ts b/libs/model/src/thread/CreateThread.command.ts index 579350acae6..7b8f77ee5d5 100644 --- a/libs/model/src/thread/CreateThread.command.ts +++ b/libs/model/src/thread/CreateThread.command.ts @@ -131,7 +131,7 @@ export function CreateThread(): Command< view_count: 0, comment_count: 0, reaction_count: 0, - reaction_weights_sum: 0, + reaction_weights_sum: '0', search: getThreadSearchVector(rest.title, body), content_url: contentUrl, }, diff --git a/libs/schemas/src/commands/community.schemas.ts b/libs/schemas/src/commands/community.schemas.ts index 05953b63b97..48204383c89 100644 --- a/libs/schemas/src/commands/community.schemas.ts +++ b/libs/schemas/src/commands/community.schemas.ts @@ -170,7 +170,6 @@ export const CreateTopic = { featured_in_new_post: true, default_offchain_template: true, weighted_voting: true, - chain_node_id: true, token_address: true, token_symbol: true, vote_weight_multiplier: true, diff --git a/libs/shared/src/commonProtocol/utils.ts b/libs/shared/src/commonProtocol/utils.ts index 8a83ce19c58..3f072b9025a 100644 --- a/libs/shared/src/commonProtocol/utils.ts +++ b/libs/shared/src/commonProtocol/utils.ts @@ -1,5 +1,16 @@ -export const calculateVoteWeight = (balance: string, voteWeight: number) => { - return parseInt(balance, 10) * voteWeight; +import { BigNumber } from '@ethersproject/bignumber'; + +export const calculateVoteWeight = ( + balance: string, + voteWeight: number, +): BigNumber => { + // since BigNumber doesn't support float, + // must multiply by scale factor and divide + const balanceBN = BigNumber.from(balance); + const scaleFactor = BigNumber.from(10 ** 18); + const voteWeightBN = BigNumber.from(Math.floor(voteWeight * 10 ** 18)); + const result = balanceBN.mul(voteWeightBN).div(scaleFactor); + return result; }; export enum Denominations { diff --git a/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx b/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx index 23d04be99c8..d1cc9925da0 100644 --- a/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx @@ -1,9 +1,9 @@ -import BigNumber from 'bignumber.js'; import { buildCreateCommentReactionInput } from 'client/scripts/state/api/comments/createReaction'; import { buildDeleteCommentReactionInput } from 'client/scripts/state/api/comments/deleteReaction'; import { useAuthModalStore } from 'client/scripts/state/ui/modals'; import { notifyError } from 'controllers/app/notifications'; import { SessionKeyError } from 'controllers/server/sessions'; +import { BigNumber } from 'ethers'; import React, { useState } from 'react'; import app from 'state'; import useUserStore from 'state/ui/user'; @@ -53,8 +53,8 @@ export const CommentReactionButton = ({ (x) => x?.author === activeAddress, ); const reactionWeightsSum = comment.reactions.reduce( - (acc, curr) => BigNumber.sum(acc, curr.calculatedVotingWeight || 1), - BigNumber(0), + (acc, curr) => BigNumber.from(acc).mul(curr.calculatedVotingWeight || 1), + BigNumber.from(0), ); const handleVoteClick = async (e) => { diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_upvote.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_upvote.tsx index bdca2bee156..516c5d197cc 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_upvote.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/cw_upvote.tsx @@ -48,7 +48,7 @@ export const CWUpvote: FC = ({ weight={active ? 'fill' : 'regular'} /> - {formatBigNumberShort(BigNumber.from(voteCount))} + {formatBigNumberShort(BigNumber.from(voteCount || 0))} ); diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx index 662ff54e938..538b28df4e8 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx @@ -1,9 +1,9 @@ -import BigNumber from 'bignumber.js'; import { buildCreateThreadReactionInput } from 'client/scripts/state/api/threads/createReaction'; import { buildDeleteThreadReactionInput } from 'client/scripts/state/api/threads/deleteReaction'; import { useAuthModalStore } from 'client/scripts/state/ui/modals'; import { notifyError } from 'controllers/app/notifications'; import { SessionKeyError } from 'controllers/server/sessions'; +import { BigNumber } from 'ethers'; import type Thread from 'models/Thread'; import React, { useState } from 'react'; import app from 'state'; @@ -22,8 +22,6 @@ import { CWUpvote } from 'views/components/component_kit/new_designs/cw_upvote'; import { AuthModal } from 'views/modals/AuthModal'; import { ReactionButtonSkeleton } from './ReactionButtonSkeleton'; -BigNumber.config({ EXPONENTIAL_AT: 100 }); - type ReactionButtonProps = { thread: Thread; size: 'small' | 'big'; @@ -49,9 +47,9 @@ export const ReactionButton = ({ const reactionWeightsSum = thread?.associatedReactions?.reduce( - (acc, curr) => BigNumber.sum(acc, curr.voting_weight || 1), - BigNumber(0), - ) || BigNumber(0); + (acc, curr) => BigNumber.from(acc).mul(curr.voting_weight || 1), + BigNumber.from(0), + ) || BigNumber.from(0); const activeAddress = user.activeAccount?.address; const thisUserReaction = thread?.associatedReactions?.filter( From a2009afa511a6c9057444ca65496f7a3ae920b74 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 17 Oct 2024 18:28:12 +0500 Subject: [PATCH 224/425] Added bulk create for group topic permissions --- .../src/community/CreateGroup.command.ts | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/libs/model/src/community/CreateGroup.command.ts b/libs/model/src/community/CreateGroup.command.ts index 514265c9bf4..947eb6c3f77 100644 --- a/libs/model/src/community/CreateGroup.command.ts +++ b/libs/model/src/community/CreateGroup.command.ts @@ -71,21 +71,19 @@ export function CreateGroup(): Command< }, ); - // add topic level interaction permissions for current group - await Promise.all( - (payload.topics || [])?.map(async (t) => { - if (group.id) { - await models.GroupPermission.create( - { - group_id: group.id, - topic_id: t.id, - allowed_actions: t.permissions, - }, - { transaction }, - ); - } - }), - ); + if (group.id) { + // add topic level interaction permissions for current group + const groupPermissions = (payload.topics || []).map((t) => ({ + group_id: group.id!, + topic_id: t.id, + allowed_actions: sequelize.literal( + `ARRAY[${t.permissions.map((p) => `'${p}'`).join(', ')}]::"enum_GroupPermissions_allowed_actions"[]`, + ) as unknown as schemas.PermissionEnum[], + })); + await models.GroupPermission.bulkCreate(groupPermissions, { + transaction, + }); + } } return group.toJSON(); }, From 29cc12f880e7296a9e2e4fb96bcd4f372f41eb9b Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 17 Oct 2024 10:00:26 -0400 Subject: [PATCH 225/425] pass query from index.tsx --- .../client/scripts/views/components/feed.tsx | 29 +++++++------------ .../views/pages/user_dashboard/index.tsx | 20 +++++++++---- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 3784fe063c3..05bbbfbde89 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -20,19 +20,11 @@ import { useFetchCustomDomainQuery } from 'state/api/configuration'; import { useRefreshMembershipQuery } from 'state/api/groups'; import useUserStore from 'state/ui/user'; import Permissions from 'utils/Permissions'; -import { DashboardViews } from 'views/pages/user_dashboard'; import { z } from 'zod'; import { PageNotFound } from '../pages/404'; import { ThreadCard } from '../pages/discussions/ThreadCard'; import { UserDashboardRowSkeleton } from '../pages/user_dashboard/user_dashboard_row'; -type FeedProps = { - dashboardView: DashboardViews; - noFeedMessage: string; - defaultCount?: number; - customScrollParent?: HTMLElement; -}; - const DEFAULT_COUNT = 10; const FeedThread = ({ thread }: { thread: Thread }) => { @@ -180,16 +172,15 @@ function mapThread(thread: z.infer): Thread { }); } -// eslint-disable-next-line react/no-multi-comp -export const Feed = ({ - dashboardView, - noFeedMessage, - customScrollParent, -}: FeedProps) => { - const userFeed = useFetchUserActivityQuery(); - const globalFeed = useFetchGlobalActivityQuery(); +type FeedProps = { + query: typeof useFetchGlobalActivityQuery | typeof useFetchUserActivityQuery; + defaultCount?: number; + customScrollParent?: HTMLElement; +}; - const feed = dashboardView === DashboardViews.Global ? globalFeed : userFeed; +// eslint-disable-next-line react/no-multi-comp +export const Feed = ({ query, customScrollParent }: FeedProps) => { + const feed = query(); if (feed.isLoading) { return ( @@ -211,7 +202,9 @@ export const Feed = ({ if (feed.data.length === 0) { return (
      -
      {noFeedMessage}
      +
      + Join some communities to see Activity! +
      ); } diff --git a/packages/commonwealth/client/scripts/views/pages/user_dashboard/index.tsx b/packages/commonwealth/client/scripts/views/pages/user_dashboard/index.tsx index 20c05b639e9..5ab534223e4 100644 --- a/packages/commonwealth/client/scripts/views/pages/user_dashboard/index.tsx +++ b/packages/commonwealth/client/scripts/views/pages/user_dashboard/index.tsx @@ -1,3 +1,7 @@ +import { + useFetchGlobalActivityQuery, + useFetchUserActivityQuery, +} from 'client/scripts/state/api/feeds/fetchUserActivity'; import { notifyInfo } from 'controllers/app/notifications'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; import useBrowserWindow from 'hooks/useBrowserWindow'; @@ -123,11 +127,17 @@ const UserDashboard = ({ type }: UserDashboardProps) => { />
      - + {activePage === DashboardViews.Global ? ( + + ) : ( + + )}
      {isWindowExtraSmall ? ( <> From f34f0fd1668ca3f8f5432737379809005d8b2a6c Mon Sep 17 00:00:00 2001 From: Salman Date: Thu, 17 Oct 2024 19:10:52 +0500 Subject: [PATCH 226/425] primary-colors-with-clsx-classes --- .../ThreadOptions/ToggleThreadSubscribe.tsx | 3 ++- .../new_designs/cw_thread_action.scss | 6 ++--- .../client/styles/mixins/colors.module.scss | 24 ------------------- 3 files changed, 5 insertions(+), 28 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ToggleThreadSubscribe.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ToggleThreadSubscribe.tsx index 79c1b6833b9..5a087bfd8f7 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ToggleThreadSubscribe.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ToggleThreadSubscribe.tsx @@ -1,3 +1,4 @@ +import clsx from 'clsx'; import Thread from 'models/Thread'; import React, { useCallback, useMemo, useState } from 'react'; import { useCreateThreadSubscriptionMutation } from 'state/api/trpc/subscription/useCreateThreadSubscriptionMutation'; @@ -76,7 +77,7 @@ export const ToggleThreadSubscribe = (props: ToggleThreadSubscribeProps) => { Date: Thu, 17 Oct 2024 19:20:55 +0500 Subject: [PATCH 227/425] Supress complimentry update community call failure --- .../QuickTokenLaunchForm/QuickTokenLaunchForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index 1a4b59054a7..22ad5a2196c 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -217,7 +217,7 @@ export const QuickTokenLaunchForm = ({ ...(sanitizedTokenInfo.imageURL && { icon_url: sanitizedTokenInfo.imageURL, }), - }); + }).catch(() => undefined); // failure of this call shouldn't break this handler setCreatedCommunityId(communityId); onCommunityCreated(communityId); From ecf433d37701ee3d152923df5ef147a276e264d5 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 17 Oct 2024 19:27:50 +0500 Subject: [PATCH 228/425] Fix extra drawer spacing --- .../pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss index 2759540bd06..57185782c26 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss @@ -13,8 +13,6 @@ } @include mediumSmall { - top: 48px !important; - > .QuickTokenLaunchForm { padding: 0 16px; } From 35a3ab5299e1cfc508480e4540752f5e33af6979 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 17 Oct 2024 19:34:29 +0500 Subject: [PATCH 229/425] Fix `CWDrawerTopBar` close icon overlaying --- .../Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss | 7 ++++++- .../Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss index 57185782c26..ce9689d27f3 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss @@ -10,6 +10,11 @@ .DrawerTopBar { padding: 0; + margin-left: -36px; + + @include mediumSmallMid { + margin-left: -26px; + } } @include mediumSmall { @@ -25,7 +30,7 @@ padding-bottom: 60px !important; @include mediumSmallMid { - padding: 24px; + padding: 20px 32px; padding-bottom: 60px !important; } diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx index 43ca937498f..d211dfbd91e 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx @@ -57,7 +57,6 @@ export const TokenLaunchDrawer = ({ onClose={handleDrawerCloseTrigger} >
      - {/* TODO: fix this icon overlapping other elements on scroll */} {isOpen && ( From 64597896e5e143b9fc0df9b057dfd020aadc2f57 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Thu, 17 Oct 2024 19:40:05 +0500 Subject: [PATCH 230/425] Fix page counter wrap --- .../QuickTokenLaunchForm/QuickTokenLaunchForm.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss index 49f610a030f..03f075148da 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss @@ -26,8 +26,9 @@ .cta-elements { display: flex; + flex-wrap: wrap; flex-direction: row; - justify-content: space-between; + justify-content: end; align-items: center; gap: 16px; From eadaa995f4a165d62db7c62c511faa0b5cd90464 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 10:55:06 -0700 Subject: [PATCH 231/425] this looks good for the icons but I don't really need the group selector right now ... --- .../toolbars/BlockSelectorButton.tsx | 14 ++--- .../toolbars/CWHeadingButton.tsx | 4 +- .../MarkdownEditor/toolbars/CWListButton.scss | 6 ++ .../MarkdownEditor/toolbars/CWListButton.tsx | 57 +++++++++++++++++++ .../toolbars/ListSelectorButton.tsx | 53 +++++++++++++++++ 5 files changed, 125 insertions(+), 9 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.scss create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListSelectorButton.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 6f97bdd6bf9..ca6135a1345 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -14,23 +14,23 @@ type BlockSelectorButtonProps = Readonly<{ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { const { focus } = props; - const formattingPopoverProps = usePopover(); + const popoverProps = usePopover(); const currentBlockType = useCellValue(currentBlockType$); const handleClick = useCallback( (event: React.MouseEvent) => { - formattingPopoverProps.handleInteraction(event); + popoverProps.handleInteraction(event); focus(); }, - [focus, formattingPopoverProps], + [focus, popoverProps], ); const handleFormatButtonClick = useCallback( (event: React.MouseEvent) => { - formattingPopoverProps.handleInteraction(event); + popoverProps.handleInteraction(event); }, - [formattingPopoverProps], + [popoverProps], ); return ( @@ -40,7 +40,7 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { +
      @@ -51,7 +51,7 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { />
      } - {...formattingPopoverProps} + {...popoverProps} />
      ); diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx index eae1a67c174..6c6ebfc0f46 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx @@ -12,12 +12,12 @@ import CWIconButton from 'views/components/component_kit/new_designs/CWIconButto import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; import './CWHeadingButton.scss'; -export type HeadingButtonProps = Readonly<{ +export type CWHeadingButtonProps = Readonly<{ blockType: 'h1' | 'h2' | 'h3' | 'quote' | 'p'; onClick?: (event: React.MouseEvent) => void; }>; -export const CWHeadingButton = (props: HeadingButtonProps) => { +export const CWHeadingButton = (props: CWHeadingButtonProps) => { const { blockType, onClick } = props; const currentBlockType = useCellValue(currentBlockType$); diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.scss new file mode 100644 index 00000000000..788a164b21a --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.scss @@ -0,0 +1,6 @@ +@import '../../../../../styles/shared'; + +.CWListButtonActive { + font-weight: bold; + background-color: $neutral-100; +} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.tsx new file mode 100644 index 00000000000..49792414bcf --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.tsx @@ -0,0 +1,57 @@ +import { + applyListType$, + currentListType$, + useCellValues, + usePublisher, +} from 'commonwealth-mdxeditor'; +import React, { useCallback } from 'react'; +import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; +import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; +import './CWListButton.scss'; + +export type ListType = 'number' | 'bullet' | 'check'; + +export type CWListButtonProps = Readonly<{ + listType: ListType; +}>; + +function listTypeToIconName(listType: ListType) { + switch (listType) { + case 'number': + return 'listNumbers'; + case 'bullet': + return 'listDashes'; + case 'check': + return 'listChecks'; + } +} + +export const CWListButton = (props: CWListButtonProps) => { + const { listType } = props; + + const [currentListType] = useCellValues(currentListType$); + + const applyListType = usePublisher(applyListType$); + + const active = listType === currentListType; + + const handleClick = useCallback(() => { + applyListType(listType); + }, [applyListType, listType]); + + return ( + ( + + )} + /> + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListSelectorButton.tsx new file mode 100644 index 00000000000..33895738995 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListSelectorButton.tsx @@ -0,0 +1,53 @@ +import React, { useCallback } from 'react'; +import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; +import { blockTypeToIcon } from 'views/components/MarkdownEditor/toolbars/blockTypeToIcon'; +import CWPopover, { + usePopover, +} from 'views/components/component_kit/new_designs/CWPopover'; + +type ListSelectorButtonProps = Readonly<{ + focus: () => void; +}>; + +export const ListSelectorButton = (props: ListSelectorButtonProps) => { + const { focus } = props; + const popoverProps = usePopover(); + + const handleClick = useCallback( + (event: React.MouseEvent) => { + popoverProps.handleInteraction(event); + focus(); + }, + [focus, popoverProps], + ); + + const handleFormatButtonClick = useCallback( + (event: React.MouseEvent) => { + popoverProps.handleInteraction(event); + }, + [popoverProps], + ); + + return ( +
      + + + + + + + + +
      + } + {...popoverProps} + /> +
      + ); +}; From 5b78618e1ad91ff83cae14b5ef169b9beafc9a4b Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 11:03:26 -0700 Subject: [PATCH 232/425] more mobile buttons sync up and handling the format changes. --- .../MarkdownEditor/toolbars/CWListButton.tsx | 8 ++- .../toolbars/ListSelectorButton.tsx | 53 ------------------- .../toolbars/MobileOverflowButton.tsx | 40 ++++++++++++++ .../toolbars/ToolbarForMobile.tsx | 18 +++++-- 4 files changed, 59 insertions(+), 60 deletions(-) delete mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListSelectorButton.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.tsx index 49792414bcf..55a98a5df8a 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWListButton.tsx @@ -36,8 +36,12 @@ export const CWListButton = (props: CWListButtonProps) => { const active = listType === currentListType; const handleClick = useCallback(() => { - applyListType(listType); - }, [applyListType, listType]); + if (active) { + applyListType(''); + } else { + applyListType(listType); + } + }, [active, applyListType, listType]); return ( void; -}>; - -export const ListSelectorButton = (props: ListSelectorButtonProps) => { - const { focus } = props; - const popoverProps = usePopover(); - - const handleClick = useCallback( - (event: React.MouseEvent) => { - popoverProps.handleInteraction(event); - focus(); - }, - [focus, popoverProps], - ); - - const handleFormatButtonClick = useCallback( - (event: React.MouseEvent) => { - popoverProps.handleInteraction(event); - }, - [popoverProps], - ); - - return ( -
      - - - - - - - - -
      - } - {...popoverProps} - /> -
      - ); -}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx new file mode 100644 index 00000000000..5ccd1fd41c9 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx @@ -0,0 +1,40 @@ +import React, { useCallback } from 'react'; +import CWPopover, { + usePopover, +} from 'views/components/component_kit/new_designs/CWPopover'; + +type MobileOverflowButtonProps = Readonly<{ + focus: () => void; +}>; + +export const MobileOverflowButton = (props: MobileOverflowButtonProps) => { + const { focus } = props; + const popoverProps = usePopover(); + + const handleClick = useCallback( + (event: React.MouseEvent) => { + popoverProps.handleInteraction(event); + focus(); + }, + [focus, popoverProps], + ); + + const handleFormatButtonClick = useCallback( + (event: React.MouseEvent) => { + popoverProps.handleInteraction(event); + }, + [popoverProps], + ); + + return ( +
      + {/**/} + +
      } + {...popoverProps} + /> +
  • + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index ffdf08ce95d..9a8fd5fd574 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -1,8 +1,14 @@ -import { CreateLink, ListsToggle, Separator } from 'commonwealth-mdxeditor'; +import { + CreateLink, + IS_BOLD, + IS_ITALIC, + Separator, +} from 'commonwealth-mdxeditor'; import React, { ReactNode, useCallback, useEffect } from 'react'; import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/BlockSelectorButton'; -import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; +import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; +import { CWListButton } from 'views/components/MarkdownEditor/toolbars/CWListButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; import './ToolbarForMobile.scss'; @@ -65,11 +71,13 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => {
    - - + + + + + -
    {SubmitButton && }
    From 8f9358ede96ccc6e71c39e255bae3d97ca58fc47 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 11:19:00 -0700 Subject: [PATCH 233/425] overflow button almost works. I have to dispose of the popover though. --- .../toolbars/MobileOverflowButton.scss | 19 ++++++++ .../toolbars/MobileOverflowButton.tsx | 44 +++++++++++++------ .../toolbars/ToolbarForMobile.tsx | 3 ++ .../new_designs/CWPopover/CWPopover.tsx | 10 +++++ 4 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.scss diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.scss new file mode 100644 index 00000000000..e75f045e05a --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.scss @@ -0,0 +1,19 @@ +.MobileOverflowButton { + button { + outline: none; + border: none; + cursor: pointer; + } +} + +.MobileOverflowButtonPopover { + padding: 4px; + + margin-bottom: 8px; + margin-top: 8px; + + button { + outline: none; + border: none; + } +} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx index 5ccd1fd41c9..d6ba95bc4bb 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx @@ -1,8 +1,15 @@ +import ClickAwayListener from '@mui/base/ClickAwayListener'; +import { IS_STRIKETHROUGH } from 'commonwealth-mdxeditor'; import React, { useCallback } from 'react'; +import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; +import { CWListButton } from 'views/components/MarkdownEditor/toolbars/CWListButton'; +import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; import CWPopover, { usePopover, } from 'views/components/component_kit/new_designs/CWPopover'; +import './MobileOverflowButton.scss'; + type MobileOverflowButtonProps = Readonly<{ focus: () => void; }>; @@ -19,22 +26,31 @@ export const MobileOverflowButton = (props: MobileOverflowButtonProps) => { [focus, popoverProps], ); - const handleFormatButtonClick = useCallback( - (event: React.MouseEvent) => { - popoverProps.handleInteraction(event); - }, - [popoverProps], - ); + const handleClickAway = useCallback(() => { + popoverProps.dispose(); + }, [popoverProps]); return ( -
    - {/**/} + +
    + -
    } - {...popoverProps} - /> -
    + + + + + } + {...popoverProps} + /> + + ); }; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index 9a8fd5fd574..ea74f6c14d5 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -10,6 +10,7 @@ import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/Bl import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; import { CWListButton } from 'views/components/MarkdownEditor/toolbars/CWListButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; +import { MobileOverflowButton } from 'views/components/MarkdownEditor/toolbars/MobileOverflowButton'; import './ToolbarForMobile.scss'; type ToolbarForMobileProps = Readonly<{ @@ -80,6 +81,8 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { + +
    {SubmitButton && }
    ); diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWPopover/CWPopover.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWPopover/CWPopover.tsx index 09581a2abcf..eca67c90293 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWPopover/CWPopover.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWPopover/CWPopover.tsx @@ -19,6 +19,11 @@ export type UsePopoverProps = { open: boolean; setAnchorEl: React.Dispatch>; handleInteraction: (e: React.MouseEvent) => void; + + /** + * Force the popup to vanish. Can be used for click-away listeners, etc. + */ + dispose: () => void; }; // Developer can pass either: @@ -59,6 +64,10 @@ export const usePopover = (): UsePopoverProps => { setAnchorEl(anchorEl ? null : e.currentTarget); }; + const dispose = () => { + setAnchorEl(null); + }; + const open = !!anchorEl; const id = open ? `popover-${uuidv4()}` : undefined; @@ -70,6 +79,7 @@ export const usePopover = (): UsePopoverProps => { open, setAnchorEl, handleInteraction, + dispose, }; }; From a34c451fdc739be524df1db5a7bffe3810cf321a Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:10:36 -0700 Subject: [PATCH 234/425] more cleanup... --- .../toolbars/BlockSelectorButton.tsx | 15 ++++++++++-- .../toolbars/CWHeadingButton.tsx | 6 +---- .../MarkdownEditor/toolbars/CWListButton.tsx | 21 ++++++++++------- .../toolbars/MobileOverflowButton.tsx | 2 +- .../toolbars/blockTypeToIcon.tsx | 23 ------------------- .../toolbars/blockTypeToIconName.tsx | 22 ++++++++++++++++++ 6 files changed, 50 insertions(+), 39 deletions(-) delete mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIcon.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIconName.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index ca6135a1345..9f97918dc98 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -1,7 +1,8 @@ import { currentBlockType$, useCellValue } from 'commonwealth-mdxeditor'; import React, { useCallback } from 'react'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; -import { blockTypeToIcon } from 'views/components/MarkdownEditor/toolbars/blockTypeToIcon'; +import { blockTypeToIconName } from 'views/components/MarkdownEditor/toolbars/blockTypeToIconName'; +import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; import CWPopover, { usePopover, } from 'views/components/component_kit/new_designs/CWPopover'; @@ -33,9 +34,19 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { [popoverProps], ); + // FIXME use click away listener... + // FIXME what about list items that don't have an icon when you place the + // cursor in the wrong block. No icon will be picked. + // FIXME: the spacing for the P icon is wrong + // + + const iconName = blockTypeToIconName(currentBlockType); + return (
    - + { const currentBlockType = useCellValue(currentBlockType$); const convertSelectionToNode = usePublisher(convertSelectionToNode$); - const applyFormat = usePublisher(applyFormat$); const active = currentBlockType === blockType; @@ -45,12 +43,10 @@ export const CWHeadingButton = (props: CWHeadingButtonProps) => { onClick?.(event); }, - [active, applyFormat, blockType, convertSelectionToNode, onClick], + [active, blockType, convertSelectionToNode, onClick], ); // TODO: there's a bug in handleInteraction here where it's not going away - // TODO: same thing with onMouseLeave. It doesn't reliably seem to nuke - // the tooltip return ( ) => void; }>; function listTypeToIconName(listType: ListType) { @@ -27,7 +28,7 @@ function listTypeToIconName(listType: ListType) { } export const CWListButton = (props: CWListButtonProps) => { - const { listType } = props; + const { listType, onClick } = props; const [currentListType] = useCellValues(currentListType$); @@ -35,13 +36,17 @@ export const CWListButton = (props: CWListButtonProps) => { const active = listType === currentListType; - const handleClick = useCallback(() => { - if (active) { - applyListType(''); - } else { - applyListType(listType); - } - }, [active, applyListType, listType]); + const handleClick = useCallback( + (event: React.MouseEvent) => { + if (active) { + applyListType(''); + } else { + applyListType(listType); + } + onClick?.(event); + }, + [active, applyListType, listType, onClick], + ); return ( { format={IS_STRIKETHROUGH} formatName="strikethrough" /> - +
    } {...popoverProps} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIcon.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIcon.tsx deleted file mode 100644 index c245c59675f..00000000000 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIcon.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { BlockType } from 'commonwealth-mdxeditor'; -import React, { ReactNode } from 'react'; -import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; - -export function blockTypeToIcon(blockType: BlockType): ReactNode { - switch (blockType) { - case 'paragraph': - return ; - case 'quote': - return ; - case 'h1': - return ; - case 'h2': - return ; - case 'h3': - return ; - case 'h4': - case 'h5': - case 'h6': - case '': - return null; - } -} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIconName.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIconName.tsx new file mode 100644 index 00000000000..c09db757b9f --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/blockTypeToIconName.tsx @@ -0,0 +1,22 @@ +import { BlockType } from 'commonwealth-mdxeditor'; +import { IconName } from 'views/components/component_kit/cw_icons/cw_icon_lookup'; + +export function blockTypeToIconName(blockType: BlockType): IconName | null { + switch (blockType) { + case 'paragraph': + return 'p'; + case 'quote': + return 'q'; + case 'h1': + return 'h1'; + case 'h2': + return 'h2'; + case 'h3': + return 'h3'; + case 'h4': + case 'h5': + case 'h6': + case '': + return null; + } +} From d6492f33990bc033135debe09cb9442656aeb08e Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:14:14 -0700 Subject: [PATCH 235/425] implemented click away listener now. --- .../toolbars/BlockSelectorButton.tsx | 63 ++++++++++++------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 9f97918dc98..7d9438bb754 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -1,3 +1,4 @@ +import ClickAwayListener from '@mui/base/ClickAwayListener'; import { currentBlockType$, useCellValue } from 'commonwealth-mdxeditor'; import React, { useCallback } from 'react'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; @@ -34,36 +35,52 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { [popoverProps], ); - // FIXME use click away listener... + const handleClickAway = useCallback(() => { + popoverProps.dispose(); + }, [popoverProps]); + // FIXME what about list items that don't have an icon when you place the // cursor in the wrong block. No icon will be picked. // FIXME: the spacing for the P icon is wrong - // const iconName = blockTypeToIconName(currentBlockType); return ( -
    - + +
    + - - - - - - -
    - } - {...popoverProps} - /> -
    + + + + + + + + } + {...popoverProps} + /> + + ); }; From 78024d9fe586e4c1ed20ee1ade2b6ba21ea564ee Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 12:22:59 -0700 Subject: [PATCH 236/425] add tests for vote weight calc + fix vote weight UI rendering --- libs/model/src/services/stakeHelper.ts | 9 ++-- libs/shared/src/commonProtocol/utils.ts | 15 +++--- libs/shared/test/commonProtocol.spec.ts | 50 +++++++++++++++++++ .../VoteWeightModule/VoteWeightModule.tsx | 4 +- .../ReactionButton/CommentReactionButton.tsx | 2 +- .../new_designs/CWUpvoteSmall.tsx | 2 +- .../CommunitySection/CommunitySection.tsx | 2 +- .../ReactionButton/ReactionButton.tsx | 2 +- .../commonwealth/shared/adapters/currency.ts | 13 ++--- 9 files changed, 73 insertions(+), 26 deletions(-) create mode 100644 libs/shared/test/commonProtocol.spec.ts diff --git a/libs/model/src/services/stakeHelper.ts b/libs/model/src/services/stakeHelper.ts index dd9e28b063f..40b35bf874d 100644 --- a/libs/model/src/services/stakeHelper.ts +++ b/libs/model/src/services/stakeHelper.ts @@ -1,7 +1,7 @@ import { InvalidState } from '@hicommonwealth/core'; import { TopicWeightedVoting } from '@hicommonwealth/schemas'; import { BalanceSourceType, commonProtocol } from '@hicommonwealth/shared'; -import { BigNumber, utils } from 'ethers'; +import { BigNumber } from 'ethers'; import { tokenBalanceCache } from '.'; import { config } from '../config'; import { models } from '../database'; @@ -77,11 +77,12 @@ export async function getVotingWeight( }, cacheRefresh: true, }); - const balance = utils.formatUnits(balances[address], 18); - return commonProtocol.calculateVoteWeight( - balance, + const result = commonProtocol.calculateVoteWeight( + balances[address], topic.vote_weight_multiplier!, ); + // only count full ERC20 tokens + return result?.div(BigNumber.from(10).pow(18)) || null; } // no weighted voting diff --git a/libs/shared/src/commonProtocol/utils.ts b/libs/shared/src/commonProtocol/utils.ts index 3f072b9025a..61b090f5d9e 100644 --- a/libs/shared/src/commonProtocol/utils.ts +++ b/libs/shared/src/commonProtocol/utils.ts @@ -1,15 +1,14 @@ import { BigNumber } from '@ethersproject/bignumber'; export const calculateVoteWeight = ( - balance: string, + balance: string, // should be in wei voteWeight: number, -): BigNumber => { - // since BigNumber doesn't support float, - // must multiply by scale factor and divide - const balanceBN = BigNumber.from(balance); - const scaleFactor = BigNumber.from(10 ** 18); - const voteWeightBN = BigNumber.from(Math.floor(voteWeight * 10 ** 18)); - const result = balanceBN.mul(voteWeightBN).div(scaleFactor); +): BigNumber | null => { + if (!balance || voteWeight <= 0) return null; + const bigBalance = BigNumber.from(balance); + const precision = 1e6; + const scaledVoteWeight = Math.floor(voteWeight * precision); + const result = bigBalance.mul(scaledVoteWeight).div(precision); return result; }; diff --git a/libs/shared/test/commonProtocol.spec.ts b/libs/shared/test/commonProtocol.spec.ts new file mode 100644 index 00000000000..421ae3e5c90 --- /dev/null +++ b/libs/shared/test/commonProtocol.spec.ts @@ -0,0 +1,50 @@ +import { calculateVoteWeight } from 'shared/src/commonProtocol'; +import { describe, expect, it } from 'vitest'; + +describe('commonProtocol', () => { + describe('calculateVoteWeight', () => { + it('should calculate voting weight for balance with 1 multiplier', () => { + { + const result = calculateVoteWeight('1', 1); + expect(result!.toString()).eq('1'); + } + + { + const result = calculateVoteWeight('1000', 1); + expect(result!.toString()).eq('1000'); + } + }); + + it('should calculate voting weight for balance with > 1 multiplier', () => { + { + const result = calculateVoteWeight('1', 3); + expect(result!.toString()).eq('3'); + } + + { + const result = calculateVoteWeight('1000', 3); + expect(result!.toString()).eq('3000'); + } + + { + const result = calculateVoteWeight('1000000000000000000000000000', 7); + expect(result!.toString()).eq('7000000000000000000000000000'); + } + + { + const result = calculateVoteWeight('10', 1.5); + expect(result!.toString()).eq('15'); + } + + { + const result = calculateVoteWeight('1000', 1.234); + expect(result!.toString()).eq('1234'); + } + + { + const result = calculateVoteWeight('1000', 0.5); + expect(result!.toString()).eq('500'); + } + }); + }); +}); diff --git a/packages/commonwealth/client/scripts/views/components/CommunityStake/VoteWeightModule/VoteWeightModule.tsx b/packages/commonwealth/client/scripts/views/components/CommunityStake/VoteWeightModule/VoteWeightModule.tsx index eb51017f5e9..432f638a5ed 100644 --- a/packages/commonwealth/client/scripts/views/components/CommunityStake/VoteWeightModule/VoteWeightModule.tsx +++ b/packages/commonwealth/client/scripts/views/components/CommunityStake/VoteWeightModule/VoteWeightModule.tsx @@ -17,7 +17,7 @@ import { CWTooltip } from '../../component_kit/new_designs/CWTooltip'; import './VoteWeightModule.scss'; type VoteWeightModuleProps = { - voteWeight: number; + voteWeight: string; stakeNumber: number; stakeValue: number; denomination: string; @@ -72,7 +72,7 @@ export const VoteWeightModule = ({ /> - {isNaN(voteWeight) ? 0 : voteWeight} + {voteWeight}
    diff --git a/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx b/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx index d1cc9925da0..0206da4c7a4 100644 --- a/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx @@ -53,7 +53,7 @@ export const CommentReactionButton = ({ (x) => x?.author === activeAddress, ); const reactionWeightsSum = comment.reactions.reduce( - (acc, curr) => BigNumber.from(acc).mul(curr.calculatedVotingWeight || 1), + (acc, reaction) => acc.add(reaction.calculatedVotingWeight || 1), BigNumber.from(0), ); diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWUpvoteSmall.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWUpvoteSmall.tsx index 0595bffe2b7..b38f7723f7c 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWUpvoteSmall.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/new_designs/CWUpvoteSmall.tsx @@ -58,7 +58,7 @@ const CWUpvoteSmall = ({ action="upvote" isThreadArchived={isThreadArchived} selected={selected} - label={String(voteCount)} + label={voteCount} disabled={disabled} tooltipText={tooltipText} onClick={handleClick} diff --git a/packages/commonwealth/client/scripts/views/components/sidebar/CommunitySection/CommunitySection.tsx b/packages/commonwealth/client/scripts/views/components/sidebar/CommunitySection/CommunitySection.tsx index 704d3a0fa4e..f39ba061d60 100644 --- a/packages/commonwealth/client/scripts/views/components/sidebar/CommunitySection/CommunitySection.tsx +++ b/packages/commonwealth/client/scripts/views/components/sidebar/CommunitySection/CommunitySection.tsx @@ -81,7 +81,7 @@ export const CommunitySection = ({ showSkeleton }: CommunitySectionProps) => { {stakeEnabled && ( BigNumber.from(acc).mul(curr.voting_weight || 1), + (acc, reaction) => acc.add(reaction.voting_weight || 1), BigNumber.from(0), ) || BigNumber.from(0); diff --git a/packages/commonwealth/shared/adapters/currency.ts b/packages/commonwealth/shared/adapters/currency.ts index 87effb34125..278393951fc 100644 --- a/packages/commonwealth/shared/adapters/currency.ts +++ b/packages/commonwealth/shared/adapters/currency.ts @@ -31,7 +31,10 @@ export function formatNumberShort(num: number) { : num.toString(); } -export function formatBigNumberShort(num: BigNumber) { +export function formatBigNumberShort(num: BigNumber): string { + if (num.isZero()) { + return '0'; + } const thousand = BigNumber.from(1_000); const million = BigNumber.from(1_000_000); const billion = BigNumber.from(1_000_000_000); @@ -58,13 +61,7 @@ export function formatBigNumberShort(num: BigNumber) { ? `${round(num, million)}m` : num.gt(thousand) ? `${round(num, thousand)}k` - : num.gt(BigNumber.from(10).pow(1)) - ? round(num, BigNumber.from(1)) - : num.gt(BigNumber.from(10).pow(-1)) - ? precise(num, 2) - : num.gt(BigNumber.from(10).pow(-2)) - ? precise(num, 1) - : num.toString(); + : num.toString(); } const nf = new Intl.NumberFormat(); From db580c8f44d14cd9460ba806da302ef38912951b Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:24:34 -0700 Subject: [PATCH 237/425] cleanup... --- .../MarkdownEditor/toolbars/BlockSelectorButton.tsx | 1 - .../MarkdownEditor/toolbars/CWHeadingButton.tsx | 2 +- .../MarkdownEditor/toolbars/MobileOverflowButton.tsx | 8 +++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 7d9438bb754..786105e52ca 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -41,7 +41,6 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { // FIXME what about list items that don't have an icon when you place the // cursor in the wrong block. No icon will be picked. - // FIXME: the spacing for the P icon is wrong const iconName = blockTypeToIconName(currentBlockType); diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx index e7d650f3809..8d59021e8da 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWHeadingButton.tsx @@ -50,7 +50,7 @@ export const CWHeadingButton = (props: CWHeadingButtonProps) => { return ( ( { format={IS_STRIKETHROUGH} formatName="strikethrough" /> + +
    } {...popoverProps} From abbe7d128e4588aabad8ab6156c4a72f824ac3de Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:30:35 -0700 Subject: [PATCH 238/425] create link button now done. --- .../toolbars/CWCreateLinkButton.tsx | 37 +++++++++++++++++++ .../toolbars/ToolbarForMobile.tsx | 3 +- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWCreateLinkButton.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWCreateLinkButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWCreateLinkButton.tsx new file mode 100644 index 00000000000..ef7ed7f1ab3 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWCreateLinkButton.tsx @@ -0,0 +1,37 @@ +import { openLinkEditDialog$, usePublisher } from 'commonwealth-mdxeditor'; +import React, { useCallback } from 'react'; +import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; +import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; +import './CWHeadingButton.scss'; + +export type CWCreateLinkButtonProps = Readonly<{ + onClick?: (event: React.MouseEvent) => void; +}>; + +export const CWCreateLinkButton = (props: CWCreateLinkButtonProps) => { + const { onClick } = props; + const openLinkDialog = usePublisher(openLinkEditDialog$); + + const handleClick = useCallback( + (event: React.MouseEvent) => { + openLinkDialog(); + onClick?.(event); + }, + [onClick, openLinkDialog], + ); + + return ( + ( + + )} + /> + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index ea74f6c14d5..47857e05b5a 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -7,6 +7,7 @@ import { import React, { ReactNode, useCallback, useEffect } from 'react'; import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/BlockSelectorButton'; +import { CWCreateLinkButton } from 'views/components/MarkdownEditor/toolbars/CWCreateLinkButton'; import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; import { CWListButton } from 'views/components/MarkdownEditor/toolbars/CWListButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; @@ -74,7 +75,7 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { - + From 8daa700ca17b3b26cef05b1bccaa8716b9603fa2 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:34:12 -0700 Subject: [PATCH 239/425] link button done now... --- .../MarkdownEditor/toolbars/ToolbarForDesktop.tsx | 4 ++-- .../MarkdownEditor/toolbars/ToolbarForMobile.tsx | 8 +------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index 3f06e54ff62..c9e7d7f4a81 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -1,7 +1,6 @@ import { ChangeCodeMirrorLanguage, ConditionalContents, - CreateLink, InsertCodeBlock, InsertTable, IS_BOLD, @@ -14,6 +13,7 @@ import { Separator, } from 'commonwealth-mdxeditor'; import React from 'react'; +import { CWCreateLinkButton } from 'views/components/MarkdownEditor/toolbars/CWCreateLinkButton'; import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; @@ -77,7 +77,7 @@ export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => {
    - + diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index 47857e05b5a..2ca689e44e4 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -1,9 +1,4 @@ -import { - CreateLink, - IS_BOLD, - IS_ITALIC, - Separator, -} from 'commonwealth-mdxeditor'; +import { IS_BOLD, IS_ITALIC, Separator } from 'commonwealth-mdxeditor'; import React, { ReactNode, useCallback, useEffect } from 'react'; import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/BlockSelectorButton'; @@ -79,7 +74,6 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { - From 1bca687438f130500668bf4adab233b8a325a961 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:36:27 -0700 Subject: [PATCH 240/425] insert code next... --- .../MarkdownEditor/toolbars/CWTableButton.tsx | 37 +++++++++++++++++++ .../toolbars/MobileOverflowButton.tsx | 9 ++--- 2 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx new file mode 100644 index 00000000000..e0f2c7d2544 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx @@ -0,0 +1,37 @@ +import { insertTable$, usePublisher } from 'commonwealth-mdxeditor'; +import React, { useCallback } from 'react'; +import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; +import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; +import './CWHeadingButton.scss'; + +export type CWCreateLinkButtonProps = Readonly<{ + onClick?: (event: React.MouseEvent) => void; +}>; + +export const CWCreateLinkButton = (props: CWCreateLinkButtonProps) => { + const { onClick } = props; + const insertTable = usePublisher(insertTable$); + + const handleClick = useCallback( + (event: React.MouseEvent) => { + insertTable({ rows: 3, columns: 3 }); + onClick?.(event); + }, + [onClick, insertTable], + ); + + return ( + ( + + )} + /> + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx index bd32eb27654..ea650420330 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx @@ -1,9 +1,5 @@ import ClickAwayListener from '@mui/base/ClickAwayListener'; -import { - IS_STRIKETHROUGH, - InsertCodeBlock, - InsertTable, -} from 'commonwealth-mdxeditor'; +import { IS_STRIKETHROUGH, InsertCodeBlock } from 'commonwealth-mdxeditor'; import React, { useCallback } from 'react'; import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; import { CWListButton } from 'views/components/MarkdownEditor/toolbars/CWListButton'; @@ -12,6 +8,7 @@ import CWPopover, { usePopover, } from 'views/components/component_kit/new_designs/CWPopover'; +import { CWCreateLinkButton } from 'views/components/MarkdownEditor/toolbars/CWTableButton'; import './MobileOverflowButton.scss'; type MobileOverflowButtonProps = Readonly<{ @@ -51,7 +48,7 @@ export const MobileOverflowButton = (props: MobileOverflowButtonProps) => { /> - +
    } {...popoverProps} From 27d3a7af2e4dc32a115a30b719114598fc739b5e Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 12:36:41 -0700 Subject: [PATCH 241/425] set topic weight multiplier min to 1 --- libs/schemas/src/entities/topic.schemas.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/schemas/src/entities/topic.schemas.ts b/libs/schemas/src/entities/topic.schemas.ts index dc3b9757304..61c863d048a 100644 --- a/libs/schemas/src/entities/topic.schemas.ts +++ b/libs/schemas/src/entities/topic.schemas.ts @@ -49,6 +49,7 @@ export const Topic = z.object({ .describe('token symbol, used for ERC20 topics'), vote_weight_multiplier: z .number() + .min(1) .nullish() .describe('vote weight multiplier, used for ERC20 topics'), From 3ca737e92c554728ed5f546f0e71d97404dc4b07 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:38:21 -0700 Subject: [PATCH 242/425] create table now... ust 2-3 more. --- .../components/MarkdownEditor/toolbars/CWTableButton.tsx | 4 ++-- .../MarkdownEditor/toolbars/MobileOverflowButton.tsx | 4 ++-- .../components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx index e0f2c7d2544..957270fe6d4 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx @@ -4,11 +4,11 @@ import CWIconButton from 'views/components/component_kit/new_designs/CWIconButto import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; import './CWHeadingButton.scss'; -export type CWCreateLinkButtonProps = Readonly<{ +export type CWTableButtonProps = Readonly<{ onClick?: (event: React.MouseEvent) => void; }>; -export const CWCreateLinkButton = (props: CWCreateLinkButtonProps) => { +export const CWTableButton = (props: CWTableButtonProps) => { const { onClick } = props; const insertTable = usePublisher(insertTable$); diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx index ea650420330..a84ac1dfc45 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx @@ -8,7 +8,7 @@ import CWPopover, { usePopover, } from 'views/components/component_kit/new_designs/CWPopover'; -import { CWCreateLinkButton } from 'views/components/MarkdownEditor/toolbars/CWTableButton'; +import { CWTableButton } from 'views/components/MarkdownEditor/toolbars/CWTableButton'; import './MobileOverflowButton.scss'; type MobileOverflowButtonProps = Readonly<{ @@ -48,7 +48,7 @@ export const MobileOverflowButton = (props: MobileOverflowButtonProps) => { /> - +
    } {...popoverProps} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index c9e7d7f4a81..e37994c1f6c 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -2,7 +2,6 @@ import { ChangeCodeMirrorLanguage, ConditionalContents, InsertCodeBlock, - InsertTable, IS_BOLD, IS_ITALIC, IS_STRIKETHROUGH, @@ -16,6 +15,7 @@ import React from 'react'; import { CWCreateLinkButton } from 'views/components/MarkdownEditor/toolbars/CWCreateLinkButton'; import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; +import { CWTableButton } from 'views/components/MarkdownEditor/toolbars/CWTableButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; import { QuoteButton } from 'views/components/MarkdownEditor/toolbars/QuoteButton'; import './ToolbarForDesktop.scss'; @@ -81,7 +81,7 @@ export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => { - + ), From 0468a74a1cc3b685a7000dc8396ad787d454bdcc Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:46:15 -0700 Subject: [PATCH 243/425] desktop editor now has all the right button... --- .../toolbars/CWInsertCodeBlockButton.tsx | 39 +++++++++++++++++++ .../toolbars/FileUploadButton.tsx | 11 +++++- .../MarkdownEditor/toolbars/ImageButton.tsx | 14 ++++++- .../toolbars/ToolbarForDesktop.tsx | 13 ++++--- 4 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWInsertCodeBlockButton.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWInsertCodeBlockButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWInsertCodeBlockButton.tsx new file mode 100644 index 00000000000..7b49288c19a --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWInsertCodeBlockButton.tsx @@ -0,0 +1,39 @@ +import { insertCodeBlock$, usePublisher } from 'commonwealth-mdxeditor'; +import React, { useCallback } from 'react'; +import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; +import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; +import './CWHeadingButton.scss'; + +export type CWInsertCodeBlockButtonProps = Readonly<{ + onClick?: (event: React.MouseEvent) => void; +}>; + +export const CWInsertCodeBlockButton = ( + props: CWInsertCodeBlockButtonProps, +) => { + const { onClick } = props; + const insertCodeBlock = usePublisher(insertCodeBlock$); + + const handleClick = useCallback( + (event: React.MouseEvent) => { + insertCodeBlock({}); + onClick?.(event); + }, + [onClick, insertCodeBlock], + ); + + return ( + ( + + )} + /> + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.tsx index 517abb6a354..6826ee4e2a1 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FileUploadButton.tsx @@ -4,6 +4,7 @@ import { DEFAULT_ICON_SIZE } from 'views/components/MarkdownEditor/utils/iconCom import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; import type { IconName } from 'views/components/component_kit/cw_icons/cw_icon_lookup'; +import { AnchorType } from 'views/components/component_kit/new_designs/CWPopover'; import './FileUploadButton.scss'; type FileUploadButtonProps = Readonly<{ @@ -11,12 +12,14 @@ type FileUploadButtonProps = Readonly<{ iconName: IconName; onFile?: (file: File) => void; text?: string; + onMouseEnter?: (e: React.MouseEvent) => void; + onMouseLeave?: (e: React.MouseEvent) => void; }>; export const FileUploadButton = memo(function FileUploadButton( props: FileUploadButtonProps, ) { - const { onFile, accept, iconName, text } = props; + const { onFile, accept, iconName, text, onMouseEnter, onMouseLeave } = props; const fileInputRef = useRef(null); @@ -39,7 +42,11 @@ export const FileUploadButton = memo(function FileUploadButton( ); return ( -
    +
    { const { onImage } = props; return ( - + ( + + )} + /> ); }; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index e37994c1f6c..ccb6374bb6d 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -1,23 +1,22 @@ import { ChangeCodeMirrorLanguage, ConditionalContents, - InsertCodeBlock, IS_BOLD, IS_ITALIC, IS_STRIKETHROUGH, IS_SUBSCRIPT, IS_SUPERSCRIPT, IS_UNDERLINE, - ListsToggle, Separator, } from 'commonwealth-mdxeditor'; import React from 'react'; import { CWCreateLinkButton } from 'views/components/MarkdownEditor/toolbars/CWCreateLinkButton'; import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; +import { CWInsertCodeBlockButton } from 'views/components/MarkdownEditor/toolbars/CWInsertCodeBlockButton'; +import { CWListButton } from 'views/components/MarkdownEditor/toolbars/CWListButton'; import { CWTableButton } from 'views/components/MarkdownEditor/toolbars/CWTableButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; -import { QuoteButton } from 'views/components/MarkdownEditor/toolbars/QuoteButton'; import './ToolbarForDesktop.scss'; type ToolbarForDesktopProps = Readonly<{ @@ -72,15 +71,17 @@ export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => { - + + +
    - - + +
    From 4c8f077519c44251910cdff784577cca4c9a7b3c Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:48:39 -0700 Subject: [PATCH 244/425] ok all the buttons are in sync properly --- .../MarkdownEditor/toolbars/MobileOverflowButton.tsx | 5 +++-- .../components/MarkdownEditor/toolbars/ToolbarForMobile.tsx | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx index a84ac1dfc45..ea9bc1e6b7c 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/MobileOverflowButton.tsx @@ -1,5 +1,5 @@ import ClickAwayListener from '@mui/base/ClickAwayListener'; -import { IS_STRIKETHROUGH, InsertCodeBlock } from 'commonwealth-mdxeditor'; +import { IS_STRIKETHROUGH } from 'commonwealth-mdxeditor'; import React, { useCallback } from 'react'; import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; import { CWListButton } from 'views/components/MarkdownEditor/toolbars/CWListButton'; @@ -8,6 +8,7 @@ import CWPopover, { usePopover, } from 'views/components/component_kit/new_designs/CWPopover'; +import { CWInsertCodeBlockButton } from 'views/components/MarkdownEditor/toolbars/CWInsertCodeBlockButton'; import { CWTableButton } from 'views/components/MarkdownEditor/toolbars/CWTableButton'; import './MobileOverflowButton.scss'; @@ -46,7 +47,7 @@ export const MobileOverflowButton = (props: MobileOverflowButtonProps) => { format={IS_STRIKETHROUGH} formatName="strikethrough" /> - +
    diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx index 2ca689e44e4..3ad1d6774d8 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForMobile.tsx @@ -4,6 +4,7 @@ import React, { ReactNode, useCallback, useEffect } from 'react'; import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/BlockSelectorButton'; import { CWCreateLinkButton } from 'views/components/MarkdownEditor/toolbars/CWCreateLinkButton'; import { CWFormatButton } from 'views/components/MarkdownEditor/toolbars/CWFormatButton'; +import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; import { CWListButton } from 'views/components/MarkdownEditor/toolbars/CWListButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; import { MobileOverflowButton } from 'views/components/MarkdownEditor/toolbars/MobileOverflowButton'; @@ -71,6 +72,7 @@ export const ToolbarForMobile = (props: ToolbarForMobileProps) => { + From afd85f3f924ebf6bdb967f3e1c93ba902b88133e Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 12:49:27 -0700 Subject: [PATCH 245/425] multiplier gt 0 --- libs/schemas/src/entities/topic.schemas.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/schemas/src/entities/topic.schemas.ts b/libs/schemas/src/entities/topic.schemas.ts index 61c863d048a..75943cd5cb0 100644 --- a/libs/schemas/src/entities/topic.schemas.ts +++ b/libs/schemas/src/entities/topic.schemas.ts @@ -49,7 +49,7 @@ export const Topic = z.object({ .describe('token symbol, used for ERC20 topics'), vote_weight_multiplier: z .number() - .min(1) + .gt(0) .nullish() .describe('vote weight multiplier, used for ERC20 topics'), From 255aade5d571de8e6f176d7b8fa5f571bfe734db Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 12:54:50 -0700 Subject: [PATCH 246/425] cleanup... --- .../toolbars/NewDesktopToolbar.tsx | 16 ---------------- .../MarkdownEditor/toolbars/NewToolbar.scss | 15 --------------- 2 files changed, 31 deletions(-) delete mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx delete mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx deleted file mode 100644 index b5f73106e41..00000000000 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewDesktopToolbar.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import { BlockSelectorButton } from 'views/components/MarkdownEditor/toolbars/BlockSelectorButton'; -import './NewToolbar.scss'; - -type NewDesktopToolbarProps = Readonly<{ - focus: () => void; -}>; -//FIXME remove -export const NewDesktopToolbar = (props: NewDesktopToolbarProps) => { - const { focus } = props; - return ( -
    - -
    - ); -}; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss deleted file mode 100644 index ae4e53b3e86..00000000000 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/NewToolbar.scss +++ /dev/null @@ -1,15 +0,0 @@ -.NewToolbar { -} - -// FIXME: remove -.FormattingPopover { - padding: 4px; - - margin-bottom: 8px; - margin-top: 8px; - - button { - outline: none; - border: none; - } -} From 0d0285d84cc9604d57b1edd18be85ab162a8fe5f Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 12:59:03 -0700 Subject: [PATCH 247/425] lint --- .../modals/confirm_snapshot_vote_modal.tsx | 5 +-- .../components/Upvotes.showcase.tsx | 12 +++---- .../commonwealth/shared/adapters/currency.ts | 36 ------------------- 3 files changed, 9 insertions(+), 44 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/modals/confirm_snapshot_vote_modal.tsx b/packages/commonwealth/client/scripts/views/modals/confirm_snapshot_vote_modal.tsx index 7bd052d1d49..5b386ab88b7 100644 --- a/packages/commonwealth/client/scripts/views/modals/confirm_snapshot_vote_modal.tsx +++ b/packages/commonwealth/client/scripts/views/modals/confirm_snapshot_vote_modal.tsx @@ -1,7 +1,8 @@ import React from 'react'; -import { formatNumberShort } from 'adapters/currency'; +import { formatBigNumberShort } from 'adapters/currency'; import { MixpanelSnapshotEvents } from 'analytics/types'; +import { BigNumber } from 'ethers'; import type { SnapshotProposal, SnapshotSpace } from 'helpers/snapshot_utils'; import { useBrowserAnalyticsTrack } from 'hooks/useBrowserAnalyticsTrack'; import useUserStore from 'state/ui/user'; @@ -97,7 +98,7 @@ export const ConfirmSnapshotVoteModal = (
    Your voting power - {`${formatNumberShort(totalScore)} ${space.symbol + {`${formatBigNumberShort(BigNumber.from(totalScore))} ${space.symbol .slice(0, 6) .trim()}...`} diff --git a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Upvotes.showcase.tsx b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Upvotes.showcase.tsx index 65c4ea72b45..954ac4c87e1 100644 --- a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Upvotes.showcase.tsx +++ b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Upvotes.showcase.tsx @@ -8,15 +8,15 @@ const UpvotesShowcase = () => { <> Regular
    - - - + + +
    Small
    @@ -24,7 +24,7 @@ const UpvotesShowcase = () => { popoverContent={
    Upvoters List
    } /> @@ -32,7 +32,7 @@ const UpvotesShowcase = () => { popoverContent={
    Upvoters List
    } /> diff --git a/packages/commonwealth/shared/adapters/currency.ts b/packages/commonwealth/shared/adapters/currency.ts index 278393951fc..d4e2ee5f9fe 100644 --- a/packages/commonwealth/shared/adapters/currency.ts +++ b/packages/commonwealth/shared/adapters/currency.ts @@ -1,36 +1,6 @@ import BN from 'bn.js'; import { BigNumber } from 'ethers'; -// duplicated in helpers.ts -export function formatNumberShort(num: number) { - const round = (n, digits?) => { - if (digits === undefined) digits = 2; - return Math.round(n * 10 ** digits) / 10 ** digits; - }; - - const precise = (n, digits?) => { - if (digits === undefined) digits = 3; - return n.toPrecision(digits); - }; - - // TODO: Clean this up - return num > 1_000_000_000_000 - ? `${round(num / 1_000_000_000_000)}t` - : num > 1_000_000_000 - ? `${round(num / 1_000_000_000)}b` - : num > 1_000_000 - ? `${round(num / 1_000_000)}m` - : num > 1_000 - ? `${round(num / 1_000)}k` - : num > 0.1 - ? round(num) - : num > 0.01 - ? precise(num, 2) - : num > 0.001 - ? precise(num, 1) - : num.toString(); -} - export function formatBigNumberShort(num: BigNumber): string { if (num.isZero()) { return '0'; @@ -46,12 +16,6 @@ export function formatBigNumberShort(num: BigNumber): string { return divided.mul(factor).div(factor).toString(); }; - const precise = (n: BigNumber, digits = 3) => { - // We need to use floating point for precise formatting - const preciseNum = parseFloat(n.toString()); - return preciseNum.toPrecision(digits); - }; - // Compare BigNumber values and format accordingly return num.gt(trillion) ? `${round(num, trillion)}t` From 66657249176207f067386041dc53fe7becad8b52 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 13:04:31 -0700 Subject: [PATCH 248/425] fix missing func --- .../commonwealth/shared/adapters/currency.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/packages/commonwealth/shared/adapters/currency.ts b/packages/commonwealth/shared/adapters/currency.ts index d4e2ee5f9fe..b10534507aa 100644 --- a/packages/commonwealth/shared/adapters/currency.ts +++ b/packages/commonwealth/shared/adapters/currency.ts @@ -1,6 +1,36 @@ import BN from 'bn.js'; import { BigNumber } from 'ethers'; +// duplicated in helpers.ts +export function formatNumberShort(num: number) { + const round = (n, digits?) => { + if (digits === undefined) digits = 2; + return Math.round(n * 10 ** digits) / 10 ** digits; + }; + + const precise = (n, digits?) => { + if (digits === undefined) digits = 3; + return n.toPrecision(digits); + }; + + // TODO: Clean this up + return num > 1_000_000_000_000 + ? `${round(num / 1_000_000_000_000)}t` + : num > 1_000_000_000 + ? `${round(num / 1_000_000_000)}b` + : num > 1_000_000 + ? `${round(num / 1_000_000)}m` + : num > 1_000 + ? `${round(num / 1_000)}k` + : num > 0.1 + ? round(num) + : num > 0.01 + ? precise(num, 2) + : num > 0.001 + ? precise(num, 1) + : num.toString(); +} + export function formatBigNumberShort(num: BigNumber): string { if (num.isZero()) { return '0'; From a222f66ec176eec47ce32d2bc915f467bdf83217 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 13:59:05 -0700 Subject: [PATCH 249/425] model fixes wip --- libs/model/src/models/comment.ts | 2 +- libs/model/src/models/reaction.ts | 5 ++++- libs/model/src/models/thread.ts | 2 +- libs/model/src/models/topic.ts | 2 +- libs/model/test/community/community-lifecycle.spec.ts | 2 +- libs/schemas/src/entities/comment.schemas.ts | 5 +++-- libs/schemas/src/entities/thread.schemas.ts | 4 +++- .../20241016192854-reaction-voting-weight-numeric.js | 4 ++-- 8 files changed, 16 insertions(+), 10 deletions(-) diff --git a/libs/model/src/models/comment.ts b/libs/model/src/models/comment.ts index 8d7f9ebc339..abd1a1aa24c 100644 --- a/libs/model/src/models/comment.ts +++ b/libs/model/src/models/comment.ts @@ -56,7 +56,7 @@ export default ( defaultValue: 0, }, reaction_weights_sum: { - type: Sequelize.INTEGER, + type: Sequelize.DECIMAL(78, 0), allowNull: false, defaultValue: 0, }, diff --git a/libs/model/src/models/reaction.ts b/libs/model/src/models/reaction.ts index 781d12d4367..554c5caedd5 100644 --- a/libs/model/src/models/reaction.ts +++ b/libs/model/src/models/reaction.ts @@ -20,7 +20,10 @@ export default ( comment_id: { type: Sequelize.INTEGER, allowNull: true }, address_id: { type: Sequelize.INTEGER, allowNull: false }, reaction: { type: Sequelize.ENUM('like'), allowNull: false }, - calculated_voting_weight: { type: Sequelize.INTEGER, allowNull: true }, + calculated_voting_weight: { + type: Sequelize.DECIMAL(78, 0), + allowNull: true, + }, // canvas-related columns canvas_signed_data: { type: Sequelize.JSONB, allowNull: true }, canvas_msg_id: { type: Sequelize.STRING, allowNull: true }, diff --git a/libs/model/src/models/thread.ts b/libs/model/src/models/thread.ts index 714720df1c3..ab7fa6174d9 100644 --- a/libs/model/src/models/thread.ts +++ b/libs/model/src/models/thread.ts @@ -77,7 +77,7 @@ export default ( defaultValue: 0, }, reaction_weights_sum: { - type: Sequelize.INTEGER, + type: Sequelize.DECIMAL(78, 0), allowNull: false, defaultValue: 0, }, diff --git a/libs/model/src/models/topic.ts b/libs/model/src/models/topic.ts index 4ff1ce7b49d..fa2289b9b30 100644 --- a/libs/model/src/models/topic.ts +++ b/libs/model/src/models/topic.ts @@ -50,7 +50,7 @@ export default ( weighted_voting: { type: Sequelize.STRING, allowNull: true }, token_address: { type: Sequelize.STRING, allowNull: true }, token_symbol: { type: Sequelize.STRING, allowNull: true }, - vote_weight_multiplier: { type: Sequelize.INTEGER, allowNull: true }, + vote_weight_multiplier: { type: Sequelize.FLOAT, allowNull: true }, }, { timestamps: true, diff --git a/libs/model/test/community/community-lifecycle.spec.ts b/libs/model/test/community/community-lifecycle.spec.ts index 9adb0f9f583..fe52cd1695b 100644 --- a/libs/model/test/community/community-lifecycle.spec.ts +++ b/libs/model/test/community/community-lifecycle.spec.ts @@ -460,7 +460,6 @@ describe('Community lifecycle', () => { }); test('should create topic (stake weighted)', async () => { - // when community is staked, topic will automatically be staked await models.CommunityStake.create({ community_id: community.id, stake_id: 1, @@ -476,6 +475,7 @@ describe('Community lifecycle', () => { description: 'boohoo', featured_in_sidebar: false, featured_in_new_post: false, + weighted_voting: TopicWeightedVoting.Stake, }, }); const { topic } = result!; diff --git a/libs/schemas/src/entities/comment.schemas.ts b/libs/schemas/src/entities/comment.schemas.ts index 6cdeaa05b74..d06eef70005 100644 --- a/libs/schemas/src/entities/comment.schemas.ts +++ b/libs/schemas/src/entities/comment.schemas.ts @@ -41,8 +41,9 @@ export const Comment = z.object({ .nullish(), reaction_count: PG_INT, - reaction_weights_sum: z.string().nullish(), - + reaction_weights_sum: z.string().refine((str) => { + return /^[0-9]+$/.test(str); // only numbers + }), search: z.union([z.string(), z.record(z.any())]), Address: Address.nullish(), diff --git a/libs/schemas/src/entities/thread.schemas.ts b/libs/schemas/src/entities/thread.schemas.ts index 40a5b606f4c..63d75b94ff2 100644 --- a/libs/schemas/src/entities/thread.schemas.ts +++ b/libs/schemas/src/entities/thread.schemas.ts @@ -49,7 +49,9 @@ export const Thread = z.object({ //counts reaction_count: PG_INT.optional(), - reaction_weights_sum: z.string().nullish(), + reaction_weights_sum: z.string().refine((str) => { + return /^[0-9]+$/.test(str); // only numbers + }), comment_count: PG_INT.optional().optional(), activity_rank_date: z.coerce.date().nullish(), diff --git a/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js b/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js index d032b41fdac..e18c9b7c6ad 100644 --- a/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js +++ b/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js @@ -18,7 +18,7 @@ module.exports = { 'reaction_weights_sum', { type: Sequelize.NUMERIC(78, 0), // up to 78 digits with no decimal places - allowNull: true, + allowNull: false, }, { transaction }, ); @@ -27,7 +27,7 @@ module.exports = { 'reaction_weights_sum', { type: Sequelize.NUMERIC(78, 0), // up to 78 digits with no decimal places - allowNull: true, + allowNull: false, }, { transaction }, ); From 472bf1c325d9fd6a65a45ff9445e8ec406302e3c Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 14:08:19 -0700 Subject: [PATCH 250/425] fix migration --- .../migrations/20241016192854-reaction-voting-weight-numeric.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js b/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js index e18c9b7c6ad..e75cda6901f 100644 --- a/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js +++ b/packages/commonwealth/server/migrations/20241016192854-reaction-voting-weight-numeric.js @@ -19,6 +19,7 @@ module.exports = { { type: Sequelize.NUMERIC(78, 0), // up to 78 digits with no decimal places allowNull: false, + defaultValue: 0, }, { transaction }, ); @@ -28,6 +29,7 @@ module.exports = { { type: Sequelize.NUMERIC(78, 0), // up to 78 digits with no decimal places allowNull: false, + defaultValue: 0, }, { transaction }, ); From 6993d39d49704b203ac7595c994c34cf3524e188 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 17 Oct 2024 17:17:43 -0400 Subject: [PATCH 251/425] fist pass --- .../model/src/thread/GetTopics.query.ts | 81 ++++++------- libs/model/src/thread/index.ts | 1 + libs/schemas/src/queries/thread.schemas.ts | 22 +++- .../client/scripts/models/Topic.ts | 108 ++++++------------ .../client/scripts/state/api/config.ts | 1 - .../scripts/state/api/topics/fetchTopics.ts | 37 +++--- .../server/api/external-router.ts | 5 +- packages/commonwealth/server/api/threads.ts | 1 + .../controllers/server_topics_controller.ts | 9 -- .../routes/topics/get_topics_handler.ts | 22 ---- .../commonwealth/server/routing/router.ts | 8 -- 11 files changed, 111 insertions(+), 184 deletions(-) rename packages/commonwealth/server/controllers/server_topics_methods/get_topics.ts => libs/model/src/thread/GetTopics.query.ts (59%) delete mode 100644 packages/commonwealth/server/routes/topics/get_topics_handler.ts diff --git a/packages/commonwealth/server/controllers/server_topics_methods/get_topics.ts b/libs/model/src/thread/GetTopics.query.ts similarity index 59% rename from packages/commonwealth/server/controllers/server_topics_methods/get_topics.ts rename to libs/model/src/thread/GetTopics.query.ts index c9991ae0510..e7ba93fc607 100644 --- a/packages/commonwealth/server/controllers/server_topics_methods/get_topics.ts +++ b/libs/model/src/thread/GetTopics.query.ts @@ -1,46 +1,19 @@ -import { CommunityInstance, TopicAttributes } from '@hicommonwealth/model'; +import { Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; import { QueryTypes } from 'sequelize'; import { z } from 'zod'; -import { ServerTopicsController } from '../server_topics_controller'; +import { models } from '../database'; -export type GetTopicsOptions = { - community: CommunityInstance; - with_contest_managers: boolean; -}; +export function GetTopics(): Query { + return { + ...schemas.GetTopics, + auth: [], + secure: false, + body: async ({ payload }) => { + const { community_id, with_contest_managers } = payload; -const ActiveContestManagers = schemas.ContestManager.extend({ - content: z.array(schemas.ContestAction), - contest_manager: schemas.ContestManager, -}); - -type TopicWithTotalThreads = TopicAttributes & { - total_threads: number; - active_contest_managers: Array>; -}; - -export type GetTopicsResult = TopicWithTotalThreads[]; -export async function __getTopics( - this: ServerTopicsController, - { community, with_contest_managers }: GetTopicsOptions, -): Promise { - const baseQuery = ` - WITH topic_data AS ( - SELECT t.*, ( - SELECT COUNT(*)::int - FROM "Threads" - WHERE community_id = :community_id AND topic_id = t.id AND deleted_at IS NULL - ) as total_threads - FROM "Topics" t - WHERE t.community_id = :community_id AND t.deleted_at IS NULL - ) - `; - - let sql = baseQuery; - - if (with_contest_managers) { - sql += ` - SELECT td.*, + const base = with_contest_managers + ? `SELECT td.*, COALESCE( ( SELECT JSON_AGG( @@ -75,15 +48,29 @@ export async function __getTopics( '[]'::json ) as active_contest_managers FROM topic_data td - `; - } else { - sql += `SELECT *, '[]'::json as active_contest_managers FROM topic_data`; - } + ` + : `SELECT *, '[]'::json as active_contest_managers FROM topic_data`; - const topics = await this.models.sequelize.query(sql, { - replacements: { community_id: community.id }, - type: QueryTypes.SELECT, - }); + const sql = ` + WITH topic_data AS ( + SELECT t.*, ( + SELECT COUNT(*)::int + FROM "Threads" + WHERE community_id = :community_id AND topic_id = t.id AND deleted_at IS NULL + ) as total_threads + FROM "Topics" t + WHERE t.community_id = :community_id AND t.deleted_at IS NULL + ) + ${base} + `; - return topics; + return await models.sequelize.query< + z.infer + >(sql, { + replacements: { community_id }, + type: QueryTypes.SELECT, + raw: true, + }); + }, + }; } diff --git a/libs/model/src/thread/index.ts b/libs/model/src/thread/index.ts index b29d9c54a60..72877341b38 100644 --- a/libs/model/src/thread/index.ts +++ b/libs/model/src/thread/index.ts @@ -3,4 +3,5 @@ export * from './CreateThreadReaction.command'; export * from './DeleteThread.command'; export * from './GetThread.query'; export * from './GetThreads.query'; +export * from './GetTopics.query'; export * from './UpdateThread.command'; diff --git a/libs/schemas/src/queries/thread.schemas.ts b/libs/schemas/src/queries/thread.schemas.ts index c67d3defff4..08e37805293 100644 --- a/libs/schemas/src/queries/thread.schemas.ts +++ b/libs/schemas/src/queries/thread.schemas.ts @@ -1,10 +1,11 @@ import { z } from 'zod'; -import { Thread } from '../entities'; +import { ContestManager, Thread, Topic } from '../entities'; +import * as projections from '../projections'; import { DiscordMetaSchema, + PG_INT, linksSchema, paginationSchema, - PG_INT, } from '../utils'; export const OrderByQueriesKeys = z.enum([ @@ -139,3 +140,20 @@ export const GetThreads = { threads: z.array(MappedThread), }), }; + +export const ActiveContestManager = ContestManager.extend({ + content: z.array(projections.ContestAction), +}); + +export const ExtendedTopic = Topic.extend({ + total_threads: z.number(), + active_contest_managers: z.array(ActiveContestManager), +}); + +export const GetTopics = { + input: z.object({ + community_id: z.string(), + with_contest_managers: z.boolean().optional(), + }), + output: z.array(ExtendedTopic), +}; diff --git a/packages/commonwealth/client/scripts/models/Topic.ts b/packages/commonwealth/client/scripts/models/Topic.ts index b449b939e8a..3c1fbc15773 100644 --- a/packages/commonwealth/client/scripts/models/Topic.ts +++ b/packages/commonwealth/client/scripts/models/Topic.ts @@ -1,82 +1,50 @@ import * as schemas from '@hicommonwealth/schemas'; import { z } from 'zod'; -const ActiveContestManagers = z.object({ - content: z.array(schemas.ContestAction), - contest_manager: schemas.ContestManager, -}); +export type TopicAttributes = z.infer; -type TopicAttributesBase = z.infer; - -type TopicAttributesExtended = TopicAttributesBase & { - active_contest_managers: Array>; - total_threads: number; -}; - -export type TopicAttributes = TopicAttributesExtended; - -class Topic { - public readonly name: TopicAttributes['name']; - public readonly id: TopicAttributes['id']; - public readonly description: TopicAttributes['description']; - public readonly telegram: TopicAttributes['telegram']; - public readonly communityId: TopicAttributes['community_id']; - public readonly channelId: TopicAttributes['channel_id']; - public readonly featuredInSidebar: TopicAttributes['featured_in_sidebar']; - public readonly featuredInNewPost: TopicAttributes['featured_in_new_post']; - public order: TopicAttributes['order']; - public readonly defaultOffchainTemplate: TopicAttributes['default_offchain_template']; - public totalThreads: TopicAttributes['total_threads']; - public readonly activeContestManagers: TopicAttributes['active_contest_managers']; - public readonly chainNodeId: TopicAttributes['chain_node_id']; - public readonly groupIds: TopicAttributes['group_ids']; - public readonly defaultOffchainTemplateBackup: TopicAttributes['default_offchain_template_backup']; - public readonly weightedVoting: TopicAttributes['weighted_voting']; - public readonly tokenAddress: TopicAttributes['token_address']; - public readonly tokenSymbol: TopicAttributes['token_symbol']; - public readonly voteWeightMultiplier: TopicAttributes['vote_weight_multiplier']; - - constructor({ +function Topic({ + name, + id, + description, + telegram, + community_id, + featured_in_new_post, + featured_in_sidebar, + order, + default_offchain_template, + total_threads, + channel_id, + active_contest_managers, + chain_node_id, + group_ids, + default_offchain_template_backup, + weighted_voting, + token_address, + token_symbol, + vote_weight_multiplier, +}: TopicAttributes) { + return { name, id, description, telegram, - community_id, - featured_in_sidebar, - featured_in_new_post, + communityId: community_id, + featuredInSidebar: featured_in_sidebar, + featuredInNewPost: featured_in_new_post, order, - default_offchain_template, - total_threads, - channel_id, - active_contest_managers, - chain_node_id, - group_ids, - default_offchain_template_backup, - weighted_voting, - token_address, - token_symbol, - vote_weight_multiplier, - }: TopicAttributes) { - this.name = name; - this.id = id; - this.description = description; - this.telegram = telegram; - this.communityId = community_id; - this.featuredInSidebar = featured_in_sidebar; - this.featuredInNewPost = featured_in_new_post; - this.order = order; - this.defaultOffchainTemplate = default_offchain_template; - this.totalThreads = total_threads || 0; - this.channelId = channel_id; - this.activeContestManagers = active_contest_managers || []; - this.chainNodeId = chain_node_id; - this.groupIds = group_ids; - this.defaultOffchainTemplateBackup = default_offchain_template_backup; - this.weightedVoting = weighted_voting; - this.tokenAddress = token_address; - this.tokenSymbol = token_symbol; - this.voteWeightMultiplier = vote_weight_multiplier; - } + defaultOffchainTemplate: default_offchain_template, + totalThreads: total_threads || 0, + channelId: channel_id, + activeContestManagers: active_contest_managers || [], + chainNodeId: chain_node_id, + groupIds: group_ids, + defaultOffchainTemplateBackup: default_offchain_template_backup, + weightedVoting: weighted_voting, + tokenAddress: token_address, + tokenSymbol: token_symbol, + voteWeightMultiplier: vote_weight_multiplier, + }; } export default Topic; diff --git a/packages/commonwealth/client/scripts/state/api/config.ts b/packages/commonwealth/client/scripts/state/api/config.ts index 5a022eabb66..54b4c56dc9e 100644 --- a/packages/commonwealth/client/scripts/state/api/config.ts +++ b/packages/commonwealth/client/scripts/state/api/config.ts @@ -12,7 +12,6 @@ export const queryClient = new QueryClient({ export const ApiEndpoints = { // endpoint builder functions like getEndpoint(id) => /endpoint/:id should have camel cased keys // stand alone endpoints should be have upper snake case keys so we can easily tell them apart in code - BULK_TOPICS: '/topics', FETCH_ADMIN: '/roles', FETCH_COMMUNITY_STAKES: '/communityStakes', FETCH_COMMENTS: '/viewComments', diff --git a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts index bd5ea38d7e6..fd215277f71 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts @@ -1,8 +1,5 @@ -import { useQuery } from '@tanstack/react-query'; -import axios from 'axios'; +import { trpc } from 'client/scripts/utils/trpcClient'; import Topic from 'models/Topic'; -import app from 'state'; -import { ApiEndpoints, SERVER_URL } from 'state/api/config'; const TOPICS_STALE_TIME = 30 * 1_000; // 30 s @@ -12,31 +9,23 @@ interface FetchTopicsProps { includeContestData?: boolean; } -const fetchTopics = async ({ - communityId, - includeContestData = false, -}: FetchTopicsProps): Promise => { - const response = await axios.get(`${SERVER_URL}${ApiEndpoints.BULK_TOPICS}`, { - params: { - community_id: communityId || app.activeChainId(), - with_contest_managers: includeContestData, - }, - }); - - return response.data.result.map((t) => new Topic(t)); -}; - const useFetchTopicsQuery = ({ communityId, apiEnabled = true, includeContestData, }: FetchTopicsProps) => { - return useQuery({ - queryKey: [ApiEndpoints.BULK_TOPICS, communityId, includeContestData], - queryFn: () => fetchTopics({ communityId, includeContestData }), - staleTime: TOPICS_STALE_TIME, - enabled: apiEnabled, - }); + return trpc.thread.getTopics.useQuery( + { + community_id: communityId, + with_contest_managers: includeContestData, + }, + { + staleTime: TOPICS_STALE_TIME, + enabled: apiEnabled, + // @ts-expect-error + select: (data) => data.map((topic) => Topic(topic)), + }, + ); }; export default useFetchTopicsQuery; diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 742475cc0da..859c16462af 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -1,5 +1,5 @@ import { express, trpc } from '@hicommonwealth/adapters'; -import { Comment, Community, Feed } from '@hicommonwealth/model'; +import { Comment, Community, Feed, Thread } from '@hicommonwealth/model'; import cors from 'cors'; import { Router } from 'express'; import passport from 'passport'; @@ -56,6 +56,9 @@ const api = { getComments: trpc.query(Comment.GetComments, trpc.Tag.Comment, { forceSecure: true, }), + getTopics: trpc.query(Thread.GetTopics, trpc.Tag.Thread, { + forceSecure: true, + }), createCommunity, updateCommunity, createTopic, diff --git a/packages/commonwealth/server/api/threads.ts b/packages/commonwealth/server/api/threads.ts index cee71742a6a..a02f6159d69 100644 --- a/packages/commonwealth/server/api/threads.ts +++ b/packages/commonwealth/server/api/threads.ts @@ -5,6 +5,7 @@ import { MixpanelCommunityInteractionEvent } from '../../shared/analytics/types' import { applyCanvasSignedDataMiddleware } from '../federation'; export const trpcRouter = trpc.router({ + getTopics: trpc.query(Thread.GetTopics, trpc.Tag.Thread), createThread: trpc.command( Thread.CreateThread, trpc.Tag.Thread, diff --git a/packages/commonwealth/server/controllers/server_topics_controller.ts b/packages/commonwealth/server/controllers/server_topics_controller.ts index 31aa6f96d48..fc4b4d83214 100644 --- a/packages/commonwealth/server/controllers/server_topics_controller.ts +++ b/packages/commonwealth/server/controllers/server_topics_controller.ts @@ -1,9 +1,4 @@ import { DB } from '@hicommonwealth/model'; -import { - GetTopicsOptions, - GetTopicsResult, - __getTopics, -} from './server_topics_methods/get_topics'; import { UpdateTopicChannelOptions, UpdateTopicChannelResult, @@ -21,10 +16,6 @@ import { export class ServerTopicsController { constructor(public models: DB) {} - async getTopics(options: GetTopicsOptions): Promise { - return __getTopics.call(this, options); - } - async updateTopicsOrder( options: UpdateTopicsOrderOptions, ): Promise { diff --git a/packages/commonwealth/server/routes/topics/get_topics_handler.ts b/packages/commonwealth/server/routes/topics/get_topics_handler.ts deleted file mode 100644 index cb886003d79..00000000000 --- a/packages/commonwealth/server/routes/topics/get_topics_handler.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TopicAttributes } from '@hicommonwealth/model'; -import { Request } from 'express'; -import { ServerControllers } from '../../routing/router'; -import { TypedResponse, success } from '../../types'; - -type GetTopicsResponse = TopicAttributes[]; - -export const getTopicsHandler = async ( - controllers: ServerControllers, - req: Request, - res: TypedResponse, -) => { - const { community } = req; - const { with_contest_managers } = req.query; - - const topics = await controllers.topics.getTopics({ - community: community!, - with_contest_managers: with_contest_managers === 'true', - }); - - return success(res, topics); -}; diff --git a/packages/commonwealth/server/routing/router.ts b/packages/commonwealth/server/routing/router.ts index 4766ea0e53f..4daab4c6e96 100644 --- a/packages/commonwealth/server/routing/router.ts +++ b/packages/commonwealth/server/routing/router.ts @@ -99,7 +99,6 @@ import { getTagsHandler } from '../routes/tags/get_tags_handler'; import { createThreadPollHandler } from '../routes/threads/create_thread_poll_handler'; import { getThreadPollsHandler } from '../routes/threads/get_thread_polls_handler'; import { getThreadsHandler } from '../routes/threads/get_threads_handler'; -import { getTopicsHandler } from '../routes/topics/get_topics_handler'; import { updateTopicChannelHandler } from '../routes/topics/update_topic_channel_handler'; import { updateTopicsOrderHandler } from '../routes/topics/update_topics_order_handler'; import { failure } from '../types'; @@ -389,13 +388,6 @@ function setupRouter( databaseValidationService.validateCommunity, updateTopicsOrderHandler.bind(this, serverControllers), ); - registerRoute( - router, - 'get', - '/topics' /* OLD: /bulkTopics */, - databaseValidationService.validateCommunity, - getTopicsHandler.bind(this, serverControllers), - ); // reactions registerRoute( From 2b36e96f451b3c1972b226b50b7b4a0b41cf138c Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Thu, 17 Oct 2024 17:30:53 -0400 Subject: [PATCH 252/425] fix topics --- .../commonwealth/client/scripts/models/Thread.ts | 2 +- .../commonwealth/client/scripts/models/Topic.ts | 16 +++++++++++----- .../scripts/state/api/topics/fetchTopics.ts | 4 ++-- .../client/scripts/views/components/feed.tsx | 4 ++-- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index 89f9fce5c3d..671b3587bfe 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -376,7 +376,7 @@ export class Thread implements IUniqueId { this.createdAt = moment(created_at); this.updatedAt = moment(updated_at); // @ts-expect-error StrictNullChecks - this.topic = topic?.id ? new Topic({ ...(topic || {}) } as any) : null; + this.topic = topic?.id ? mapTopic({ ...(topic || {}) } as any) : null; this.kind = kind; this.stage = stage; this.authorCommunity = Address?.community_id; diff --git a/packages/commonwealth/client/scripts/models/Topic.ts b/packages/commonwealth/client/scripts/models/Topic.ts index 3c1fbc15773..e040d853c39 100644 --- a/packages/commonwealth/client/scripts/models/Topic.ts +++ b/packages/commonwealth/client/scripts/models/Topic.ts @@ -1,9 +1,9 @@ import * as schemas from '@hicommonwealth/schemas'; import { z } from 'zod'; -export type TopicAttributes = z.infer; +export type Topic = z.infer; -function Topic({ +export function mapTopic({ name, id, description, @@ -23,16 +23,22 @@ function Topic({ token_address, token_symbol, vote_weight_multiplier, -}: TopicAttributes) { +}: Topic) { return { - name, + community_id, id, + name, description, telegram, + featured_in_sidebar, + featured_in_new_post, + order, + group_ids, + total_threads, + active_contest_managers, communityId: community_id, featuredInSidebar: featured_in_sidebar, featuredInNewPost: featured_in_new_post, - order, defaultOffchainTemplate: default_offchain_template, totalThreads: total_threads || 0, channelId: channel_id, diff --git a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts index fd215277f71..876deb2dabf 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts @@ -1,5 +1,5 @@ import { trpc } from 'client/scripts/utils/trpcClient'; -import Topic from 'models/Topic'; +import { mapTopic } from 'models/Topic'; const TOPICS_STALE_TIME = 30 * 1_000; // 30 s @@ -23,7 +23,7 @@ const useFetchTopicsQuery = ({ staleTime: TOPICS_STALE_TIME, enabled: apiEnabled, // @ts-expect-error - select: (data) => data.map((topic) => Topic(topic)), + select: (data) => data.map((topic) => mapTopic(topic)), }, ); }; diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 776f5d17891..6598f6f953d 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -12,11 +12,11 @@ import { PermissionEnum, } from '@hicommonwealth/schemas'; import { slugify } from '@hicommonwealth/shared'; +import { mapTopic } from 'client/scripts/models/Topic'; import { getThreadActionTooltipText } from 'helpers/threads'; import useTopicGating from 'hooks/useTopicGating'; import { getProposalUrlPath } from 'identifiers'; import { Thread, type RecentComment } from 'models/Thread'; -import Topic from 'models/Topic'; import { ThreadKind, ThreadStage } from 'models/types'; import { useCommonNavigate } from 'navigation/helpers'; import { useGetCommunityByIdQuery } from 'state/api/communities'; @@ -132,7 +132,7 @@ function mapThread(thread: z.infer): Thread { id: thread.id, created_at: thread.created_at ?? '', updated_at: thread.updated_at ?? thread.created_at ?? '', - topic: new Topic({ + topic: mapTopic({ community_id: thread.community_id, id: thread.topic.id, name: thread.topic.name, From 275dbef298475fdc74d8c32c085a1cdfcc87be4c Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 14:42:30 -0700 Subject: [PATCH 253/425] fix seeds --- libs/model/src/tester/e2eSeeds.ts | 2 ++ .../model/test/email/recap-email-lifecycle.spec.ts | 2 ++ libs/model/test/email/util.ts | 5 +++++ .../model/test/reaction/reaction-lifecycle.spec.ts | 1 + .../comment-subscription-lifecycle.spec.ts | 3 +++ .../thread-subscription-lifecycle.spec.ts | 2 ++ libs/model/test/thread/thread-lifecycle.spec.ts | 14 ++++++++++---- libs/model/test/user/new-content-lifecycle.spec.ts | 2 ++ libs/schemas/src/entities/comment.schemas.ts | 9 ++++++--- libs/schemas/src/entities/thread.schemas.ts | 9 ++++++--- 10 files changed, 39 insertions(+), 10 deletions(-) diff --git a/libs/model/src/tester/e2eSeeds.ts b/libs/model/src/tester/e2eSeeds.ts index fb17cf55918..3d6c81d2309 100644 --- a/libs/model/src/tester/e2eSeeds.ts +++ b/libs/model/src/tester/e2eSeeds.ts @@ -276,6 +276,7 @@ export const e2eTestEntities = async function ( text: '', thread_id: -1, reaction_count: 0, + reaction_weights_sum: '0', search: getCommentSearchVector(''), }, }) @@ -298,6 +299,7 @@ export const e2eTestEntities = async function ( text: '', thread_id: -2, reaction_count: 0, + reaction_weights_sum: '0', search: getCommentSearchVector(''), }, }) diff --git a/libs/model/test/email/recap-email-lifecycle.spec.ts b/libs/model/test/email/recap-email-lifecycle.spec.ts index 9450116bc95..2654dbd2d79 100644 --- a/libs/model/test/email/recap-email-lifecycle.spec.ts +++ b/libs/model/test/email/recap-email-lifecycle.spec.ts @@ -72,11 +72,13 @@ describe('Recap email lifecycle', () => { topic_id: community?.topics?.at(0)?.id, pinned: false, read_only: false, + reaction_weights_sum: '0', }); [comment] = await seed('Comment', { address_id: community?.Addresses?.at(0)?.id, thread_id: thread!.id!, + reaction_weights_sum: '0', }); }); diff --git a/libs/model/test/email/util.ts b/libs/model/test/email/util.ts index e344c8fde25..6b3fef65efa 100644 --- a/libs/model/test/email/util.ts +++ b/libs/model/test/email/util.ts @@ -324,6 +324,7 @@ export async function generateThreads( topic_id: communityThree?.topics?.at(0)?.id, pinned: false, read_only: false, + reaction_weights_sum: '0', }); // 3 threads for communityOne and 1 thread for communityTwo @@ -334,6 +335,7 @@ export async function generateThreads( pinned: false, read_only: false, view_count: 10, + reaction_weights_sum: '0', }); const [threadTwo] = await seed('Thread', { address_id: communityOne?.Addresses?.at(0)?.id, @@ -342,6 +344,7 @@ export async function generateThreads( pinned: false, read_only: false, view_count: 5, + reaction_weights_sum: '0', }); const [threadThree] = await seed('Thread', { @@ -351,6 +354,7 @@ export async function generateThreads( pinned: false, read_only: false, view_count: 1, + reaction_weights_sum: '0', }); const [threadFour] = await seed('Thread', { @@ -360,6 +364,7 @@ export async function generateThreads( pinned: false, read_only: false, view_count: 10, + reaction_weights_sum: '0', }); return { diff --git a/libs/model/test/reaction/reaction-lifecycle.spec.ts b/libs/model/test/reaction/reaction-lifecycle.spec.ts index a2aee704848..adc9cc3682a 100644 --- a/libs/model/test/reaction/reaction-lifecycle.spec.ts +++ b/libs/model/test/reaction/reaction-lifecycle.spec.ts @@ -53,6 +53,7 @@ describe('Reactions lifecycle', () => { deleted_at: undefined, // so we can find it! pinned: false, read_only: false, + reaction_weights_sum: '0', }, //{ mock: true, log: true }, ); diff --git a/libs/model/test/subscription/comment-subscription-lifecycle.spec.ts b/libs/model/test/subscription/comment-subscription-lifecycle.spec.ts index 559c62f0183..62174ddc18c 100644 --- a/libs/model/test/subscription/comment-subscription-lifecycle.spec.ts +++ b/libs/model/test/subscription/comment-subscription-lifecycle.spec.ts @@ -46,15 +46,18 @@ describe('Comment subscription lifecycle', () => { topic_id: community?.topics?.at(0)?.id, pinned: false, read_only: false, + reaction_weights_sum: '0', }); [commentOne] = await seed('Comment', { address_id: community?.Addresses?.at(0)?.id, thread_id: thread!.id!, + reaction_weights_sum: '0', }); [commentTwo] = await seed('Comment', { address_id: community?.Addresses?.at(0)?.id, thread_id: thread!.id!, + reaction_weights_sum: '0', }); actor = { user: { id: user!.id!, email: user!.email! }, diff --git a/libs/model/test/subscription/thread-subscription-lifecycle.spec.ts b/libs/model/test/subscription/thread-subscription-lifecycle.spec.ts index ce23d43738d..c824e5cfa81 100644 --- a/libs/model/test/subscription/thread-subscription-lifecycle.spec.ts +++ b/libs/model/test/subscription/thread-subscription-lifecycle.spec.ts @@ -46,6 +46,7 @@ describe('Thread subscription lifecycle', () => { topic_id: community!.topics![0].id, pinned: false, read_only: false, + reaction_weights_sum: '0', }); [threadTwo] = await seed('Thread', { address_id: community!.Addresses![0].id!, @@ -53,6 +54,7 @@ describe('Thread subscription lifecycle', () => { topic_id: community!.topics![0].id, pinned: false, read_only: false, + reaction_weights_sum: '0', }); actor = { user: { id: user!.id!, email: user!.email! }, diff --git a/libs/model/test/thread/thread-lifecycle.spec.ts b/libs/model/test/thread/thread-lifecycle.spec.ts index 866dc4c2ff7..405cb8134fa 100644 --- a/libs/model/test/thread/thread-lifecycle.spec.ts +++ b/libs/model/test/thread/thread-lifecycle.spec.ts @@ -228,6 +228,7 @@ describe('Thread lifecycle', () => { archived_at: new Date(), pinned: false, read_only: false, + reaction_weights_sum: '0', }); archived = archived_thread; @@ -237,6 +238,7 @@ describe('Thread lifecycle', () => { topic_id: community?.topics?.at(0)?.id, pinned: false, read_only: true, + reaction_weights_sum: '0', }); read_only = read_only_thread; @@ -896,9 +898,11 @@ describe('Thread lifecycle', () => { }, }); const expectedWeight = 50 * vote_weight; - expect(reaction?.calculated_voting_weight).to.eq(expectedWeight); + expect(`${reaction?.calculated_voting_weight}`).to.eq( + `${expectedWeight}`, + ); const t = await models.Thread.findByPk(thread!.id); - expect(t!.reaction_weights_sum).to.eq(expectedWeight); + expect(`${t!.reaction_weights_sum}`).to.eq(`${expectedWeight}`); }); test('should delete a reaction', async () => { @@ -966,9 +970,11 @@ describe('Thread lifecycle', () => { }, }); const expectedWeight = 50 * vote_weight; - expect(reaction?.calculated_voting_weight).to.eq(expectedWeight); + expect(`${reaction?.calculated_voting_weight}`).to.eq( + `${expectedWeight}`, + ); const c = await models.Comment.findByPk(comment!.id); - expect(c!.reaction_weights_sum).to.eq(expectedWeight * 2); // *2 to account for first member reaction + expect(`${c!.reaction_weights_sum}`).to.eq(`${expectedWeight * 2}`); // *2 to account for first member reaction }); test('should throw error when comment not found', async () => { diff --git a/libs/model/test/user/new-content-lifecycle.spec.ts b/libs/model/test/user/new-content-lifecycle.spec.ts index e4b73ff5261..d4ad04cd84f 100644 --- a/libs/model/test/user/new-content-lifecycle.spec.ts +++ b/libs/model/test/user/new-content-lifecycle.spec.ts @@ -74,6 +74,7 @@ describe('New Content lifecycle', () => { pinned: false, read_only: false, body: 'Sample 1', + reaction_weights_sum: '0', }); await seed('Thread', { address_id: address1.id!, @@ -81,6 +82,7 @@ describe('New Content lifecycle', () => { pinned: false, read_only: false, body: 'Sample 2', + reaction_weights_sum: '0', }); // now actor 2 should only get 1 entry for that community in new content array diff --git a/libs/schemas/src/entities/comment.schemas.ts b/libs/schemas/src/entities/comment.schemas.ts index d06eef70005..37ab3e422a3 100644 --- a/libs/schemas/src/entities/comment.schemas.ts +++ b/libs/schemas/src/entities/comment.schemas.ts @@ -41,9 +41,12 @@ export const Comment = z.object({ .nullish(), reaction_count: PG_INT, - reaction_weights_sum: z.string().refine((str) => { - return /^[0-9]+$/.test(str); // only numbers - }), + reaction_weights_sum: z + .string() + .refine((str) => { + return /^[0-9]+$/.test(str); // only numbers + }) + .nullish(), search: z.union([z.string(), z.record(z.any())]), Address: Address.nullish(), diff --git a/libs/schemas/src/entities/thread.schemas.ts b/libs/schemas/src/entities/thread.schemas.ts index 63d75b94ff2..0787557ca9e 100644 --- a/libs/schemas/src/entities/thread.schemas.ts +++ b/libs/schemas/src/entities/thread.schemas.ts @@ -49,9 +49,12 @@ export const Thread = z.object({ //counts reaction_count: PG_INT.optional(), - reaction_weights_sum: z.string().refine((str) => { - return /^[0-9]+$/.test(str); // only numbers - }), + reaction_weights_sum: z + .string() + .refine((str) => { + return /^[0-9]+$/.test(str); // only numbers + }) + .nullish(), comment_count: PG_INT.optional().optional(), activity_rank_date: z.coerce.date().nullish(), From 83fea9c88edfe04cefd065902ae1ecebf7fd3c97 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 14:54:06 -0700 Subject: [PATCH 254/425] fix types --- .../contest-worker/contest-worker-policy.spec.ts | 2 +- .../contest/contests-projection-lifecycle.spec.ts | 2 +- .../model/test/reaction/reaction-lifecycle.spec.ts | 2 +- libs/model/test/util-tests/getCommentDepth.spec.ts | 1 + .../integration/createSitemapGenerator.spec.ts | 2 +- .../commonwealth/client/scripts/models/Topic.ts | 3 --- .../StakeExchangeForm/StakeExchangeForm.tsx | 4 ++-- .../scripts/views/pages/discussions/helpers.ts | 14 +++++++++++++- .../test/integration/databaseCleaner.spec.ts | 4 ++-- 9 files changed, 22 insertions(+), 12 deletions(-) diff --git a/libs/model/test/contest-worker/contest-worker-policy.spec.ts b/libs/model/test/contest-worker/contest-worker-policy.spec.ts index 3b73b4d6437..47a3b759b2f 100644 --- a/libs/model/test/contest-worker/contest-worker-policy.spec.ts +++ b/libs/model/test/contest-worker/contest-worker-policy.spec.ts @@ -99,7 +99,7 @@ describe('Contest Worker Policy', () => { stage: '', view_count: 0, reaction_count: 0, - reaction_weights_sum: 0, + reaction_weights_sum: '0', comment_count: 0, deleted_at: undefined, pinned: false, diff --git a/libs/model/test/contest/contests-projection-lifecycle.spec.ts b/libs/model/test/contest/contests-projection-lifecycle.spec.ts index 057777a56fd..e8afe908dff 100644 --- a/libs/model/test/contest/contests-projection-lifecycle.spec.ts +++ b/libs/model/test/contest/contests-projection-lifecycle.spec.ts @@ -162,7 +162,7 @@ describe('Contests projection lifecycle', () => { topic_id: undefined, view_count: 1, reaction_count: 1, - reaction_weights_sum: 1, + reaction_weights_sum: '1', comment_count: 1, discord_meta: undefined, deleted_at: undefined, // so we can find it! diff --git a/libs/model/test/reaction/reaction-lifecycle.spec.ts b/libs/model/test/reaction/reaction-lifecycle.spec.ts index adc9cc3682a..f70d0837714 100644 --- a/libs/model/test/reaction/reaction-lifecycle.spec.ts +++ b/libs/model/test/reaction/reaction-lifecycle.spec.ts @@ -69,7 +69,7 @@ describe('Reactions lifecycle', () => { reaction: 'like', canvas_signed_data: '', canvas_msg_id: '', - calculated_voting_weight: 0, + calculated_voting_weight: '0', }); const lastOutboxEntry = await models.Outbox.findOne({ diff --git a/libs/model/test/util-tests/getCommentDepth.spec.ts b/libs/model/test/util-tests/getCommentDepth.spec.ts index 99a02dca6c2..09c438b1938 100644 --- a/libs/model/test/util-tests/getCommentDepth.spec.ts +++ b/libs/model/test/util-tests/getCommentDepth.spec.ts @@ -28,6 +28,7 @@ describe('getCommentDepth', () => { title: 'Testing', kind: 'discussion', search: getThreadSearchVector('Testing', ''), + reaction_weights_sum: '0', }); let comment: CommentInstance; for (let i = 0; i < maxDepth; i++) { diff --git a/libs/sitemaps/test/integration/createSitemapGenerator.spec.ts b/libs/sitemaps/test/integration/createSitemapGenerator.spec.ts index 4e5e497c7f4..235688441f6 100644 --- a/libs/sitemaps/test/integration/createSitemapGenerator.spec.ts +++ b/libs/sitemaps/test/integration/createSitemapGenerator.spec.ts @@ -67,7 +67,7 @@ describe('createSitemapGenerator', { timeout: 10_000 }, function () { canvas_signed_data: '', canvas_msg_id: '', reaction_count: 0, - reaction_weights_sum: 0, + reaction_weights_sum: '0', comment_count: 0, profile_name: 'foobar', topic_id: topic.id, diff --git a/packages/commonwealth/client/scripts/models/Topic.ts b/packages/commonwealth/client/scripts/models/Topic.ts index b449b939e8a..44c349014d1 100644 --- a/packages/commonwealth/client/scripts/models/Topic.ts +++ b/packages/commonwealth/client/scripts/models/Topic.ts @@ -28,7 +28,6 @@ class Topic { public readonly defaultOffchainTemplate: TopicAttributes['default_offchain_template']; public totalThreads: TopicAttributes['total_threads']; public readonly activeContestManagers: TopicAttributes['active_contest_managers']; - public readonly chainNodeId: TopicAttributes['chain_node_id']; public readonly groupIds: TopicAttributes['group_ids']; public readonly defaultOffchainTemplateBackup: TopicAttributes['default_offchain_template_backup']; public readonly weightedVoting: TopicAttributes['weighted_voting']; @@ -49,7 +48,6 @@ class Topic { total_threads, channel_id, active_contest_managers, - chain_node_id, group_ids, default_offchain_template_backup, weighted_voting, @@ -69,7 +67,6 @@ class Topic { this.totalThreads = total_threads || 0; this.channelId = channel_id; this.activeContestManagers = active_contest_managers || []; - this.chainNodeId = chain_node_id; this.groupIds = group_ids; this.defaultOffchainTemplateBackup = default_offchain_template_backup; this.weightedVoting = weighted_voting; diff --git a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx index 796f7d26e01..aa26ef94801 100644 --- a/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx +++ b/packages/commonwealth/client/scripts/views/modals/ManageCommunityStakeModal/StakeExchangeForm/StakeExchangeForm.tsx @@ -364,7 +364,7 @@ const StakeExchangeForm = ({
    - Current vote weight {currentVoteWeight} + Current vote weight {currentVoteWeight?.toString()}
    @@ -419,7 +419,7 @@ const StakeExchangeForm = ({ Total weight - {expectedVoteWeight} + {expectedVoteWeight?.toString()}
    diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/helpers.ts b/packages/commonwealth/client/scripts/views/pages/discussions/helpers.ts index 9f693bc02a8..543715748e5 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/helpers.ts +++ b/packages/commonwealth/client/scripts/views/pages/discussions/helpers.ts @@ -1,3 +1,4 @@ +import { BigNumber } from 'ethers'; import moment from 'moment'; import type Thread from '../../../models/Thread'; import { ThreadFeaturedFilterTypes } from '../../../models/types'; @@ -45,7 +46,18 @@ export const sortByFeaturedFilter = (t: Thread[], featuredFilter) => { } if (featuredFilter === ThreadFeaturedFilterTypes.MostLikes) { - return [...t].sort((a, b) => b.reactionWeightsSum - a.reactionWeightsSum); + return [...t].sort((a, b) => { + const aWeight = BigNumber.from(a.reactionWeightsSum); + const bWeight = BigNumber.from(b.reactionWeightsSum); + + if (aWeight.lt(bWeight)) { + return 1; + } else if (aWeight.gt(bWeight)) { + return -1; + } else { + return 0; + } + }); } if (featuredFilter === ThreadFeaturedFilterTypes.LatestActivity) { diff --git a/packages/commonwealth/test/integration/databaseCleaner.spec.ts b/packages/commonwealth/test/integration/databaseCleaner.spec.ts index 2b4e7897f5a..14bb2506f88 100644 --- a/packages/commonwealth/test/integration/databaseCleaner.spec.ts +++ b/packages/commonwealth/test/integration/databaseCleaner.spec.ts @@ -184,7 +184,7 @@ describe('DatabaseCleaner Tests', async () => { title: 'Testing', community_id: 'ethereum', reaction_count: 0, - reaction_weights_sum: 0, + reaction_weights_sum: '0', kind: 'discussion', stage: 'discussion', view_count: 0, @@ -197,7 +197,7 @@ describe('DatabaseCleaner Tests', async () => { address_id: address.id!, text: 'Testing', reaction_count: 0, - reaction_weights_sum: 0, + reaction_weights_sum: '0', search: getCommentSearchVector('Testing'), }); From dfaccb8647f53a669f47e0472ec20fb68bcd7e6d Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 15:08:34 -0700 Subject: [PATCH 255/425] placeholder so the button remains the normal size when it's empty. --- .../MarkdownEditor/toolbars/BlockSelectorButton.tsx | 10 ++++++++-- .../MarkdownEditor/toolbars/PlaceholderIcon.tsx | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/PlaceholderIcon.tsx diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 786105e52ca..09997fad61d 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -2,6 +2,7 @@ import ClickAwayListener from '@mui/base/ClickAwayListener'; import { currentBlockType$, useCellValue } from 'commonwealth-mdxeditor'; import React, { useCallback } from 'react'; import { CWHeadingButton } from 'views/components/MarkdownEditor/toolbars/CWHeadingButton'; +import { PlaceholderIcon } from 'views/components/MarkdownEditor/toolbars/PlaceholderIcon'; import { blockTypeToIconName } from 'views/components/MarkdownEditor/toolbars/blockTypeToIconName'; import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; import CWPopover, { @@ -40,7 +41,8 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { }, [popoverProps]); // FIXME what about list items that don't have an icon when you place the - // cursor in the wrong block. No icon will be picked. + // cursor in the wrong block. No icon will be picked. This happens for list + // items. const iconName = blockTypeToIconName(currentBlockType); @@ -48,7 +50,11 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => {
    { + return
    ; +}; From e3ba44dc6430814d321e5b9ff1f71ef4feddea43 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 15:15:26 -0700 Subject: [PATCH 256/425] Fixed the mobile submit button... --- .../components/MarkdownEditor/MarkdownSubmitButton.scss | 8 ++++++-- .../components/MarkdownEditor/MarkdownSubmitButton.tsx | 1 + .../MarkdownEditor/toolbars/BlockSelectorButton.tsx | 4 ---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownSubmitButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownSubmitButton.scss index afbaba96eda..c816e14f198 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownSubmitButton.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownSubmitButton.scss @@ -1,8 +1,12 @@ -.mdxeditor-container-mode-desktop .MarkdownSubmitButton button { +.MarkdownSubmitButton { border: none; + outline: none; + cursor: pointer; +} + +.mdxeditor-container-mode-desktop .MarkdownSubmitButton { font-size: 1.2em; padding: 8px 16px; - cursor: pointer; border-radius: 8px; display: inline-block; } diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownSubmitButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownSubmitButton.tsx index d4de1a78f38..65b4846e30c 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownSubmitButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownSubmitButton.tsx @@ -1,6 +1,7 @@ import clsx from 'clsx'; import React from 'react'; import { useMarkdownEditorMode } from 'views/components/MarkdownEditor/useMarkdownEditorMode'; +import './MarkdownSubmitButton.scss'; export type MarkdownSubmitButtonProps = Readonly<{ label: string; diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 09997fad61d..605890439b8 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -40,10 +40,6 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => { popoverProps.dispose(); }, [popoverProps]); - // FIXME what about list items that don't have an icon when you place the - // cursor in the wrong block. No icon will be picked. This happens for list - // items. - const iconName = blockTypeToIconName(currentBlockType); return ( From 746327232265318636b6e67ee50d40970c1d2122 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 15:27:54 -0700 Subject: [PATCH 257/425] removed unused variable --- .../components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index ccb6374bb6d..ca01e2cc0ed 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -25,7 +25,7 @@ type ToolbarForDesktopProps = Readonly<{ }>; export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => { - const { onImage, focus } = props; + const { onImage } = props; return ( <> From 59c697e6aabb70c7ef722de9810276367e98c1c7 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 15:40:40 -0700 Subject: [PATCH 258/425] these files shouldn't have changed... From ed0e7d73548d7fbcd25048b089ba51997d218a13 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Thu, 17 Oct 2024 15:41:26 -0700 Subject: [PATCH 259/425] revert. From f03a4a617fa39234f0360e2621c18394ec1069fe Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Thu, 17 Oct 2024 21:34:15 -0700 Subject: [PATCH 260/425] fix integration tests --- .../test/integration/knock/commentCreated.spec.ts | 4 ++++ .../commonwealth/test/integration/knock/userMentioned.spec.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/packages/commonwealth/test/integration/knock/commentCreated.spec.ts b/packages/commonwealth/test/integration/knock/commentCreated.spec.ts index 9ca71f9f34d..3d9e9cf680c 100644 --- a/packages/commonwealth/test/integration/knock/commentCreated.spec.ts +++ b/packages/commonwealth/test/integration/knock/commentCreated.spec.ts @@ -86,18 +86,21 @@ describe('CommentCreated Event Handler', () => { deleted_at: null, read_only: false, pinned: false, + reaction_weights_sum: '0', }); [rootComment] = await tester.seed('Comment', { parent_id: null, thread_id: thread!.id!, address_id: community!.Addresses![0].id, deleted_at: null, + reaction_weights_sum: '0', }); [replyComment] = await tester.seed('Comment', { parent_id: String(rootComment!.id), thread_id: thread!.id!, address_id: community!.Addresses![0].id, deleted_at: null, + reaction_weights_sum: '0', }); [mentionedComment] = await tester.seed('Comment', { text: `Hi [@${mentionedUser!.profile.name}](/profile/id/${ @@ -107,6 +110,7 @@ describe('CommentCreated Event Handler', () => { thread_id: thread!.id!, address_id: community!.Addresses![0].id, deleted_at: null, + reaction_weights_sum: '0', }); }); diff --git a/packages/commonwealth/test/integration/knock/userMentioned.spec.ts b/packages/commonwealth/test/integration/knock/userMentioned.spec.ts index c66bab304b7..ac8443c8495 100644 --- a/packages/commonwealth/test/integration/knock/userMentioned.spec.ts +++ b/packages/commonwealth/test/integration/knock/userMentioned.spec.ts @@ -67,6 +67,7 @@ describe('userMentioned Event Handler', () => { pinned: false, read_only: false, body: 'some body', + reaction_weights_sum: '0', }); }); From 4e0b97d83a3ad713d769416de3e6d2be783abb60 Mon Sep 17 00:00:00 2001 From: Salman Date: Fri, 18 Oct 2024 11:26:51 +0500 Subject: [PATCH 261/425] resize-welcome-to-common-cards --- .../components/CardsSlider/ActionCard/ActionCard.scss | 4 ++++ .../components/CardsSlider/ActionCard/ActionCard.tsx | 5 ++++- .../scripts/views/components/CardsSlider/CardsSlider.scss | 8 ++++++++ .../components/UserTrainingSlider/UserTrainingSlider.tsx | 7 ++++++- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/CardsSlider/ActionCard/ActionCard.scss b/packages/commonwealth/client/scripts/views/components/CardsSlider/ActionCard/ActionCard.scss index b5b01cb45a6..7379032768f 100644 --- a/packages/commonwealth/client/scripts/views/components/CardsSlider/ActionCard/ActionCard.scss +++ b/packages/commonwealth/client/scripts/views/components/CardsSlider/ActionCard/ActionCard.scss @@ -72,4 +72,8 @@ padding-left: 0 !important; } } + + &.scaled-down { + transform: scale(0.85); + } } diff --git a/packages/commonwealth/client/scripts/views/components/CardsSlider/ActionCard/ActionCard.tsx b/packages/commonwealth/client/scripts/views/components/CardsSlider/ActionCard/ActionCard.tsx index 54fe591443d..0a6e0869aab 100644 --- a/packages/commonwealth/client/scripts/views/components/CardsSlider/ActionCard/ActionCard.tsx +++ b/packages/commonwealth/client/scripts/views/components/CardsSlider/ActionCard/ActionCard.tsx @@ -1,3 +1,4 @@ +import clsx from 'clsx'; import React from 'react'; import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; import { CWText } from '../..//component_kit/cw_text'; @@ -14,6 +15,7 @@ type ActionCardProps = { onClose?: () => void; ctaText: string; onCTAClick: () => void; + className?: string; }; export const ActionCard = ({ @@ -26,9 +28,10 @@ export const ActionCard = ({ onClose, ctaText, onCTAClick, + className, }: ActionCardProps) => { return ( -
    +
    {isActionCompleted ? ( diff --git a/packages/commonwealth/client/scripts/views/components/CardsSlider/CardsSlider.scss b/packages/commonwealth/client/scripts/views/components/CardsSlider/CardsSlider.scss index b5689e8f1e2..e33264bbca0 100644 --- a/packages/commonwealth/client/scripts/views/components/CardsSlider/CardsSlider.scss +++ b/packages/commonwealth/client/scripts/views/components/CardsSlider/CardsSlider.scss @@ -46,4 +46,12 @@ padding-bottom: 8px; } } + + .CardsSlider.narrow-gap { + gap: 4px; + + .cards { + gap: 4px; + } + } } diff --git a/packages/commonwealth/client/scripts/views/components/UserTrainingSlider/UserTrainingSlider.tsx b/packages/commonwealth/client/scripts/views/components/UserTrainingSlider/UserTrainingSlider.tsx index bd161bcfdd4..f3f0f9772ac 100644 --- a/packages/commonwealth/client/scripts/views/components/UserTrainingSlider/UserTrainingSlider.tsx +++ b/packages/commonwealth/client/scripts/views/components/UserTrainingSlider/UserTrainingSlider.tsx @@ -1,3 +1,4 @@ +import clsx from 'clsx'; import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useState } from 'react'; import { useFetchProfileByIdQuery } from 'state/api/profiles'; @@ -152,7 +153,7 @@ export const UserTrainingSlider = () => { <> { UserTrainingCardTypes.GiveUpvote, )} onCTAClick={() => redirectToPage(UserTrainingCardTypes.GiveUpvote)} + className="scaled-down" /> )} {isCardVisible(UserTrainingCardTypes.CreateContent) && ( @@ -194,6 +196,7 @@ export const UserTrainingSlider = () => { onCTAClick={() => redirectToPage(UserTrainingCardTypes.CreateContent) } + className="scaled-down" /> )} {isCardVisible(UserTrainingCardTypes.FinishProfile) && ( @@ -215,6 +218,7 @@ export const UserTrainingSlider = () => { onCTAClick={() => redirectToPage(UserTrainingCardTypes.FinishProfile) } + className="scaled-down" /> )} {isCardVisible(UserTrainingCardTypes.ExploreCommunities) && ( @@ -245,6 +249,7 @@ export const UserTrainingSlider = () => { userId, ); }} + className="scaled-down" /> )} From 4b5181a36c568fc8e066462de54828a8493a7c9c Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 10:55:24 +0300 Subject: [PATCH 262/425] add snapshot webhook authentication --- libs/core/src/config.ts | 2 -- .../commonwealth/server/api/integration-router.ts | 12 ++++++++++++ packages/commonwealth/server/config.ts | 7 +++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/libs/core/src/config.ts b/libs/core/src/config.ts index f39f7b16925..ec84098b8e0 100644 --- a/libs/core/src/config.ts +++ b/libs/core/src/config.ts @@ -18,8 +18,6 @@ const AppEnvironments = [ 'beta', 'demo', 'production', - 'discobot', - 'snapshot', ] as const; type Environment = (typeof Environments)[number]; type AppEnvironment = (typeof AppEnvironments)[number]; diff --git a/packages/commonwealth/server/api/integration-router.ts b/packages/commonwealth/server/api/integration-router.ts index 9a4904e7d97..01b44ac2735 100644 --- a/packages/commonwealth/server/api/integration-router.ts +++ b/packages/commonwealth/server/api/integration-router.ts @@ -1,6 +1,8 @@ import { express } from '@hicommonwealth/adapters'; +import { AppError } from '@hicommonwealth/core'; import { ChainEvents, Snapshot } from '@hicommonwealth/model'; import { Router, raw } from 'express'; +import { config } from '../config'; const PATH = '/api/integration'; @@ -26,6 +28,16 @@ function build() { router.post( '/snapshot/webhook', + (req, _, next) => { + const headerSecret = req.headers['authentication']; + if ( + config.SNAPSHOT_WEBHOOK_SECRET && + headerSecret !== config.SNAPSHOT_WEBHOOK_SECRET + ) { + throw new AppError('Unauthorized', 401); + } + return next(); + }, express.command(Snapshot.CreateSnapshotProposal()), ); diff --git a/packages/commonwealth/server/config.ts b/packages/commonwealth/server/config.ts index c8e6af02f87..733773d4a18 100644 --- a/packages/commonwealth/server/config.ts +++ b/packages/commonwealth/server/config.ts @@ -156,5 +156,12 @@ export const config = configure( EVM_CE_POLL_INTERVAL_MS: z.number().int().positive(), }), PEER_ID: z.string().optional(), + SNAPSHOT_WEBHOOK_SECRET: z + .string() + .optional() + .refine( + (data) => !(!['local', 'CI'].includes(model_config.APP_ENV) && !data), + 'SNAPSHOT_WEBHOOK_SECRET is required in public environments', + ), }), ); From 64a70c39a5444b2d87d110e061045066c2b744d2 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 11:22:11 +0300 Subject: [PATCH 263/425] remove snapshot/discobot APP_ENV reference --- libs/adapters/src/config.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libs/adapters/src/config.ts b/libs/adapters/src/config.ts index 51aca9e6e2c..7bf8b81610f 100644 --- a/libs/adapters/src/config.ts +++ b/libs/adapters/src/config.ts @@ -296,9 +296,7 @@ export const config = configure( }) .refine( (data) => { - if ( - !['local', 'CI', 'discobot', 'snapshot'].includes(target.APP_ENV) - ) { + if (!['local', 'CI'].includes(target.APP_ENV)) { return ( !!LOAD_TESTING_AUTH_TOKEN && data.AUTH_TOKEN !== DEFAULTS.LOAD_TESTING_AUTH_TOKEN From fccecdbe2b86eadd7857e70bc0d60d732a8fe761 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 12:54:36 +0300 Subject: [PATCH 264/425] new banAddress command --- .../model/src/community/BanAddress.command.ts | 35 +++++++++++++++++++ libs/model/src/community/index.ts | 1 + .../schemas/src/commands/community.schemas.ts | 8 +++++ packages/commonwealth/server/api/community.ts | 1 + 4 files changed, 45 insertions(+) create mode 100644 libs/model/src/community/BanAddress.command.ts diff --git a/libs/model/src/community/BanAddress.command.ts b/libs/model/src/community/BanAddress.command.ts new file mode 100644 index 00000000000..c2f4a601314 --- /dev/null +++ b/libs/model/src/community/BanAddress.command.ts @@ -0,0 +1,35 @@ +import { InvalidState, type Command } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { models } from '../database'; +import { AuthContext, isAuthorized } from '../middleware'; + +const Errors = { + NotFound: 'Address not found', + AlreadyExists: 'Ban for this address already exists', +}; + +export function BanAddress(): Command { + return { + ...schemas.BanAddress, + auth: [isAuthorized({ roles: ['admin'] })], + body: async ({ payload }) => { + const { community_id, address } = payload; + const addressInstance = await models.Address.findOne({ + where: { + community_id, + address, + }, + }); + if (!addressInstance) { + throw new InvalidState(Errors.NotFound); + } + if (addressInstance.is_banned) { + throw new InvalidState(Errors.AlreadyExists); + } + addressInstance.is_banned = true; + await addressInstance.save(); + + return {}; + }, + }; +} diff --git a/libs/model/src/community/index.ts b/libs/model/src/community/index.ts index 7a99078703b..18434198e8a 100644 --- a/libs/model/src/community/index.ts +++ b/libs/model/src/community/index.ts @@ -1,3 +1,4 @@ +export * from './BanAddress.command'; export * from './CreateCommunity.command'; export * from './CreateGroup.command'; export * from './CreateStakeTransaction.command'; diff --git a/libs/schemas/src/commands/community.schemas.ts b/libs/schemas/src/commands/community.schemas.ts index 22d9a5df459..c34523597cd 100644 --- a/libs/schemas/src/commands/community.schemas.ts +++ b/libs/schemas/src/commands/community.schemas.ts @@ -304,3 +304,11 @@ export const JoinCommunity = { ss58Prefix: z.number().optional(), }), }; + +export const BanAddress = { + input: z.object({ + community_id: z.string(), + address: z.string(), + }), + output: z.object({}), +}; diff --git a/packages/commonwealth/server/api/community.ts b/packages/commonwealth/server/api/community.ts index 5c43c062a7d..fcb1a1f7529 100644 --- a/packages/commonwealth/server/api/community.ts +++ b/packages/commonwealth/server/api/community.ts @@ -126,4 +126,5 @@ export const trpcRouter = trpc.router({ community: result.community_id, }), ]), + banAddress: trpc.command(Community.BanAddress, trpc.Tag.Community), }); From 1d6e8803fc64cec3e8077f24d2b1e7daf1fcab9b Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 13:01:53 +0300 Subject: [PATCH 265/425] use trpc on the client --- .../scripts/state/api/profiles/banAddress.ts | 7 +++++ .../state/api/profiles/banProfileByAddress.ts | 30 ------------------- .../scripts/state/api/profiles/index.ts | 4 +-- .../scripts/views/modals/ban_user_modal.tsx | 12 ++++++-- 4 files changed, 18 insertions(+), 35 deletions(-) create mode 100644 packages/commonwealth/client/scripts/state/api/profiles/banAddress.ts delete mode 100644 packages/commonwealth/client/scripts/state/api/profiles/banProfileByAddress.ts diff --git a/packages/commonwealth/client/scripts/state/api/profiles/banAddress.ts b/packages/commonwealth/client/scripts/state/api/profiles/banAddress.ts new file mode 100644 index 00000000000..5426bba67fe --- /dev/null +++ b/packages/commonwealth/client/scripts/state/api/profiles/banAddress.ts @@ -0,0 +1,7 @@ +import { trpc } from 'client/scripts/utils/trpcClient'; + +const useBanAddressMutation = () => { + return trpc.community.banAddress.useMutation({}); +}; + +export default useBanAddressMutation; diff --git a/packages/commonwealth/client/scripts/state/api/profiles/banProfileByAddress.ts b/packages/commonwealth/client/scripts/state/api/profiles/banProfileByAddress.ts deleted file mode 100644 index be7c835fe02..00000000000 --- a/packages/commonwealth/client/scripts/state/api/profiles/banProfileByAddress.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { useMutation } from '@tanstack/react-query'; -import axios from 'axios'; -import { userStore } from '../../ui/user'; - -interface BanProfileByAddressProps { - address: string; - communityId: string; -} - -const banProfileByAddress = async ({ - address, - communityId, -}: BanProfileByAddressProps) => { - return await axios.post('/api/banAddress', { - jwt: userStore.getState().jwt, - address: address, - community_id: communityId, - }); -}; - -const useBanProfileByAddressMutation = () => { - return useMutation({ - mutationFn: banProfileByAddress, - onSuccess: async (response) => { - return response; - }, - }); -}; - -export default useBanProfileByAddressMutation; diff --git a/packages/commonwealth/client/scripts/state/api/profiles/index.ts b/packages/commonwealth/client/scripts/state/api/profiles/index.ts index b44a27d9126..bcb1807c8a1 100644 --- a/packages/commonwealth/client/scripts/state/api/profiles/index.ts +++ b/packages/commonwealth/client/scripts/state/api/profiles/index.ts @@ -1,10 +1,10 @@ -import useBanProfileByAddressMutation from './banProfileByAddress'; +import useBanAddressMutation from './banAddress'; import useFetchProfileByIdQuery from './fetchProfileById'; import useFetchProfilesByAddressesQuery from './fetchProfilesByAddress'; import useSearchProfilesQuery from './searchProfiles'; export { - useBanProfileByAddressMutation, + useBanAddressMutation, useFetchProfileByIdQuery, useFetchProfilesByAddressesQuery, useSearchProfilesQuery, diff --git a/packages/commonwealth/client/scripts/views/modals/ban_user_modal.tsx b/packages/commonwealth/client/scripts/views/modals/ban_user_modal.tsx index 3b6d7e54677..8980659591e 100644 --- a/packages/commonwealth/client/scripts/views/modals/ban_user_modal.tsx +++ b/packages/commonwealth/client/scripts/views/modals/ban_user_modal.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { useBanProfileByAddressMutation } from 'state/api/profiles'; +import { useBanAddressMutation } from 'state/api/profiles'; import { CWText } from 'views/components/component_kit/cw_text'; import { notifyError, @@ -20,7 +20,7 @@ type BanUserModalAttrs = { }; export const BanUserModal = ({ address, onModalClose }: BanUserModalAttrs) => { - const { mutateAsync: banUser } = useBanProfileByAddressMutation(); + const { mutateAsync: banUser } = useBanAddressMutation(); const handleModalClose = (e) => { e.stopPropagation(); @@ -34,11 +34,17 @@ export const BanUserModal = ({ address, onModalClose }: BanUserModalAttrs) => { return; } + const community_id = app.activeChainId(); + if (!community_id) { + notifyError('Must be in an active community to ban!'); + return; + } + try { handleModalClose(event); await banUser({ address, - communityId: app.activeChainId() || '', + community_id, }); notifySuccess('Banned Address'); } catch (err) { From 0f28c1577343bb5ebe0e8e29fe5706f8dd651605 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 13:03:00 +0300 Subject: [PATCH 266/425] remove legacy ban route --- .../commonwealth/server/routes/banAddress.ts | 63 ------------------- .../commonwealth/server/routing/router.ts | 11 ---- 2 files changed, 74 deletions(-) delete mode 100644 packages/commonwealth/server/routes/banAddress.ts diff --git a/packages/commonwealth/server/routes/banAddress.ts b/packages/commonwealth/server/routes/banAddress.ts deleted file mode 100644 index afd68f4e5a4..00000000000 --- a/packages/commonwealth/server/routes/banAddress.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { AppError } from '@hicommonwealth/core'; -import type { DB } from '@hicommonwealth/model'; -import type { TypedRequestBody, TypedResponse } from '../types'; -import { success } from '../types'; -import { validateOwner } from '../util/validateOwner'; - -enum BanAddressErrors { - NoAddress = 'Must supply an address', - NoPermission = 'You do not have permission to ban an address', - AlreadyExists = 'Ban for this address already exists', - NotFound = 'Address not found', -} - -type BanAddressReq = { - community_id: string; - address: string; -}; - -type BanAddressResp = {}; - -const banAddress = async ( - models: DB, - req: TypedRequestBody, - res: TypedResponse, -) => { - const { community } = req; - - const isAdmin = await validateOwner({ - models: models, - // @ts-expect-error StrictNullChecks - user: req.user, - // @ts-expect-error StrictNullChecks - communityId: community.id, - allowAdmin: true, - allowSuperAdmin: true, - }); - if (!isAdmin) { - throw new AppError(BanAddressErrors.NoPermission); - } - const { address } = req.body; - if (!address) { - throw new AppError(BanAddressErrors.NoAddress); - } - - const addressInstance = await models.Address.findOne({ - where: { - community_id: community!.id, - address, - }, - }); - if (!addressInstance) { - throw new AppError(BanAddressErrors.NotFound); - } - if (addressInstance.is_banned) { - throw new AppError(BanAddressErrors.AlreadyExists); - } - addressInstance.is_banned = true; - await addressInstance.save(); - - return success(res, {}); -}; - -export default banAddress; diff --git a/packages/commonwealth/server/routing/router.ts b/packages/commonwealth/server/routing/router.ts index 4766ea0e53f..48883c0ffe2 100644 --- a/packages/commonwealth/server/routing/router.ts +++ b/packages/commonwealth/server/routing/router.ts @@ -51,7 +51,6 @@ import updateCommunityPriority from '../routes/updateCommunityPriority'; import type ViewCountCache from '../util/viewCountCache'; import { type DB } from '@hicommonwealth/model'; -import banAddress from '../routes/banAddress'; import setAddressWallet from '../routes/setAddressWallet'; import type DatabaseValidationService from '../middleware/databaseValidationService'; @@ -516,16 +515,6 @@ function setupRouter( writeUserSetting.bind(this, models), ); - // bans - registerRoute( - router, - 'post', - '/banAddress', - passport.authenticate('jwt', { session: false }), - databaseValidationService.validateCommunity, - banAddress.bind(this, models), - ); - // Custom domain update route registerRoute( router, From 4d4a1df95d8e553251abf8d430afdbd7ece23a80 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 13:22:24 +0300 Subject: [PATCH 267/425] ban tests --- .../model/src/community/BanAddress.command.ts | 6 +- .../community/community-lifecycle.spec.ts | 75 +++++++++++++++++-- 2 files changed, 71 insertions(+), 10 deletions(-) diff --git a/libs/model/src/community/BanAddress.command.ts b/libs/model/src/community/BanAddress.command.ts index c2f4a601314..d79066f4c59 100644 --- a/libs/model/src/community/BanAddress.command.ts +++ b/libs/model/src/community/BanAddress.command.ts @@ -3,7 +3,7 @@ import * as schemas from '@hicommonwealth/schemas'; import { models } from '../database'; import { AuthContext, isAuthorized } from '../middleware'; -const Errors = { +export const BanAddressErrors = { NotFound: 'Address not found', AlreadyExists: 'Ban for this address already exists', }; @@ -21,10 +21,10 @@ export function BanAddress(): Command { }, }); if (!addressInstance) { - throw new InvalidState(Errors.NotFound); + throw new InvalidState(BanAddressErrors.NotFound); } if (addressInstance.is_banned) { - throw new InvalidState(Errors.AlreadyExists); + throw new InvalidState(BanAddressErrors.AlreadyExists); } addressInstance.is_banned = true; await addressInstance.save(); diff --git a/libs/model/test/community/community-lifecycle.spec.ts b/libs/model/test/community/community-lifecycle.spec.ts index 0e16c5f3c6f..374604743ce 100644 --- a/libs/model/test/community/community-lifecycle.spec.ts +++ b/libs/model/test/community/community-lifecycle.spec.ts @@ -7,16 +7,15 @@ import { dispose, query, } from '@hicommonwealth/core'; -import { - PermissionEnum, - TopicWeightedVoting, -} from '@hicommonwealth/schemas'; +import { PermissionEnum, TopicWeightedVoting } from '@hicommonwealth/schemas'; import { ChainBase, ChainType } from '@hicommonwealth/shared'; import { Chance } from 'chance'; import { CreateTopic } from 'model/src/community/CreateTopic.command'; import { UpdateTopic } from 'model/src/community/UpdateTopic.command'; import { afterAll, assert, beforeAll, describe, expect, test } from 'vitest'; import { + BanAddress, + BanAddressErrors, CreateCommunity, CreateGroup, CreateGroupErrors, @@ -364,15 +363,30 @@ describe('Community lifecycle', () => { payload: buildCreateGroupPayload(community.id, [ { id: 1, - permissions: [PermissionEnum.CREATE_COMMENT, PermissionEnum.CREATE_THREAD, PermissionEnum.CREATE_COMMENT_REACTION,PermissionEnum.CREATE_THREAD_REACTION], + permissions: [ + PermissionEnum.CREATE_COMMENT, + PermissionEnum.CREATE_THREAD, + PermissionEnum.CREATE_COMMENT_REACTION, + PermissionEnum.CREATE_THREAD_REACTION, + ], }, { id: 2, - permissions: [PermissionEnum.CREATE_COMMENT, PermissionEnum.CREATE_THREAD, PermissionEnum.CREATE_COMMENT_REACTION,PermissionEnum.CREATE_THREAD_REACTION], + permissions: [ + PermissionEnum.CREATE_COMMENT, + PermissionEnum.CREATE_THREAD, + PermissionEnum.CREATE_COMMENT_REACTION, + PermissionEnum.CREATE_THREAD_REACTION, + ], }, { id: 3, - permissions: [PermissionEnum.CREATE_COMMENT, PermissionEnum.CREATE_THREAD, PermissionEnum.CREATE_COMMENT_REACTION,PermissionEnum.CREATE_THREAD_REACTION], + permissions: [ + PermissionEnum.CREATE_COMMENT, + PermissionEnum.CREATE_THREAD, + PermissionEnum.CREATE_COMMENT_REACTION, + PermissionEnum.CREATE_THREAD_REACTION, + ], }, ]), }), @@ -784,4 +798,51 @@ describe('Community lifecycle', () => { ).rejects.toThrow(JoinCommunityErrors.NotVerifiedAddressOrUser); }); }); + + describe('ban address', () => { + test('should fail if actor is not admin', async () => { + await expect(() => + command(BanAddress(), { + actor: ethActor, + payload: { + community_id: community.id!, + address: '', + }, + }), + ).rejects.toThrow(InvalidActor); + }); + test('should fail to ban an address of a different community', async () => { + await expect(() => + command(BanAddress(), { + actor: ethAdminActor, + payload: { + address: substrateActor.address!, + community_id: substrate_community.id!, + }, + }), + ).rejects.toThrow(InvalidActor); + }); + test('should fail if address is not found in community', async () => { + await expect(() => + command(BanAddress(), { + actor: ethAdminActor, + payload: { address: '0xrandom', community_id: community.id! }, + }), + ).rejects.toThrow(BanAddressErrors.NotFound); + }); + test('should allow an admin to ban an address', async () => { + await command(BanAddress(), { + actor: ethAdminActor, + payload: { address: ethActor.address!, community_id: community.id! }, + }); + }); + test('should fail if address is already banned', async () => { + await expect(() => + command(BanAddress(), { + actor: ethAdminActor, + payload: { address: ethActor.address!, community_id: community.id! }, + }), + ).rejects.toThrow(BanAddressErrors.AlreadyExists); + }); + }); }); From 38a37bd41467c6bc21fc8307f6cbacd0d0802794 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 13:25:03 +0300 Subject: [PATCH 268/425] syntax fix --- .../community/community-lifecycle.spec.ts | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/libs/model/test/community/community-lifecycle.spec.ts b/libs/model/test/community/community-lifecycle.spec.ts index 374604743ce..03666305787 100644 --- a/libs/model/test/community/community-lifecycle.spec.ts +++ b/libs/model/test/community/community-lifecycle.spec.ts @@ -678,18 +678,18 @@ describe('Community lifecycle', () => { id: community.id, chain_node_id: edgewareNode!.id!, }, - }), - await expect(() => - command(UpdateCommunity(), { - actor: superAdminActor, - payload: { - ...baseRequest, - id: community.id, - namespace: 'tempNamespace', - transactionHash: '0x1234', - }, - }), - ).rejects.toThrow('Namespace not supported on selected chain'); + }); + await expect(() => + command(UpdateCommunity(), { + actor: superAdminActor, + payload: { + ...baseRequest, + id: community.id, + namespace: 'tempNamespace', + transactionHash: '0x1234', + }, + }), + ).rejects.toThrow('Namespace not supported on selected chain'); }); }); From cc86f689c268f7dcebb2859d554c998697367b55 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 13:26:41 +0300 Subject: [PATCH 269/425] add banAddress to external API --- packages/commonwealth/server/api/external-router.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 742475cc0da..919ac93812d 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -23,6 +23,7 @@ const { updateGroup, deleteGroup, joinCommunity, + banAddress, } = community.trpcRouter; const { createThread, @@ -74,6 +75,7 @@ const api = { createCommentReaction, deleteReaction, joinCommunity, + banAddress, }; const PATH = '/api/v1'; From f80cc1fd8f18512f0163dc17dad8f8f0689ef7a8 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 13:52:29 +0300 Subject: [PATCH 270/425] update CI --- .github/workflows/CI.yml | 117 ++++++++--------------------- packages/commonwealth/package.json | 2 +- 2 files changed, 34 insertions(+), 85 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 3d3cb1f365d..26cb2c225ea 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -291,7 +291,7 @@ jobs: run: cd packages/commonwealth && ./scripts/detect-broken-ts-expect-error.sh # These tests run quickly, so run them in a separate job - commonwealth-unit-integration: + commonwealth-integration: name: Commonwealth Unit And Integration Tests runs-on: ubuntu-latest timeout-minutes: 20 @@ -336,39 +336,13 @@ jobs: - name: Build run: pnpm -r build - - name: Run unit tests - run: pnpm -r test -- --allowOnly=false - - - name: Change permissions of coverage files - run: | - chmod -R 755 ./libs/adapters/coverage/lcov.info - chmod -R 755 ./libs/core/coverage/lcov.info - chmod -R 755 ./libs/model/coverage/lcov.info - chmod -R 755 ./libs/sitemaps/coverage/lcov.info - chmod -R 755 ./packages/commonwealth/coverage/lcov.info - chmod -R 755 ./packages/scripts/coverage/lcov.info - - - name: Coveralls parallel - uses: coverallsapp/github-action@v2 - with: - flag-name: unit-test-coverage - parallel: true - files: libs/adapters/coverage/lcov.info libs/core/coverage/lcov.info libs/model/coverage/lcov.info libs/sitemaps/coverage/lcov.info packages/commonwealth/coverage/lcov.info packages/scripts/coverage/lcov.info - - name: Run integration tests run: pnpm -F commonwealth test-integration --allowOnly=false - - name: Coveralls parallel - uses: coverallsapp/github-action@v2 - with: - flag-name: integration-test-coverage - parallel: true - files: ./packages/commonwealth/coverage/lcov.info - - commonwealth-evm-tests: - name: EVM Devnet Tests + commonwealth-unit-tests: + name: Commonwealth Unit Tests runs-on: ubuntu-latest - timeout-minutes: 10 + timeout-minutes: 20 strategy: matrix: node: [ 20 ] @@ -393,30 +367,41 @@ jobs: image: redis:latest ports: - 6379:6379 + rabbitmq: + image: rabbitmq:3.11-management + ports: + - 5672:5672 + - 15672:15672 + steps: - - uses: actions/checkout@v4 + - name: Checkout + uses: actions/checkout@v4 - uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 + - name: Run unit tests + run: pnpm -r test -- --allowOnly=false - - name: Run EVM Devnet tests - run: pnpm -F commonwealth test-devnet:evm --allowOnly=false + - name: Change permissions of coverage files + run: | + chmod -R 755 ./libs/adapters/coverage/lcov.info + chmod -R 755 ./libs/core/coverage/lcov.info + chmod -R 755 ./libs/model/coverage/lcov.info + chmod -R 755 ./libs/sitemaps/coverage/lcov.info - name: Coveralls parallel uses: coverallsapp/github-action@v2 with: - flag-name: evm-devnet-test-coverage + flag-name: unit-test-coverage parallel: true - files: packages/commonwealth/coverage/lcov.info + files: libs/adapters/coverage/lcov.info libs/core/coverage/lcov.info libs/model/coverage/lcov.info libs/sitemaps/coverage/lcov.info - # These tests run slowly, so run them in a separate job - commonwealth-cosmos-tests: - name: Cosmos Devnet Tests + + commonwealth-evm-tests: + name: EVM Devnet Tests runs-on: ubuntu-latest - timeout-minutes: 25 + timeout-minutes: 10 strategy: matrix: node: [ 20 ] @@ -437,61 +422,26 @@ jobs: ports: # Maps tcp port 5432 on service container to the host - 5432:5432 - cosmos_test_app: - image: mhagel1/csdk-v1 - ports: - - 5051:5051 - cosmos_beta_test_app: - image: mhagel1/csdk-beta - ports: - - 5050:5050 - evmos_test_app: - image: mhagel1/evmos-dev - ports: - - 5052:5052 redis: image: redis:latest ports: - 6379:6379 - steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} - ## Cosmos Section: - # We only run Cosmos devnet tests if any files in the following folders changes - - name: Get changed Cosmos devnet-related files - id: changed-files-specific - uses: tj-actions/changed-files@v35 - with: - files: | - packages/commonwealth/test/devnet/cosmos/**/* - packages/commonwealth/server/cosmos-gov-notifications/**/* - packages/commonwealth/test/integration/cosmosGovNotifGenerator.spec.ts - packages/commonwealth/server/util/cosmosProxy.ts - packages/commonwealth/client/scripts/controllers/chain/cosmos/gov/**/* - packages/commonwealth/test/util/cosmos-chain-testing/**/* - libs/chains/src/cosmos-ts/**/* - - - name: Run following steps if any file(s) in the Cosmos folders change - if: steps.changed-files-specific.outputs.all_changed_files - run: | - echo "One or more Cosmos Devnet-related files has changed." - echo "List all the files that have changed: ${{ steps.changed-files-specific.outputs.all_changed_files }}" + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 - - name: Run Cosmos Devnet tests - if: steps.changed-files-specific.outputs.any_changed == 'true' - run: | - pnpm -F commonwealth start & - (pnpm -F commonwealth wait-server && pnpm -F commonwealth test-devnet:cosmos --allowOnly=false) + - name: Run EVM Devnet tests + run: pnpm -F commonwealth test-devnet:evm --allowOnly=false - name: Coveralls parallel - if: steps.changed-files-specific.outputs.all_changed_files uses: coverallsapp/github-action@v2 with: - flag-name: cosmos-devnet-test-coverage + flag-name: evm-devnet-test-coverage parallel: true files: packages/commonwealth/coverage/lcov.info @@ -499,7 +449,7 @@ jobs: name: Upload Test Coverage Report runs-on: ubuntu-latest timeout-minutes: 5 - needs: [ commonwealth-cosmos-tests, commonwealth-evm-tests, commonwealth-unit-integration, e2e-tests-serial, e2e-tests-Parallel, e2e-tests-Mature ] + needs: [ commonwealth-evm-tests, commonwealth-unit-tests ] if: always() strategy: matrix: @@ -509,5 +459,4 @@ jobs: - name: Coveralls Finished uses: coverallsapp/github-action@v2 with: - parallel-finished: true - carryforward: "cosmos-devnet-test-coverage" + parallel-finished: true \ No newline at end of file diff --git a/packages/commonwealth/package.json b/packages/commonwealth/package.json index d46ed58cb68..52d44c032c7 100644 --- a/packages/commonwealth/package.json +++ b/packages/commonwealth/package.json @@ -66,7 +66,7 @@ "test-e2e-mature": "NODE_OPTIONS='--import tsx/esm' NODE_ENV=test TEST_ENV=playwright npx playwright test -c ./test/e2e/playwright.config.ts --workers 1 ./test/e2e/mature/*", "test-e2e-serial": "NODE_OPTIONS='--import tsx/esm' NODE_ENV=test TEST_ENV=playwright npx playwright test --workers 1 ./test/e2e/e2eSerial/*", "test-integration": "INIT_TEST_DB=true NODE_ENV=test vitest --config ../../vite.config.ts --fileParallelism=false --coverage run ./test/integration", - "test-unit": "NODE_ENV=test FEATURE_FLAG_GROUP_CHECK_ENABLED=true vitest --config ../../vite.config.ts --coverage run test/unit", + "test-unit": "NODE_ENV=test FEATURE_FLAG_GROUP_CHECK_ENABLED=true vitest --config ../../vite.config.ts run test/unit", "test-select": "INIT_TEST_DB=true NODE_ENV=test vitest --config ../../vite.config.ts --fileParallelism=false run", "test-select:watch": "INIT_TEST_DB=true NODE_ENV=test vitest --config ../../vite.config.ts --fileParallelism=false", "ts-exec": "tsx ", From 5c1ba0e6726b8f8e1295bc11a4116adbdbbbd85c Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 13:53:29 +0300 Subject: [PATCH 271/425] fix name --- .github/workflows/CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 26cb2c225ea..ff6ef84a391 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -291,8 +291,8 @@ jobs: run: cd packages/commonwealth && ./scripts/detect-broken-ts-expect-error.sh # These tests run quickly, so run them in a separate job - commonwealth-integration: - name: Commonwealth Unit And Integration Tests + commonwealth-integration-test: + name: Commonwealth Integration Tests runs-on: ubuntu-latest timeout-minutes: 20 strategy: From 5c8740aa453fc6a34a7b8effeead83da8fbd071c Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Fri, 18 Oct 2024 14:05:30 +0300 Subject: [PATCH 272/425] remove tests for packages/scripts --- packages/scripts/package.json | 2 +- packages/scripts/tsconfig.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/scripts/package.json b/packages/scripts/package.json index b7e77426145..9ddd3108641 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -11,7 +11,7 @@ "build": "tsc -b ./tsconfig.build.json", "clean": "rm -rf build && rm -rf coverage", "check-types": "tsc --noEmit", - "test": "NODE_ENV=test vitest --config ../../vite.config.ts --coverage run test", + "test": "echo No tests for packages/scripts", "test-dev": "NODE_ENV=test vitest --config ../../vite.config.ts test", "generate-stakeholder-groups": "tsx src/generate-stakeholder-groups", "lint": "NODE_OPTIONS=\"--max-old-space-size=4096\" eslint -c ../../.eslintrc.cjs './src/**/*.{ts,tsx}'", diff --git a/packages/scripts/tsconfig.json b/packages/scripts/tsconfig.json index 91b9b5c33ff..74209a6dcc6 100644 --- a/packages/scripts/tsconfig.json +++ b/packages/scripts/tsconfig.json @@ -7,6 +7,7 @@ "references": [ { "path": "../../libs/core/tsconfig.build.json" }, { "path": "../../libs/model/tsconfig.build.json" }, - { "path": "../../libs/sitemaps/tsconfig.build.json" } + { "path": "../../libs/sitemaps/tsconfig.build.json" }, + { "path": "../../libs/adapters/tsconfig.build.json" } ] } From 9de5d8dc52dc66c3e05e6daefb635f951bb2a683 Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 18 Oct 2024 13:33:14 +0200 Subject: [PATCH 273/425] Add `isOneOff` prop and update `getTotalContestBalance` import path. --- libs/model/src/services/commonProtocol/contestHelper.ts | 4 ++-- .../client/scripts/helpers/ContractHelpers/Contest.ts | 5 ++--- .../scripts/state/api/contests/getContestBalance.ts | 9 +++++++-- .../Contests/ContestsList/ContestCard/ContestCard.tsx | 1 + .../Contests/FundContestDrawer/useFundContestForm.ts | 1 + 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/libs/model/src/services/commonProtocol/contestHelper.ts b/libs/model/src/services/commonProtocol/contestHelper.ts index 1013bc98b24..c1b4135591e 100644 --- a/libs/model/src/services/commonProtocol/contestHelper.ts +++ b/libs/model/src/services/commonProtocol/contestHelper.ts @@ -1,6 +1,6 @@ import { AppError } from '@hicommonwealth/core'; +import { commonProtocol } from '@hicommonwealth/shared'; import { Mutex } from 'async-mutex'; -import { getTotalContestBalance } from 'shared/src/commonProtocol'; import Web3, { PayableCallOptions } from 'web3'; import { AbiItem } from 'web3-utils'; import { config } from '../../config'; @@ -265,7 +265,7 @@ export const getContestBalance = async ( contest, ); - const balance = await getTotalContestBalance( + const balance = await commonProtocol.getTotalContestBalance( contestInstance, contest, web3, diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts index 7ac7ae875c7..1e35bdb12ef 100644 --- a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Contest.ts @@ -1,5 +1,4 @@ -import { ZERO_ADDRESS } from '@hicommonwealth/shared'; -import { getTotalContestBalance } from 'node_modules/@hicommonwealth/shared/src/commonProtocol'; +import { ZERO_ADDRESS, commonProtocol } from '@hicommonwealth/shared'; import { AbiItem, TransactionReceipt } from 'web3'; import { ContestAbi } from './Abi/ContestAbi'; import { Erc20Abi } from './Abi/ERC20Abi'; @@ -238,7 +237,7 @@ class Contest extends ContractBase { await this.initialize(false); } this.reInitContract(); - const contestBalance = await getTotalContestBalance( + const contestBalance = await commonProtocol.getTotalContestBalance( this.contract, this.contractAddress, this.web3, diff --git a/packages/commonwealth/client/scripts/state/api/contests/getContestBalance.ts b/packages/commonwealth/client/scripts/state/api/contests/getContestBalance.ts index 605c358436a..c58841b719d 100644 --- a/packages/commonwealth/client/scripts/state/api/contests/getContestBalance.ts +++ b/packages/commonwealth/client/scripts/state/api/contests/getContestBalance.ts @@ -11,6 +11,7 @@ const getContestBalance = async ({ contestAddress, chainRpc, ethChainId, + isOneOff, }: UseGetContestBalanceProps) => { const contest = new Contest( contestAddress, @@ -18,7 +19,7 @@ const getContestBalance = async ({ chainRpc, ); - return await contest.getContestBalance(); + return await contest.getContestBalance(isOneOff); }; interface UseGetContestBalanceQueryProps { @@ -26,6 +27,7 @@ interface UseGetContestBalanceQueryProps { chainRpc: string; ethChainId: number; apiEnabled?: boolean; + isOneOff: boolean; } const useGetContestBalanceQuery = ({ @@ -33,6 +35,7 @@ const useGetContestBalanceQuery = ({ chainRpc, ethChainId, apiEnabled = true, + isOneOff, }: UseGetContestBalanceQueryProps) => { return useQuery({ queryKey: [ @@ -40,8 +43,10 @@ const useGetContestBalanceQuery = ({ contestAddress, chainRpc, ethChainId, + isOneOff, ], - queryFn: () => getContestBalance({ contestAddress, chainRpc, ethChainId }), + queryFn: () => + getContestBalance({ contestAddress, chainRpc, ethChainId, isOneOff }), staleTime: GET_CONTEST_BALANCE_STALE_TIME, enabled: !!contestAddress && apiEnabled, }); diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestCard/ContestCard.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestCard/ContestCard.tsx index c854e1ddde5..63edbd89160 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestCard/ContestCard.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestCard/ContestCard.tsx @@ -107,6 +107,7 @@ const ContestCard = ({ chainRpc: app.chain.meta?.ChainNode?.url || '', ethChainId: app.chain.meta?.ChainNode?.eth_chain_id || 0, apiEnabled: !isRecurring, + isOneOff: !isRecurring, }); const handleCancel = () => { diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts index d89e355ee10..9e9341f25b0 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts @@ -64,6 +64,7 @@ const useFundContestForm = ({ contestAddress, chainRpc, ethChainId, + isOneOff: !!fundingTokenAddress, }); const contestTokenBalance = From 763d23ffcb5159499f16cfe2fb62c67426508576 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 18 Oct 2024 09:07:20 -0400 Subject: [PATCH 274/425] move query to community --- .../{thread => community}/GetTopics.query.ts | 0 libs/model/src/community/index.ts | 1 + libs/model/src/thread/index.ts | 1 - .../community/community-lifecycle.spec.ts | 35 +++++++++++++++---- .../server/api/external-router.ts | 4 +-- packages/commonwealth/server/api/threads.ts | 4 +-- .../server_topics_controller.spec.ts | 10 ------ 7 files changed, 33 insertions(+), 22 deletions(-) rename libs/model/src/{thread => community}/GetTopics.query.ts (100%) diff --git a/libs/model/src/thread/GetTopics.query.ts b/libs/model/src/community/GetTopics.query.ts similarity index 100% rename from libs/model/src/thread/GetTopics.query.ts rename to libs/model/src/community/GetTopics.query.ts diff --git a/libs/model/src/community/index.ts b/libs/model/src/community/index.ts index 7a99078703b..4afb6e3587c 100644 --- a/libs/model/src/community/index.ts +++ b/libs/model/src/community/index.ts @@ -12,6 +12,7 @@ export * from './GetCommunityStake.query'; export * from './GetMembers.query'; export * from './GetStakeHistoricalPrice.query'; export * from './GetStakeTransaction.query'; +export * from './GetTopics.query'; export * from './JoinCommunity.command'; export * from './RefreshCommunityMemberships.command'; export * from './RefreshCustomDomain.query'; diff --git a/libs/model/src/thread/index.ts b/libs/model/src/thread/index.ts index 72877341b38..b29d9c54a60 100644 --- a/libs/model/src/thread/index.ts +++ b/libs/model/src/thread/index.ts @@ -3,5 +3,4 @@ export * from './CreateThreadReaction.command'; export * from './DeleteThread.command'; export * from './GetThread.query'; export * from './GetThreads.query'; -export * from './GetTopics.query'; export * from './UpdateThread.command'; diff --git a/libs/model/test/community/community-lifecycle.spec.ts b/libs/model/test/community/community-lifecycle.spec.ts index 0e16c5f3c6f..a1fb60a465a 100644 --- a/libs/model/test/community/community-lifecycle.spec.ts +++ b/libs/model/test/community/community-lifecycle.spec.ts @@ -7,10 +7,7 @@ import { dispose, query, } from '@hicommonwealth/core'; -import { - PermissionEnum, - TopicWeightedVoting, -} from '@hicommonwealth/schemas'; +import { PermissionEnum, TopicWeightedVoting } from '@hicommonwealth/schemas'; import { ChainBase, ChainType } from '@hicommonwealth/shared'; import { Chance } from 'chance'; import { CreateTopic } from 'model/src/community/CreateTopic.command'; @@ -25,6 +22,7 @@ import { DeleteTopic, GetCommunities, GetMembers, + GetTopics, JoinCommunity, JoinCommunityErrors, MAX_GROUPS_PER_COMMUNITY, @@ -364,15 +362,30 @@ describe('Community lifecycle', () => { payload: buildCreateGroupPayload(community.id, [ { id: 1, - permissions: [PermissionEnum.CREATE_COMMENT, PermissionEnum.CREATE_THREAD, PermissionEnum.CREATE_COMMENT_REACTION,PermissionEnum.CREATE_THREAD_REACTION], + permissions: [ + PermissionEnum.CREATE_COMMENT, + PermissionEnum.CREATE_THREAD, + PermissionEnum.CREATE_COMMENT_REACTION, + PermissionEnum.CREATE_THREAD_REACTION, + ], }, { id: 2, - permissions: [PermissionEnum.CREATE_COMMENT, PermissionEnum.CREATE_THREAD, PermissionEnum.CREATE_COMMENT_REACTION,PermissionEnum.CREATE_THREAD_REACTION], + permissions: [ + PermissionEnum.CREATE_COMMENT, + PermissionEnum.CREATE_THREAD, + PermissionEnum.CREATE_COMMENT_REACTION, + PermissionEnum.CREATE_THREAD_REACTION, + ], }, { id: 3, - permissions: [PermissionEnum.CREATE_COMMENT, PermissionEnum.CREATE_THREAD, PermissionEnum.CREATE_COMMENT_REACTION,PermissionEnum.CREATE_THREAD_REACTION], + permissions: [ + PermissionEnum.CREATE_COMMENT, + PermissionEnum.CREATE_THREAD, + PermissionEnum.CREATE_COMMENT_REACTION, + PermissionEnum.CREATE_THREAD_REACTION, + ], }, ]), }), @@ -566,6 +579,14 @@ describe('Community lifecycle', () => { }), ).rejects.toThrow(InvalidActor); }); + + test('should get topics', async () => { + const topics = await query(GetTopics(), { + actor: superAdminActor, + payload: { community_id: community.id, with_contest_managers: false }, + }); + expect(topics?.length).toBe(4); + }); }); describe('updates', () => { diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 859c16462af..ff34c976dfb 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -1,5 +1,5 @@ import { express, trpc } from '@hicommonwealth/adapters'; -import { Comment, Community, Feed, Thread } from '@hicommonwealth/model'; +import { Comment, Community, Feed } from '@hicommonwealth/model'; import cors from 'cors'; import { Router } from 'express'; import passport from 'passport'; @@ -56,7 +56,7 @@ const api = { getComments: trpc.query(Comment.GetComments, trpc.Tag.Comment, { forceSecure: true, }), - getTopics: trpc.query(Thread.GetTopics, trpc.Tag.Thread, { + getTopics: trpc.query(Community.GetTopics, trpc.Tag.Community, { forceSecure: true, }), createCommunity, diff --git a/packages/commonwealth/server/api/threads.ts b/packages/commonwealth/server/api/threads.ts index a02f6159d69..2e41f7fce2f 100644 --- a/packages/commonwealth/server/api/threads.ts +++ b/packages/commonwealth/server/api/threads.ts @@ -1,11 +1,11 @@ import { trpc } from '@hicommonwealth/adapters'; import { CacheNamespaces, cache } from '@hicommonwealth/core'; -import { Reaction, Thread } from '@hicommonwealth/model'; +import { Community, Reaction, Thread } from '@hicommonwealth/model'; import { MixpanelCommunityInteractionEvent } from '../../shared/analytics/types'; import { applyCanvasSignedDataMiddleware } from '../federation'; export const trpcRouter = trpc.router({ - getTopics: trpc.query(Thread.GetTopics, trpc.Tag.Thread), + getTopics: trpc.query(Community.GetTopics, trpc.Tag.Community), createThread: trpc.command( Thread.CreateThread, trpc.Tag.Thread, diff --git a/packages/commonwealth/test/unit/server_controllers/server_topics_controller.spec.ts b/packages/commonwealth/test/unit/server_controllers/server_topics_controller.spec.ts index b2fdaf46aaa..ab2707906ad 100644 --- a/packages/commonwealth/test/unit/server_controllers/server_topics_controller.spec.ts +++ b/packages/commonwealth/test/unit/server_controllers/server_topics_controller.spec.ts @@ -1,5 +1,4 @@ import { CommunityInstance, UserInstance } from '@hicommonwealth/model'; -import { expect } from 'chai'; import { ServerTopicsController } from 'server/controllers/server_topics_controller'; import { describe, test } from 'vitest'; @@ -79,15 +78,6 @@ const createMockedTopicsController = (isAdmin: boolean = false) => { }; describe('ServerTopicsController', () => { - test('#getTopics', async () => { - const { controller, chain } = createMockedTopicsController(); - const topics = await controller.getTopics({ - community: chain, - with_contest_managers: false, - }); - expect(topics).to.have.length(1); - }); - test('#updateTopicChannel', async () => { const { controller, user } = createMockedTopicsController(true); await controller.updateTopicChannel({ From fc281821fb2c027d51d53a04023345947c717316 Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 18 Oct 2024 15:22:19 +0200 Subject: [PATCH 275/425] Remove feeManagerBalance and score, add payoutStructure and contestBalance --- .../state/api/communityStake/buyStake.ts | 8 +++ .../state/api/communityStake/sellStake.ts | 9 ++++ .../AdminContestsPage/AdminContestsPage.tsx | 1 - .../ContestsList/ContestCard/ContestCard.tsx | 54 ++++++------------- .../Contests/ContestsList/ContestsList.tsx | 7 +-- .../views/pages/ContestPage/ContestPage.tsx | 4 +- .../HeaderWithFilters/HeaderWithFilters.tsx | 19 ++----- 7 files changed, 41 insertions(+), 61 deletions(-) diff --git a/packages/commonwealth/client/scripts/state/api/communityStake/buyStake.ts b/packages/commonwealth/client/scripts/state/api/communityStake/buyStake.ts index ecb35be05ff..5ad12e638e4 100644 --- a/packages/commonwealth/client/scripts/state/api/communityStake/buyStake.ts +++ b/packages/commonwealth/client/scripts/state/api/communityStake/buyStake.ts @@ -62,6 +62,14 @@ const useBuyStakeMutation = ({ queryKey: [ContractMethods.GET_FEE_MANAGER_BALANCE], }); + await queryClient.invalidateQueries({ + queryKey: [ContractMethods.GET_CONTEST_BALANCE], + }); + + await queryClient.invalidateQueries({ + queryKey: [ContractMethods.GET_CONTEST_BALANCE], + }); + if (shouldUpdateActiveAddress) { await setActiveAccountOnTransactionSuccess(variables.walletAddress); } diff --git a/packages/commonwealth/client/scripts/state/api/communityStake/sellStake.ts b/packages/commonwealth/client/scripts/state/api/communityStake/sellStake.ts index 962b2954a09..251d1748f69 100644 --- a/packages/commonwealth/client/scripts/state/api/communityStake/sellStake.ts +++ b/packages/commonwealth/client/scripts/state/api/communityStake/sellStake.ts @@ -49,6 +49,15 @@ const useSellStakeMutation = () => { variables.walletAddress, ], }); + + await queryClient.invalidateQueries({ + queryKey: [ContractMethods.GET_CONTEST_BALANCE], + }); + + await queryClient.invalidateQueries({ + queryKey: [ContractMethods.GET_FEE_MANAGER_BALANCE], + }); + await setActiveAccountOnTransactionSuccess(variables.walletAddress); }, }); diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx index 787ca182d90..ab34085e0df 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx @@ -130,7 +130,6 @@ const AdminContestsPage = () => { hasWeightedTopic={!!hasAtLeastOneWeightedVotingTopic} isContestAvailable={isContestAvailable} stakeEnabled={stakeEnabled} - feeManagerBalance={feeManagerBalance} onSetContestSelectionView={() => setContestView(ContestView.TypeSelection) } diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestCard/ContestCard.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestCard/ContestCard.tsx index 63edbd89160..81498323d6b 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestCard/ContestCard.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestCard/ContestCard.tsx @@ -33,38 +33,23 @@ const noFundsProps = { iconName: 'coins' as IconName, }; -const noUpvotesProps = { - title: 'There are no upvotes on this contest', - description: 'Upvote contest entries to display prizes', - iconName: 'upvote' as IconName, -}; - interface ContestCardProps { address: string; name: string; imageUrl?: string; finishDate: string; topics: { id?: number; name?: string }[]; - score?: - | { - creator_address?: string; - content_id?: string; - votes?: number; - prize?: string; - tickerPrize?: number; - }[] - | null; decimals?: number; ticker?: string; isAdmin: boolean; isCancelled?: boolean; onFund?: () => void; - feeManagerBalance?: string; isRecurring: boolean; showShareButton?: boolean; showLeaderboardButton?: boolean; isHorizontal?: boolean; isFarcaster?: boolean; + payoutStructure?: number[]; } const ContestCard = ({ @@ -73,18 +58,17 @@ const ContestCard = ({ imageUrl, finishDate, topics, - score, decimals, ticker, isAdmin, isCancelled, onFund, - feeManagerBalance, isRecurring, showShareButton = true, showLeaderboardButton = true, isHorizontal = false, isFarcaster = false, + payoutStructure, }: ContestCardProps) => { const navigate = useCommonNavigate(); const user = useUserStore(); @@ -102,14 +86,22 @@ const ContestCard = ({ const { isWindowMediumSmallInclusive } = useBrowserWindow({}); - const { data: oneOffContestBalance } = useGetContestBalanceQuery({ + const { data: contestBalance } = useGetContestBalanceQuery({ contestAddress: address, chainRpc: app.chain.meta?.ChainNode?.url || '', ethChainId: app.chain.meta?.ChainNode?.eth_chain_id || 0, - apiEnabled: !isRecurring, isOneOff: !isRecurring, }); + const prizes = + contestBalance && payoutStructure + ? payoutStructure.map( + (percentage) => + (contestBalance * (percentage / 100)) / + Math.pow(10, decimals || 18), + ) + : []; + const handleCancel = () => { cancelContest({ contest_address: address, @@ -158,12 +150,7 @@ const ContestCard = ({ console.log('Frame copied!'); }; - const balance = isRecurring - ? feeManagerBalance - : String(oneOffContestBalance); - - const showNoFundsInfo = isActive && parseFloat(balance!) <= 0; - const showNoUpvotesInfo = isActive && (!score || score.length === 0); + const showNoFundsInfo = isActive && (contestBalance || 0) <= 0; return ( - ) : showNoUpvotesInfo ? ( - ) : ( <> Current Prizes
    - {score ? ( - score?.map((s, index) => ( -
    + {prizes ? ( + prizes?.map((prize, index) => ( +
    {moment.localeData().ordinal(index + 1)} Prize - {capDecimals( - s.tickerPrize - ? s.tickerPrize?.toFixed(decimals || 18) - : '', - )} - {ticker} + {capDecimals(String(prize))} {ticker}
    )) diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestsList.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestsList.tsx index f749f8b8b8c..3cd535f10e5 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestsList.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ContestsList/ContestsList.tsx @@ -46,7 +46,6 @@ interface ContestsListProps { hasWeightedTopic: boolean; stakeEnabled: boolean; isContestAvailable: boolean; - feeManagerBalance?: string; onSetContestSelectionView?: () => void; } @@ -57,7 +56,6 @@ const ContestsList = ({ hasWeightedTopic, stakeEnabled, isContestAvailable, - feeManagerBalance, onSetContestSelectionView, }: ContestsListProps) => { const [fundDrawerContest, setFundDrawerContest] = useState(); @@ -92,7 +90,7 @@ const ContestsList = ({ moment(a.end_time).isBefore(b.end_time) ? -1 : 1, ); - const { end_time, score } = + const { end_time } = sortedContests[sortedContests.length - 1] || {}; return ( @@ -106,14 +104,13 @@ const ContestsList = ({ imageUrl={contest.image_url} // @ts-expect-error topics={contest.topics} - score={score} decimals={contest.decimals} ticker={contest.ticker} finishDate={end_time ? moment(end_time).toISOString() : ''} isCancelled={contest.cancelled} onFund={() => setFundDrawerContest(contest)} - feeManagerBalance={feeManagerBalance} isRecurring={!contest.funding_token_address} + payoutStructure={contest.payout_structure} /> ); }) diff --git a/packages/commonwealth/client/scripts/views/pages/ContestPage/ContestPage.tsx b/packages/commonwealth/client/scripts/views/pages/ContestPage/ContestPage.tsx index 0b6c597acac..95efa0c91dc 100644 --- a/packages/commonwealth/client/scripts/views/pages/ContestPage/ContestPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/ContestPage/ContestPage.tsx @@ -60,7 +60,7 @@ const ContestPage = ({ contestAddress }: ContestPageProps) => { return ; } - const { end_time, score } = contest?.contests[0] || {}; + const { end_time } = contest?.contests[0] || {}; return ( @@ -77,7 +77,6 @@ const ContestPage = ({ contestAddress }: ContestPageProps) => { name={contest?.name} imageUrl={contest?.image_url || ''} topics={contest?.topics} - score={score} decimals={contest?.decimals} ticker={contest?.ticker} finishDate={end_time ? moment(end_time).toISOString() : ''} @@ -86,6 +85,7 @@ const ContestPage = ({ contestAddress }: ContestPageProps) => { isHorizontal showShareButton={false} showLeaderboardButton={false} + payoutStructure={contest?.payout_structure} /> )} diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx index 7dd9ce51fe3..05a86d25fe0 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx @@ -7,11 +7,9 @@ import React, { useEffect, useRef, useState } from 'react'; import { matchRoutes, useLocation } from 'react-router-dom'; import app from 'state'; import { useGetCommunityByIdQuery } from 'state/api/communities'; -import useGetFeeManagerBalanceQuery from 'state/api/communityStake/getFeeManagerBalance'; import { useFetchTopicsQuery } from 'state/api/topics'; import useUserStore from 'state/ui/user'; import Permissions from 'utils/Permissions'; -import { useCommunityStake } from 'views/components/CommunityStake'; import MarkdownViewerUsingQuillOrNewEditor from 'views/components/MarkdownViewerWithFallback'; import { Select } from 'views/components/Select'; import { CWCheckbox } from 'views/components/component_kit/cw_checkbox'; @@ -67,11 +65,7 @@ export const HeaderWithFilters = ({ const [rightFiltersDropdownPosition, setRightFiltersDropdownPosition] = useState<'bottom-end' | 'bottom-start'>('bottom-end'); - const ethChainId = app?.chain?.meta?.ChainNode?.eth_chain_id || 0; - const { stakeData } = useCommunityStake(); - const namespace = stakeData?.Community?.namespace; - const { isContestAvailable, contestsData, stakeEnabled } = - useCommunityContests(); + const { isContestAvailable, contestsData } = useCommunityContests(); const { data: community } = useGetCommunityByIdQuery({ id: app.activeChainId() || '', @@ -79,12 +73,6 @@ export const HeaderWithFilters = ({ includeNodeInfo: true, }); - const { data: feeManagerBalance } = useGetFeeManagerBalanceQuery({ - ethChainId: ethChainId!, - namespace, - apiEnabled: !!ethChainId && !!namespace && stakeEnabled, - }); - const user = useUserStore(); const onFilterResize = () => { @@ -486,7 +474,7 @@ export const HeaderWithFilters = ({
    {(activeContests || []).map((contest) => { - const { end_time, score } = + const { end_time } = // @ts-expect-error contest?.contests[0] || {}; @@ -501,7 +489,6 @@ export const HeaderWithFilters = ({ imageUrl={contest.image_url} // @ts-expect-error topics={contest.topics} - score={score} decimals={contest.decimals} ticker={contest.ticker} finishDate={end_time ? moment(end_time).toISOString() : ''} @@ -509,7 +496,7 @@ export const HeaderWithFilters = ({ isRecurring={!contest.funding_token_address} isHorizontal showShareButton={false} - feeManagerBalance={feeManagerBalance} + payoutStructure={contest.payout_structure} /> ); })} From 0e50f628eb883165c69401a3f83656d85fa94dd8 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 18 Oct 2024 19:19:32 +0500 Subject: [PATCH 276/425] Fix thread version history and content_url/body selection --- .../state/api/general/getContentByUrl.ts | 2 +- .../pages/view_thread/ViewThreadPage.tsx | 54 +++++++++---------- .../views/pages/view_thread/edit_body.tsx | 8 +-- 3 files changed, 31 insertions(+), 33 deletions(-) diff --git a/packages/commonwealth/client/scripts/state/api/general/getContentByUrl.ts b/packages/commonwealth/client/scripts/state/api/general/getContentByUrl.ts index 4c4b0a80b5b..153a685fd50 100644 --- a/packages/commonwealth/client/scripts/state/api/general/getContentByUrl.ts +++ b/packages/commonwealth/client/scripts/state/api/general/getContentByUrl.ts @@ -11,7 +11,7 @@ const getContentByUrl = async ({ contentUrl, }: GetContentByUrlProps): Promise => { const response = await axios.get(contentUrl || ''); - return response?.data[0]?.result?.data || ''; + return response?.data || ''; }; type GetContentByUrlQueryProps = { diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index 1679432f96f..273f0a099a5 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -141,30 +141,6 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { const [threadBody, setThreadBody] = useState(thread?.body); - useEffect(() => { - if ( - contentUrlBodyToFetch && - contentUrlBodyToFetch !== thread?.contentUrl && - contentUrlBody - ) { - setThreadBody(contentUrlBody); - } - }, [contentUrlBody, contentUrlBodyToFetch, thread?.contentUrl]); - - useRunOnceOnCondition({ - callback: () => { - thread?.body && setThreadBody(thread?.body); - }, - shouldRun: !!thread?.body, - }); - - useRunOnceOnCondition({ - callback: () => { - contentUrlBody && setThreadBody(contentUrlBody); - }, - shouldRun: !isLoadingContentBody && !!thread?.contentUrl, - }); - const isAdmin = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(); const { contestsData } = useCommunityContests(); @@ -245,6 +221,26 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { useManageDocumentTitle('View thread', thread?.title); + // Imp: this correctly sets the thread body + // 1. if content_url is provided it will fetch body from there + // 2. else it will use available body + // 3. it won't interfere with version history selection, unless thread body or content_url changes + useEffect(() => { + if (thread?.contentUrl) { + setContentUrlBodyToFetch(thread.contentUrl); + } else { + setThreadBody(thread?.body || ''); + setContentUrlBodyToFetch(''); + } + }, [thread?.body, thread?.contentUrl]); + + // Imp: this is expected to override version history selection + useEffect(() => { + if (contentUrlBody) { + setThreadBody(contentUrlBody); + } + }, [contentUrlBody]); + if (typeof identifier !== 'string') { return ; } @@ -252,7 +248,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { if ( !app.chain?.meta || isLoading || - (isLoadingContentBody && thread?.contentUrl) + (isLoadingContentBody && contentUrlBodyToFetch) ) { return ( @@ -397,17 +393,16 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { const foundVersion = (thread?.versionHistory || []).find( (version) => version.id === versionId, ); - if (!foundVersion?.content_url) { setThreadBody(foundVersion?.body || ''); + setContentUrlBodyToFetch(''); return; } - if (contentUrlBodyToFetch === foundVersion.content_url && contentUrlBody) { setThreadBody(contentUrlBody); + setContentUrlBodyToFetch(''); return; } - setContentUrlBodyToFetch(foundVersion.content_url); }; @@ -604,13 +599,14 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { onChangeVersionHistoryNumber={handleVersionHistoryChange} body={(threadOptionsComp) => (
    - {isEditingBody ? ( + {isEditingBody && threadBody ? ( <> {/*// TODO editing thread */} thread={thread} + activeThreadBody={threadBody} savedEdits={savedEdits} shouldRestoreEdits={shouldRestoreEdits} cancelEditing={() => { diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/edit_body.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/edit_body.tsx index 430e079fa28..aabb45b10d7 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/edit_body.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/edit_body.tsx @@ -20,7 +20,8 @@ type EditBodyProps = { title: string; savedEdits: string; shouldRestoreEdits: boolean; - thread: Thread; + thread: Omit; + activeThreadBody: string; // body of the active/selected thread version cancelEditing: () => void; threadUpdatedCallback: (title: string, body: string) => void; }; @@ -31,6 +32,7 @@ export const EditBody = (props: EditBodyProps) => { shouldRestoreEdits, savedEdits, thread, + activeThreadBody, cancelEditing, threadUpdatedCallback, } = props; @@ -38,7 +40,7 @@ export const EditBody = (props: EditBodyProps) => { const { checkForSessionKeyRevalidationErrors } = useAuthModalStore(); const threadBody = - shouldRestoreEdits && savedEdits ? savedEdits : thread.body; + shouldRestoreEdits && savedEdits ? savedEdits : activeThreadBody; const body = deserializeDelta(threadBody); const [contentDelta, setContentDelta] = React.useState(body); @@ -98,7 +100,7 @@ export const EditBody = (props: EditBodyProps) => { try { const newBody = JSON.stringify(contentDelta); const input = await buildUpdateThreadInput({ - newBody: JSON.stringify(contentDelta) || thread.body, + newBody: JSON.stringify(contentDelta), newTitle: title || thread.title, threadId: thread.id, threadMsgId: thread.canvasMsgId, From 6de92b07cf1ff64cb7303ddc6e94782ee044a398 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Fri, 18 Oct 2024 07:22:37 -0700 Subject: [PATCH 277/425] cleanup --- .../views/components/MarkdownEditor/MarkdownEditor.scss | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss index dc885ed5bb5..575b47acd19 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/MarkdownEditor.scss @@ -105,11 +105,6 @@ body, } div[data-editor-block-type='image'] { - // this can be used to get rid of all button options. - //div:has(button) { - // display: none; - //} - // this selects and hides the settings button button:nth-of-type(2) { display: none; From 1d0841e4d8ed1f1be84c3332b8f7a3b89e156636 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 18 Oct 2024 19:27:34 +0500 Subject: [PATCH 278/425] Fix types --- libs/schemas/src/queries/feed.schemas.ts | 2 ++ packages/commonwealth/client/scripts/views/components/feed.tsx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/libs/schemas/src/queries/feed.schemas.ts b/libs/schemas/src/queries/feed.schemas.ts index ce3daefbac9..77389e3b838 100644 --- a/libs/schemas/src/queries/feed.schemas.ts +++ b/libs/schemas/src/queries/feed.schemas.ts @@ -8,6 +8,7 @@ export const ActivityComment = z.object({ profile_name: z.string().nullish(), profile_avatar: z.string().nullish(), text: z.string(), + content_url: z.string().nullish(), created_at: z.string(), updated_at: z.string().nullish(), deleted_at: z.string().nullish(), @@ -24,6 +25,7 @@ export const ActivityThread = z.object({ profile_name: z.string().nullish(), profile_avatar: z.string().nullish(), body: z.string(), + content_url: z.string().nullish(), title: z.string(), kind: z.string(), stage: z.string(), diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 776f5d17891..d50c3703148 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -149,6 +149,7 @@ function mapThread(thread: z.infer): Thread { community_id: thread.community_id, read_only: thread.read_only, body: thread.body, + content_url: thread.content_url || null, locked_at: thread.locked_at ?? '', archived_at: thread.archived_at ?? '', has_poll: thread.has_poll ?? false, @@ -176,6 +177,7 @@ function mapThread(thread: z.infer): Thread { profile_avatar: c.profile_avatar, profile_name: c.profile_name, text: c.text, + content_url: c.content_url || null, }) as RecentComment, ) ?? [], }); From b6d08941c5181a6a92b880c7885d7e5d0b917c09 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 18 Oct 2024 10:32:28 -0400 Subject: [PATCH 279/425] remove client Topic state type and use TopicView from schemas --- libs/model/src/community/GetTopics.query.ts | 44 ++++++++++----- libs/schemas/src/queries/thread.schemas.ts | 21 ++++++-- .../client/scripts/models/AbridgedThread.ts | 2 +- .../client/scripts/models/Thread.ts | 5 +- .../client/scripts/models/Topic.ts | 54 +------------------ .../client/scripts/state/api/config.ts | 1 + .../client/scripts/state/api/feeds/util.ts | 2 +- .../scripts/state/api/threads/createThread.ts | 2 +- .../state/api/threads/helpers/cache.ts | 2 +- .../scripts/state/api/topics/fetchTopics.ts | 3 -- .../api/topics/updateFeaturedTopicsOrder.ts | 4 +- .../NewThreadFormLegacy/CustomTopicOption.tsx | 4 +- .../NewThreadFormLegacy/NewThreadForm.tsx | 23 ++++---- .../helpers/useNewThreadForm.ts | 6 +-- .../components/NewThreadFormLegacy/types.ts | 2 +- .../NewThreadFormModern/CustomTopicOption.tsx | 4 +- .../NewThreadFormModern/NewThreadForm.tsx | 13 ++--- .../helpers/useNewThreadForm.ts | 6 +-- .../components/NewThreadFormModern/types.ts | 2 +- .../client/scripts/views/components/feed.tsx | 6 +-- .../components/sidebar/discussion_section.tsx | 6 +-- .../views/components/topic_selector.tsx | 2 +- .../modals/change_thread_topic_modal.tsx | 2 +- .../scripts/views/modals/edit_topic_modal.tsx | 4 +- .../draggable_topics_list.tsx | 6 ++- .../AdminContestsPage/AdminContestsPage.tsx | 2 +- .../steps/DetailsFormStep/DetailsFormStep.tsx | 8 +-- .../Integrations/Discord/Discord.tsx | 2 +- .../ManageTopicsSection.tsx | 6 +-- .../ManageTopicsSectionOld.tsx | 6 +-- .../pages/discussions/DiscussionsPage.tsx | 8 +-- .../HeaderWithFilters/HeaderWithFilters.tsx | 6 +-- .../views/pages/overview/TopicSummaryRow.tsx | 4 +- .../scripts/views/pages/overview/index.tsx | 6 +-- 34 files changed, 128 insertions(+), 146 deletions(-) diff --git a/libs/model/src/community/GetTopics.query.ts b/libs/model/src/community/GetTopics.query.ts index e7ba93fc607..55bdd4177bb 100644 --- a/libs/model/src/community/GetTopics.query.ts +++ b/libs/model/src/community/GetTopics.query.ts @@ -53,24 +53,44 @@ export function GetTopics(): Query { const sql = ` WITH topic_data AS ( - SELECT t.*, ( - SELECT COUNT(*)::int - FROM "Threads" - WHERE community_id = :community_id AND topic_id = t.id AND deleted_at IS NULL - ) as total_threads + SELECT + id, + name, + community_id, + description, + telegram, + featured_in_sidebar, + featured_in_new_post, + default_offchain_template, + "order", + channel_id, + group_ids, + weighted_voting, + chain_node_id, + token_symbol, + vote_weight_multiplier, + created_at::text as created_at, + updated_at::text as updated_at, + deleted_at::text as deleted_at, + ( + SELECT COUNT(*)::int + FROM "Threads" + WHERE community_id = :community_id AND topic_id = t.id AND deleted_at IS NULL + ) as total_threads FROM "Topics" t WHERE t.community_id = :community_id AND t.deleted_at IS NULL ) ${base} `; - return await models.sequelize.query< - z.infer - >(sql, { - replacements: { community_id }, - type: QueryTypes.SELECT, - raw: true, - }); + return await models.sequelize.query>( + sql, + { + replacements: { community_id }, + type: QueryTypes.SELECT, + raw: true, + }, + ); }, }; } diff --git a/libs/schemas/src/queries/thread.schemas.ts b/libs/schemas/src/queries/thread.schemas.ts index 08e37805293..13516b36391 100644 --- a/libs/schemas/src/queries/thread.schemas.ts +++ b/libs/schemas/src/queries/thread.schemas.ts @@ -141,13 +141,24 @@ export const GetThreads = { }), }; -export const ActiveContestManager = ContestManager.extend({ - content: z.array(projections.ContestAction), +export const ConstestManagerView = ContestManager.extend({ + created_at: z.string(), + topics: z.undefined(), + contests: z.undefined(), + content: z.array( + projections.ContestAction.extend({ + created_at: z.string(), + }), + ), }); -export const ExtendedTopic = Topic.extend({ +export const TopicView = Topic.extend({ + created_at: z.string(), + updated_at: z.string().nullish(), + deleted_at: z.string().nullish(), + contest_topics: z.undefined(), total_threads: z.number(), - active_contest_managers: z.array(ActiveContestManager), + active_contest_managers: z.array(ConstestManagerView), }); export const GetTopics = { @@ -155,5 +166,5 @@ export const GetTopics = { community_id: z.string(), with_contest_managers: z.boolean().optional(), }), - output: z.array(ExtendedTopic), + output: z.array(TopicView), }; diff --git a/packages/commonwealth/client/scripts/models/AbridgedThread.ts b/packages/commonwealth/client/scripts/models/AbridgedThread.ts index b03ee447df9..a3a3c04939d 100644 --- a/packages/commonwealth/client/scripts/models/AbridgedThread.ts +++ b/packages/commonwealth/client/scripts/models/AbridgedThread.ts @@ -1,6 +1,6 @@ import { ProposalType } from '@hicommonwealth/shared'; import type moment from 'moment'; -import type Topic from './Topic'; +import type { Topic } from './Topic'; import type { IUniqueId } from './interfaces'; class AbridgedThread implements IUniqueId { diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index 671b3587bfe..530fad1c189 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -10,7 +10,7 @@ import moment, { Moment } from 'moment'; import { z } from 'zod'; import Comment from './Comment'; import type { ReactionType } from './Reaction'; -import Topic from './Topic'; +import type { Topic } from './Topic'; import type { IUniqueId } from './interfaces'; import type { ThreadKind, ThreadStage } from './types'; @@ -375,8 +375,7 @@ export class Thread implements IUniqueId { this.identifier = `${id}`; this.createdAt = moment(created_at); this.updatedAt = moment(updated_at); - // @ts-expect-error StrictNullChecks - this.topic = topic?.id ? mapTopic({ ...(topic || {}) } as any) : null; + this.topic = topic?.id ? ({ ...(topic || {}) } as any) : null; this.kind = kind; this.stage = stage; this.authorCommunity = Address?.community_id; diff --git a/packages/commonwealth/client/scripts/models/Topic.ts b/packages/commonwealth/client/scripts/models/Topic.ts index e040d853c39..15dc3022fd3 100644 --- a/packages/commonwealth/client/scripts/models/Topic.ts +++ b/packages/commonwealth/client/scripts/models/Topic.ts @@ -1,56 +1,4 @@ import * as schemas from '@hicommonwealth/schemas'; import { z } from 'zod'; -export type Topic = z.infer; - -export function mapTopic({ - name, - id, - description, - telegram, - community_id, - featured_in_new_post, - featured_in_sidebar, - order, - default_offchain_template, - total_threads, - channel_id, - active_contest_managers, - chain_node_id, - group_ids, - default_offchain_template_backup, - weighted_voting, - token_address, - token_symbol, - vote_weight_multiplier, -}: Topic) { - return { - community_id, - id, - name, - description, - telegram, - featured_in_sidebar, - featured_in_new_post, - order, - group_ids, - total_threads, - active_contest_managers, - communityId: community_id, - featuredInSidebar: featured_in_sidebar, - featuredInNewPost: featured_in_new_post, - defaultOffchainTemplate: default_offchain_template, - totalThreads: total_threads || 0, - channelId: channel_id, - activeContestManagers: active_contest_managers || [], - chainNodeId: chain_node_id, - groupIds: group_ids, - defaultOffchainTemplateBackup: default_offchain_template_backup, - weightedVoting: weighted_voting, - tokenAddress: token_address, - tokenSymbol: token_symbol, - voteWeightMultiplier: vote_weight_multiplier, - }; -} - -export default Topic; +export type Topic = z.infer; diff --git a/packages/commonwealth/client/scripts/state/api/config.ts b/packages/commonwealth/client/scripts/state/api/config.ts index 54b4c56dc9e..5a022eabb66 100644 --- a/packages/commonwealth/client/scripts/state/api/config.ts +++ b/packages/commonwealth/client/scripts/state/api/config.ts @@ -12,6 +12,7 @@ export const queryClient = new QueryClient({ export const ApiEndpoints = { // endpoint builder functions like getEndpoint(id) => /endpoint/:id should have camel cased keys // stand alone endpoints should be have upper snake case keys so we can easily tell them apart in code + BULK_TOPICS: '/topics', FETCH_ADMIN: '/roles', FETCH_COMMUNITY_STAKES: '/communityStakes', FETCH_COMMENTS: '/viewComments', diff --git a/packages/commonwealth/client/scripts/state/api/feeds/util.ts b/packages/commonwealth/client/scripts/state/api/feeds/util.ts index b1f8470e7cf..88e18855cff 100644 --- a/packages/commonwealth/client/scripts/state/api/feeds/util.ts +++ b/packages/commonwealth/client/scripts/state/api/feeds/util.ts @@ -1,6 +1,6 @@ import { AxiosResponse } from 'axios'; import Thread from 'models/Thread'; -import Topic from 'models/Topic'; +import type { Topic } from 'models/Topic'; import { ThreadKind, ThreadStage } from 'models/types'; type ActivityResponse = { diff --git a/packages/commonwealth/client/scripts/state/api/threads/createThread.ts b/packages/commonwealth/client/scripts/state/api/threads/createThread.ts index a6729e694c0..a69dd3d847c 100644 --- a/packages/commonwealth/client/scripts/state/api/threads/createThread.ts +++ b/packages/commonwealth/client/scripts/state/api/threads/createThread.ts @@ -1,6 +1,6 @@ import { toCanvasSignedDataApiArgs } from '@hicommonwealth/shared'; import { signThread } from 'controllers/server/sessions'; -import Topic from 'models/Topic'; +import type { Topic } from 'models/Topic'; import { ThreadStage } from 'models/types'; import useUserOnboardingSliderMutationStore from 'state/ui/userTrainingCards'; import { trpc } from 'utils/trpcClient'; diff --git a/packages/commonwealth/client/scripts/state/api/threads/helpers/cache.ts b/packages/commonwealth/client/scripts/state/api/threads/helpers/cache.ts index 41499e8eb6c..457a3a67031 100644 --- a/packages/commonwealth/client/scripts/state/api/threads/helpers/cache.ts +++ b/packages/commonwealth/client/scripts/state/api/threads/helpers/cache.ts @@ -1,5 +1,5 @@ import Thread from 'models/Thread'; -import Topic from 'models/Topic'; +import type { Topic } from 'models/Topic'; import { ApiEndpoints, queryClient } from 'state/api/config'; /** diff --git a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts index 876deb2dabf..17840bf6a36 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts @@ -1,5 +1,4 @@ import { trpc } from 'client/scripts/utils/trpcClient'; -import { mapTopic } from 'models/Topic'; const TOPICS_STALE_TIME = 30 * 1_000; // 30 s @@ -22,8 +21,6 @@ const useFetchTopicsQuery = ({ { staleTime: TOPICS_STALE_TIME, enabled: apiEnabled, - // @ts-expect-error - select: (data) => data.map((topic) => mapTopic(topic)), }, ); }; diff --git a/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts b/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts index 4ae70c3e304..7c516ffa104 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts @@ -1,6 +1,6 @@ import { useMutation } from '@tanstack/react-query'; import axios from 'axios'; -import Topic from 'models/Topic'; +import type { Topic } from 'models/Topic'; import app from 'state'; import { ApiEndpoints, SERVER_URL, queryClient } from 'state/api/config'; import { userStore } from '../../ui/user'; @@ -28,7 +28,7 @@ const useUpdateFeaturedTopicsOrderMutation = () => { return useMutation({ mutationFn: updateFeaturedTopicsOrder, onSuccess: async (data, variables) => { - const communityId = variables.featuredTopics[0].communityId; + const communityId = variables.featuredTopics[0].community_id; await queryClient.invalidateQueries({ queryKey: [ApiEndpoints.BULK_TOPICS, communityId], }); diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/CustomTopicOption.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/CustomTopicOption.tsx index ab695f2a11d..44fee9f563c 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/CustomTopicOption.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/CustomTopicOption.tsx @@ -1,4 +1,4 @@ -import Topic from 'models/Topic'; +import type { Topic } from 'models/Topic'; import React from 'react'; import { components, OptionProps } from 'react-select'; import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; @@ -15,7 +15,7 @@ const CustomTopicOption = ({ return ( // @ts-expect-error - {(topic?.activeContestManagers?.length || 0) > 0 && ( + {(topic?.active_contest_managers?.length || 0) > 0 && ( )} {originalProps.label} diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index 9d525136def..9aaf244b0f1 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -5,6 +5,7 @@ import { parseCustomStages } from 'helpers'; import { detectURL, getThreadActionTooltipText } from 'helpers/threads'; import useJoinCommunityBanner from 'hooks/useJoinCommunityBanner'; import useTopicGating from 'hooks/useTopicGating'; +import type { Topic } from 'models/Topic'; import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useMemo, useState } from 'react'; import { useLocation } from 'react-router-dom'; @@ -62,7 +63,9 @@ export const NewThreadForm = () => { const { isContestAvailable } = useCommunityContests(); - const sortedTopics = [...topics].sort((a, b) => a.name.localeCompare(b.name)); + const sortedTopics: Topic[] = [...topics].sort((a, b) => + a.name.localeCompare(b.name), + ); const hasTopics = sortedTopics?.length; const topicsForSelector = hasTopics ? sortedTopics : []; @@ -85,13 +88,14 @@ export const NewThreadForm = () => { setCanShowTopicPermissionBanner, } = useNewThreadForm(communityId, topicsForSelector); - const hasTopicOngoingContest = threadTopic?.activeContestManagers?.length > 0; + const hasTopicOngoingContest = + threadTopic?.active_contest_managers?.length > 0; const user = useUserStore(); const { checkForSessionKeyRevalidationErrors } = useAuthModalStore(); - const contestTopicError = threadTopic?.activeContestManagers?.length - ? threadTopic?.activeContestManagers + const contestTopicError = threadTopic?.active_contest_managers?.length + ? threadTopic?.active_contest_managers ?.map( (acm) => acm?.content?.filter( @@ -209,10 +213,7 @@ export const NewThreadForm = () => { const handleCancel = () => { setThreadTitle(''); - setThreadTopic( - // @ts-expect-error - topicsForSelector?.find((t) => t?.name?.includes('General')) || null, - ); + setThreadTopic(topicsForSelector.find((t) => t.name.includes('General'))!); setThreadContentDelta(createDeltaFromText('')); }; @@ -320,10 +321,10 @@ export const NewThreadForm = () => { {contestTopicAffordanceVisible && ( { + contests={threadTopic?.active_contest_managers.map((acm) => { return { - name: acm?.contest_manager?.name, - address: acm?.contest_manager?.contest_address, + name: acm?.name, + address: acm?.contest_address, submittedEntries: acm?.content?.filter( (c) => diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/helpers/useNewThreadForm.ts b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/helpers/useNewThreadForm.ts index 5911f7035b4..a55c52e5f32 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/helpers/useNewThreadForm.ts +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/helpers/useNewThreadForm.ts @@ -3,7 +3,7 @@ import { useEffect, useMemo, useState } from 'react'; import { useDraft } from 'hooks/useDraft'; import { useSearchParams } from 'react-router-dom'; -import type Topic from '../../../../models/Topic'; +import type { Topic } from '../../../../models/Topic'; import { ThreadKind } from '../../../../models/types'; import { getTextFromDelta } from '../../react_quill_editor'; @@ -85,10 +85,10 @@ const useNewThreadForm = (communityId: string, topicsForSelector: Topic[]) => { } saveDraft(draft); - if (!threadContentDelta && threadTopic?.defaultOffchainTemplate) { + if (!threadContentDelta && threadTopic?.default_offchain_template) { try { const template = JSON.parse( - threadTopic.defaultOffchainTemplate, + threadTopic.default_offchain_template, ) as DeltaStatic; setThreadContentDelta(template); } catch (e) { diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/types.ts b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/types.ts index 20afa7863e4..3b16317ddfe 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/types.ts +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/types.ts @@ -1,4 +1,4 @@ -import type Topic from '../../../models/Topic'; +import type { Topic } from '../../../models/Topic'; import type { ThreadKind } from '../../../models/types'; export type NewThreadFormType = { diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/CustomTopicOption.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/CustomTopicOption.tsx index ab695f2a11d..44fee9f563c 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/CustomTopicOption.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/CustomTopicOption.tsx @@ -1,4 +1,4 @@ -import Topic from 'models/Topic'; +import type { Topic } from 'models/Topic'; import React from 'react'; import { components, OptionProps } from 'react-select'; import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; @@ -15,7 +15,7 @@ const CustomTopicOption = ({ return ( // @ts-expect-error - {(topic?.activeContestManagers?.length || 0) > 0 && ( + {(topic?.active_contest_managers?.length || 0) > 0 && ( )} {originalProps.label} diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index 541a039b5e4..7678c6e2b73 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -82,13 +82,14 @@ export const NewThreadForm = () => { setCanShowTopicPermissionBanner, } = useNewThreadForm(communityId, topicsForSelector); - const hasTopicOngoingContest = threadTopic?.activeContestManagers?.length > 0; + const hasTopicOngoingContest = + threadTopic?.active_contest_managers?.length > 0; const user = useUserStore(); const { checkForSessionKeyRevalidationErrors } = useAuthModalStore(); - const contestTopicError = threadTopic?.activeContestManagers?.length - ? threadTopic?.activeContestManagers + const contestTopicError = threadTopic?.active_contest_managers?.length + ? threadTopic?.active_contest_managers ?.map( (acm) => acm?.content?.filter( @@ -303,10 +304,10 @@ export const NewThreadForm = () => { {contestTopicAffordanceVisible && ( { + contests={threadTopic?.active_contest_managers.map((acm) => { return { - name: acm?.contest_manager?.name, - address: acm?.contest_manager?.contest_address, + name: acm?.name, + address: acm?.contest_address, submittedEntries: acm?.content?.filter( (c) => diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts index 8931bfd4d10..32eadb7a1d6 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/helpers/useNewThreadForm.ts @@ -2,7 +2,7 @@ import { useEffect, useMemo, useState } from 'react'; import { useDraft } from 'hooks/useDraft'; import { useSearchParams } from 'react-router-dom'; -import type Topic from '../../../../models/Topic'; +import type { Topic } from '../../../../models/Topic'; import { ThreadKind } from '../../../../models/types'; type NewThreadDraft = { @@ -82,10 +82,10 @@ const useNewThreadForm = (communityId: string, topicsForSelector: Topic[]) => { } saveDraft(draft); - if (!editorText && threadTopic?.defaultOffchainTemplate) { + if (!editorText && threadTopic?.default_offchain_template) { try { const template = JSON.parse( - threadTopic.defaultOffchainTemplate, + threadTopic.default_offchain_template, ) as string; setEditorText(template); } catch (e) { diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/types.ts b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/types.ts index 20afa7863e4..3b16317ddfe 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/types.ts +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/types.ts @@ -1,4 +1,4 @@ -import type Topic from '../../../models/Topic'; +import type { Topic } from '../../../models/Topic'; import type { ThreadKind } from '../../../models/types'; export type NewThreadFormType = { diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 6598f6f953d..e627d72146f 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -12,7 +12,6 @@ import { PermissionEnum, } from '@hicommonwealth/schemas'; import { slugify } from '@hicommonwealth/shared'; -import { mapTopic } from 'client/scripts/models/Topic'; import { getThreadActionTooltipText } from 'helpers/threads'; import useTopicGating from 'hooks/useTopicGating'; import { getProposalUrlPath } from 'identifiers'; @@ -132,17 +131,18 @@ function mapThread(thread: z.infer): Thread { id: thread.id, created_at: thread.created_at ?? '', updated_at: thread.updated_at ?? thread.created_at ?? '', - topic: mapTopic({ + topic: { community_id: thread.community_id, id: thread.topic.id, name: thread.topic.name, description: thread.topic.description, + created_at: '', featured_in_sidebar: false, featured_in_new_post: false, group_ids: [], active_contest_managers: [], total_threads: 0, - }), + }, kind: thread.kind as ThreadKind, stage: thread.stage as ThreadStage, ThreadVersionHistories: [], diff --git a/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx b/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx index b45be22ffed..d2122a0839c 100644 --- a/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx +++ b/packages/commonwealth/client/scripts/views/components/sidebar/discussion_section.tsx @@ -83,7 +83,7 @@ export const DiscussionSection = ({ }); const topics = (topicsData || []) - .filter((t) => t.featuredInSidebar) + .filter((t) => t.featured_in_sidebar) .sort((a, b) => a.name.localeCompare(b.name)) // @ts-expect-error .sort((a, b) => a.order - b.order); @@ -99,7 +99,7 @@ export const DiscussionSection = ({ }; for (const topic of topics) { - if (topic.featuredInSidebar) { + if (topic.featured_in_sidebar) { discussionsDefaultToggleTree.children[topic.name] = { toggledState: true, children: { @@ -190,7 +190,7 @@ export const DiscussionSection = ({ ]; for (const topic of topics) { - if (topic.featuredInSidebar) { + if (topic.featured_in_sidebar) { const topicInvolvedInActiveContest = topic?.id && topicIdsIncludedInContest.includes(topic.id); diff --git a/packages/commonwealth/client/scripts/views/components/topic_selector.tsx b/packages/commonwealth/client/scripts/views/components/topic_selector.tsx index ff30d3560f9..0217d0ff270 100644 --- a/packages/commonwealth/client/scripts/views/components/topic_selector.tsx +++ b/packages/commonwealth/client/scripts/views/components/topic_selector.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import Topic from '../../models/Topic'; +import type { Topic } from '../../models/Topic'; import 'components/topic_selector.scss'; import { SelectList } from 'views/components/component_kit/cw_select_list'; diff --git a/packages/commonwealth/client/scripts/views/modals/change_thread_topic_modal.tsx b/packages/commonwealth/client/scripts/views/modals/change_thread_topic_modal.tsx index bafa82e7050..e323e652f0d 100644 --- a/packages/commonwealth/client/scripts/views/modals/change_thread_topic_modal.tsx +++ b/packages/commonwealth/client/scripts/views/modals/change_thread_topic_modal.tsx @@ -3,7 +3,7 @@ import React, { useState } from 'react'; import { buildUpdateThreadInput } from 'client/scripts/state/api/threads/editThread'; import useUserStore from 'state/ui/user'; import type Thread from '../../models/Thread'; -import type Topic from '../../models/Topic'; +import type { Topic } from '../../models/Topic'; import app from '../../state'; import { useEditThreadMutation } from '../../state/api/threads'; import { useFetchTopicsQuery } from '../../state/api/topics'; diff --git a/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx b/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx index c7cf8798038..642b5251424 100644 --- a/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx +++ b/packages/commonwealth/client/scripts/views/modals/edit_topic_modal.tsx @@ -1,6 +1,6 @@ import { pluralizeWithoutNumberPrefix } from 'helpers'; import React, { useState } from 'react'; -import Topic from '../../models/Topic'; +import type { Topic } from '../../models/Topic'; import { useCommonNavigate } from '../../navigation/helpers'; import app from '../../state'; import { @@ -37,7 +37,7 @@ export const EditTopicModal = ({ }: EditTopicModalProps) => { const { description: descriptionProp, - featuredInSidebar: featuredInSidebarProp, + featured_in_sidebar: featuredInSidebarProp, id, name: nameProp, } = topic; diff --git a/packages/commonwealth/client/scripts/views/modals/order_topics_modal/draggable_topics_list.tsx b/packages/commonwealth/client/scripts/views/modals/order_topics_modal/draggable_topics_list.tsx index 8a1558feb67..13d01d99801 100644 --- a/packages/commonwealth/client/scripts/views/modals/order_topics_modal/draggable_topics_list.tsx +++ b/packages/commonwealth/client/scripts/views/modals/order_topics_modal/draggable_topics_list.tsx @@ -5,7 +5,7 @@ import { DragDropContext, Draggable } from 'react-beautiful-dnd'; import { Virtuoso } from 'react-virtuoso'; import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; import { CWText } from 'views/components/component_kit/cw_text'; -import type Topic from '../../../models/Topic'; +import type { Topic } from '../../../models/Topic'; import CWIconButton from '../../components/component_kit/new_designs/CWIconButton'; const reorder = (list: Topic[], startIndex, endIndex): Topic[] => { @@ -17,8 +17,10 @@ const reorder = (list: Topic[], startIndex, endIndex): Topic[] => { }; // This component handles fixed size of the item in the list +// eslint-disable-next-line react/prop-types const HeightPreservingItem = ({ children, ...props }) => { const [size, setSize] = useState(0); + // eslint-disable-next-line react/prop-types const knownSize = props['data-known-size']; useEffect(() => { @@ -43,6 +45,7 @@ interface TopicRowProps { onEdit?: React.Dispatch>; } +// eslint-disable-next-line react/no-multi-comp const TopicRow = ({ provided, item, isDragging, onEdit }: TopicRowProps) => { return (
    >; } +// eslint-disable-next-line react/no-multi-comp const DraggableTopicsList = ({ topics, setTopics, diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx index 787ca182d90..5a5e8e4331b 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx @@ -62,7 +62,7 @@ const AdminContestsPage = () => { }); const hasAtLeastOneWeightedVotingTopic = topicData?.some( - (t) => t.weightedVoting, + (t) => t.weighted_voting, ); const { data: feeManagerBalance, isLoading: isFeeManagerBalanceLoading } = diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx index 996105e13c4..ea3d232e718 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx @@ -124,12 +124,12 @@ const DetailsFormStep = ({ const totalPayoutPercentageError = totalPayoutPercentage !== 100; const weightedTopics = (topicsData || []) - .filter((t) => t?.weightedVoting) + .filter((t) => t?.weighted_voting) .map((t) => ({ value: t.id, label: t.name, - weightedVoting: t.weightedVoting, - helpText: weightedVotingValueToLabel(t.weightedVoting!), + weightedVoting: t.weighted_voting, + helpText: weightedVotingValueToLabel(t.weighted_voting!), })); const getInitialValues = () => { @@ -313,7 +313,7 @@ const DetailsFormStep = ({ if (t?.weightedVoting === TopicWeightedVoting.ERC20) { const token = topicsData?.find( (topic) => topic.id === t.value, - )?.tokenAddress; + )?.token_address; setTokenValue(token || ''); } }} diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx index 344750faa9d..6c2c5800712 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx @@ -229,7 +229,7 @@ const Discord = () => { topics={topics.map((topic) => ({ name: topic.name, id: `${topic.id}`, - channelId: topic.channelId, + channelId: topic.channel_id, }))} refetchTopics={async () => { await refetchTopics(); diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx index d4c889867d6..f6ea255da0b 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicDetails/ManageTopicsSection/ManageTopicsSection.tsx @@ -1,6 +1,6 @@ import { notifyError, notifySuccess } from 'controllers/app/notifications'; import useBrowserWindow from 'hooks/useBrowserWindow'; -import type Topic from 'models/Topic'; +import type { Topic } from 'models/Topic'; import React, { useEffect, useState } from 'react'; import app from 'state'; import { @@ -18,7 +18,7 @@ import './ManageTopicsSection.scss'; export const ManageTopicsSection = () => { const getFeaturedTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => topic.featuredInSidebar) + .filter((topic) => topic.featured_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; @@ -37,7 +37,7 @@ export const ManageTopicsSection = () => { const getRegularTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => !topic.featuredInSidebar) + .filter((topic) => !topic.featured_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx index f8fcd81fffa..ea388371c7f 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Topics/TopicsOld/ManageTopicsSectionOld/ManageTopicsSectionOld.tsx @@ -1,6 +1,6 @@ import { notifyError, notifySuccess } from 'controllers/app/notifications'; import useBrowserWindow from 'hooks/useBrowserWindow'; -import type Topic from 'models/Topic'; +import type { Topic } from 'models/Topic'; import React, { useEffect, useState } from 'react'; import app from 'state'; import { @@ -18,7 +18,7 @@ import './ManageTopicsSectionOld.scss'; export const ManageTopicsSectionOld = () => { const getFeaturedTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => topic.featuredInSidebar) + .filter((topic) => topic.featured_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; @@ -37,7 +37,7 @@ export const ManageTopicsSectionOld = () => { const getRegularTopics = (rawTopics: Topic[]): Topic[] => { const topics = rawTopics - .filter((topic) => !topic.featuredInSidebar) + .filter((topic) => !topic.featured_in_sidebar) .map((topic) => ({ ...topic }) as Topic); if (!topics.length) return []; diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index ba8cdf0211c..e9d10cb3871 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -108,7 +108,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { (domain?.isCustomDomain ? `/archived` : `/${app.activeChainId()}/archived`); const { data: tokenMetadata } = useTokenMetadataQuery({ - tokenId: topicObj?.tokenAddress || '', + tokenId: topicObj?.token_address || '', nodeEthChainId: app?.chain.meta?.ChainNode?.eth_chain_id || 0, }); @@ -175,7 +175,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { const isTopicWeighted = weightedTopicsEnabled && topicId && - topicObj.weightedVoting === TopicWeightedVoting.ERC20; + topicObj.weighted_voting === TopicWeightedVoting.ERC20; const activeContestsInTopic = contestsData?.filter((contest) => { const isContestInTopic = (contest.topics || []).find( @@ -321,11 +321,11 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { {isTopicWeighted && ( )} diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx index 7dd9ce51fe3..a94e3e237e0 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx @@ -22,7 +22,7 @@ import { EditTopicModal } from 'views/modals/edit_topic_modal'; import { Contest } from 'views/pages/CommunityManagement/Contests/ContestsList'; import ContestCard from 'views/pages/CommunityManagement/Contests/ContestsList/ContestCard'; import useCommunityContests from 'views/pages/CommunityManagement/Contests/useCommunityContests'; -import type Topic from '../../../../models/Topic'; +import type { Topic } from '../../../../models/Topic'; import { ThreadFeaturedFilterTypes, ThreadStage, @@ -119,13 +119,13 @@ export const HeaderWithFilters = ({ ); const featuredTopics = (topics || []) - .filter((t) => t.featuredInSidebar) + .filter((t) => t.featured_in_sidebar) .sort((a, b) => a.name.localeCompare(b.name)) // @ts-expect-error .sort((a, b) => a.order - b.order); const otherTopics = (topics || []) - .filter((t) => !t.featuredInSidebar) + .filter((t) => !t.featured_in_sidebar) .sort((a, b) => a.name.localeCompare(b.name)); const selectedTopic = (topics || []).find((t) => topic && topic === t.name); diff --git a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx index 574abdb5fd4..2a965e58ab4 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/TopicSummaryRow.tsx @@ -10,7 +10,7 @@ import app from 'state'; import useUserStore from 'state/ui/user'; import Permissions from 'utils/Permissions'; import type Thread from '../../../models/Thread'; -import type Topic from '../../../models/Topic'; +import type { Topic } from '../../../models/Topic'; import { CWText } from '../../components/component_kit/cw_text'; import { ThreadCard } from '../discussions/ThreadCard'; import { TopicSummaryRowSkeleton } from './TopicSummaryRowSkeleton'; @@ -73,7 +73,7 @@ export const TopicSummaryRow = ({ fontWeight="medium" className="threads-count-text" > - {topic.totalThreads || 0} Threads + {topic.total_threads || 0} Threads
    {topic.description && {topic.description}} diff --git a/packages/commonwealth/client/scripts/views/pages/overview/index.tsx b/packages/commonwealth/client/scripts/views/pages/overview/index.tsx index a1e32dd85ee..b6035951ca4 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/index.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/index.tsx @@ -10,7 +10,7 @@ import useUserStore from 'state/ui/user'; import { CWButton } from 'views/components/component_kit/new_designs/CWButton'; import CWPageLayout from 'views/components/component_kit/new_designs/CWPageLayout'; import type Thread from '../../../models/Thread'; -import type Topic from '../../../models/Topic'; +import type { Topic } from '../../../models/Topic'; import { CWDivider } from '../../components/component_kit/cw_divider'; import { CWText } from '../../components/component_kit/cw_text'; import { PageLoading } from '../loading'; @@ -35,10 +35,10 @@ const OverviewPage = () => { apiEnabled: !!communityId, }); - const anyTopicsFeatured = topics.some((t) => t.featuredInSidebar); + const anyTopicsFeatured = topics.some((t) => t.featured_in_sidebar); const topicsFiltered = anyTopicsFeatured - ? topics.filter((t) => t.featuredInSidebar) + ? topics.filter((t) => t.featured_in_sidebar) : topics; const topicsSorted = anyTopicsFeatured From 63af2b69600889671e5afbd51c82d91b93356855 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 18 Oct 2024 10:40:36 -0400 Subject: [PATCH 280/425] fix lint --- libs/schemas/src/queries/community.schemas.ts | 31 +++++++++++++++++++ libs/schemas/src/queries/thread.schemas.ts | 31 +------------------ .../client/scripts/models/Thread.ts | 2 +- 3 files changed, 33 insertions(+), 31 deletions(-) diff --git a/libs/schemas/src/queries/community.schemas.ts b/libs/schemas/src/queries/community.schemas.ts index 9f738029a99..485bfb88828 100644 --- a/libs/schemas/src/queries/community.schemas.ts +++ b/libs/schemas/src/queries/community.schemas.ts @@ -9,8 +9,11 @@ import { Community, CommunityMember, CommunityStake, + ContestManager, ExtendedCommunity, + Topic, } from '../entities'; +import * as projections from '../projections'; import { PG_INT } from '../utils'; import { PaginatedResultSchema, PaginationParamsSchema } from './pagination'; @@ -159,3 +162,31 @@ export const GetStakeHistoricalPrice = { }) .array(), }; + +export const ConstestManagerView = ContestManager.extend({ + created_at: z.string(), + topics: z.undefined(), + contests: z.undefined(), + content: z.array( + projections.ContestAction.extend({ + created_at: z.string(), + }), + ), +}); + +export const TopicView = Topic.extend({ + created_at: z.string(), + updated_at: z.string().nullish(), + deleted_at: z.string().nullish(), + contest_topics: z.undefined(), + total_threads: z.number(), + active_contest_managers: z.array(ConstestManagerView), +}); + +export const GetTopics = { + input: z.object({ + community_id: z.string(), + with_contest_managers: z.boolean().optional(), + }), + output: z.array(TopicView), +}; diff --git a/libs/schemas/src/queries/thread.schemas.ts b/libs/schemas/src/queries/thread.schemas.ts index 13516b36391..05576d58451 100644 --- a/libs/schemas/src/queries/thread.schemas.ts +++ b/libs/schemas/src/queries/thread.schemas.ts @@ -1,6 +1,5 @@ import { z } from 'zod'; -import { ContestManager, Thread, Topic } from '../entities'; -import * as projections from '../projections'; +import { Thread } from '../entities'; import { DiscordMetaSchema, PG_INT, @@ -140,31 +139,3 @@ export const GetThreads = { threads: z.array(MappedThread), }), }; - -export const ConstestManagerView = ContestManager.extend({ - created_at: z.string(), - topics: z.undefined(), - contests: z.undefined(), - content: z.array( - projections.ContestAction.extend({ - created_at: z.string(), - }), - ), -}); - -export const TopicView = Topic.extend({ - created_at: z.string(), - updated_at: z.string().nullish(), - deleted_at: z.string().nullish(), - contest_topics: z.undefined(), - total_threads: z.number(), - active_contest_managers: z.array(ConstestManagerView), -}); - -export const GetTopics = { - input: z.object({ - community_id: z.string(), - with_contest_managers: z.boolean().optional(), - }), - output: z.array(TopicView), -}; diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index 530fad1c189..a274367168a 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -375,7 +375,7 @@ export class Thread implements IUniqueId { this.identifier = `${id}`; this.createdAt = moment(created_at); this.updatedAt = moment(updated_at); - this.topic = topic?.id ? ({ ...(topic || {}) } as any) : null; + this.topic = { ...topic }; this.kind = kind; this.stage = stage; this.authorCommunity = Address?.community_id; From 92d8dc0c9bd9da1bf13d0500e966c2ba8e237425 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 18 Oct 2024 19:43:09 +0500 Subject: [PATCH 281/425] Show version history dropdown in latest->oldest version order --- .../AuthorAndPublishInfo.tsx | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx index 38d613dea96..9391d07ff5a 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx @@ -100,15 +100,17 @@ export const AuthorAndPublishInfo = ({ }, {}) ?? {}; const fromDiscordBot = discord_meta !== null && discord_meta !== undefined; - const versionHistoryOptions = versionHistory?.map((v) => ({ - value: v.id as number, - label: formatVersionText( - moment(v.timestamp), - v.address, - collaboratorLookupInfo, - profile?.name, - ), - })); + const versionHistoryOptions = versionHistory + ?.map((v) => ({ + value: v.id as number, + label: formatVersionText( + moment(v.timestamp), + v.address, + collaboratorLookupInfo, + profile?.name, + ), + })) + .sort((a, b) => b.value - a.value); const isCommunityFirstLayout = layoutType === 'community-first'; const { data: communtyInfo, isLoading: isLoadingCommunity } = From 5ed101191e872b93aab09a2d8a8b6237b1e145e4 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 18 Oct 2024 19:55:20 +0500 Subject: [PATCH 282/425] Show correct version history after fetching body from content_url --- .../component_kit/CWContentPage/CWContentPage.tsx | 3 +++ .../AuthorAndPublishInfo/AuthorAndPublishInfo.tsx | 8 ++++++++ .../views/pages/view_thread/ViewThreadPage.tsx | 12 ++++++++++++ 3 files changed, 23 insertions(+) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx index bba23a21657..ba1d7cc6536 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx @@ -79,6 +79,7 @@ type ContentPageProps = { showSkeleton?: boolean; isEditing?: boolean; sidebarComponentsSkeletonCount?: number; + activeThreadVersionId?: number; onChangeVersionHistoryNumber?: (id: number) => void; editingDisabled?: boolean; }; @@ -117,6 +118,7 @@ export const CWContentPage = ({ showSkeleton, isEditing = false, sidebarComponentsSkeletonCount = 2, + activeThreadVersionId, onChangeVersionHistoryNumber, editingDisabled, }: ContentPageProps) => { @@ -201,6 +203,7 @@ export const CWContentPage = ({ isHot={isHot(thread)} profile={thread?.profile} versionHistory={thread?.versionHistory} + activeThreadVersionId={activeThreadVersionId} onChangeVersionHistoryNumber={onChangeVersionHistoryNumber} />
    diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx index 9391d07ff5a..77cdcb5b252 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/AuthorAndPublishInfo/AuthorAndPublishInfo.tsx @@ -56,6 +56,7 @@ export type AuthorAndPublishInfoProps = { popoverPlacement?: PopperPlacementType; profile?: UserProfile; versionHistory?: ThreadVersionHistory[] | CommentVersionHistory[]; + activeThreadVersionId?: number; onChangeVersionHistoryNumber?: (id: number) => void; }; @@ -82,6 +83,7 @@ export const AuthorAndPublishInfo = ({ popoverPlacement, profile, versionHistory, + activeThreadVersionId, onChangeVersionHistoryNumber, }: AuthorAndPublishInfoProps) => { const popoverProps = usePopover(); @@ -111,6 +113,9 @@ export const AuthorAndPublishInfo = ({ ), })) .sort((a, b) => b.value - a.value); + const versionHistorySelectedValue = (versionHistoryOptions || [])?.find( + (option) => option.value === activeThreadVersionId, + ); const isCommunityFirstLayout = layoutType === 'community-first'; const { data: communtyInfo, isLoading: isLoadingCommunity } = @@ -234,6 +239,9 @@ export const AuthorAndPublishInfo = ({ return option.label.split('\n')[0]; }} isSearchable={false} + {...(versionHistorySelectedValue && { + value: versionHistorySelectedValue, + })} />
    ) : ( diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index 273f0a099a5..bafc231ba50 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -139,6 +139,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { enabled: !!contentUrlBodyToFetch, }); + const [activeThreadVersionId, setActiveThreadVersionId] = useState(); const [threadBody, setThreadBody] = useState(thread?.body); const isAdmin = Permissions.isSiteAdmin() || Permissions.isCommunityAdmin(); @@ -241,6 +242,15 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { } }, [contentUrlBody]); + // Imp: this is expected to "not-interfere" with version history selector + useEffect(() => { + if (thread?.versionHistory) { + setActiveThreadVersionId( + Math.max(...thread.versionHistory.map(({ id }) => id)), + ); + } + }, [thread?.versionHistory]); + if (typeof identifier !== 'string') { return ; } @@ -393,6 +403,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { const foundVersion = (thread?.versionHistory || []).find( (version) => version.id === versionId, ); + foundVersion && setActiveThreadVersionId(foundVersion?.id); if (!foundVersion?.content_url) { setThreadBody(foundVersion?.body || ''); setContentUrlBodyToFetch(''); @@ -596,6 +607,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { setIsEditingBody(false); }} hasPendingEdits={!!editsToSave} + activeThreadVersionId={activeThreadVersionId} onChangeVersionHistoryNumber={handleVersionHistoryChange} body={(threadOptionsComp) => (
    From 933ed5f4e906c371997504ddae065f6ca85ce954 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 18 Oct 2024 11:02:02 -0400 Subject: [PATCH 283/425] remove test --- .../test/integration/api/topics.spec.ts | 42 ------------------- 1 file changed, 42 deletions(-) delete mode 100644 packages/commonwealth/test/integration/api/topics.spec.ts diff --git a/packages/commonwealth/test/integration/api/topics.spec.ts b/packages/commonwealth/test/integration/api/topics.spec.ts deleted file mode 100644 index 19323d1fc5d..00000000000 --- a/packages/commonwealth/test/integration/api/topics.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { dispose } from '@hicommonwealth/core'; -import chai from 'chai'; -import chaiHttp from 'chai-http'; -import { ApiEndpoints } from 'state/api/config'; -import { afterAll, beforeAll, describe, test } from 'vitest'; -import { TestServer, testServer } from '../../../server-test'; - -chai.use(chaiHttp); -const { expect } = chai; - -let adminJWT; - -describe('Topic Tests', () => { - const chain = 'ethereum'; - - let server: TestServer; - - beforeAll(async () => { - server = await testServer(); - }); - - afterAll(async () => { - await dispose()(); - }); - - describe('Bulk Topics', () => { - test('Should pass /bulkTopics', async () => { - const res = await chai.request - .agent(server.app) - .get(`/api${ApiEndpoints.BULK_TOPICS}`) - .set('Accept', 'application/json') - .query({ - chain, - jwt: adminJWT, - }); - expect(res.body).to.not.be.null; - expect(res.body.status).to.be.equal('Success'); - expect(res.body.result).to.not.be.null; - expect(res.body.result.length).to.be.equal(2); - }); - }); -}); From d1969c6b2f92f07775b4f96fb2e15fe8f0ee0e1b Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Fri, 18 Oct 2024 20:04:01 +0500 Subject: [PATCH 284/425] Fix response type of `Get{User/Global}Activity` calls --- libs/model/src/getUserActivityFeed.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/model/src/getUserActivityFeed.ts b/libs/model/src/getUserActivityFeed.ts index 31ebb21e44f..484b1aec763 100644 --- a/libs/model/src/getUserActivityFeed.ts +++ b/libs/model/src/getUserActivityFeed.ts @@ -36,11 +36,11 @@ SELECT 'community_icon', C.icon_url, 'id', T.id, 'user_id', U.id, - 'content_url', C.content_url 'user_address', A.address, 'profile_name', U.profile->>'name', 'profile_avatar', U.profile->>'avatar_url', 'body', T.body, + 'content_url', T.content_url, 'title', T.title, 'kind', T.kind, 'stage', T.stage, @@ -69,6 +69,7 @@ SELECT 'profile_name', C.profile_name, 'profile_avatar', C.profile_avatar, 'text', C.text, + 'content_url', C.content_url, 'created_at', C.created_at::text, 'updated_at', C.updated_at::text, 'deleted_at', C.deleted_at::text, From b796a4993a7b4f66abc8efffe4f22453c3634ba6 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Fri, 18 Oct 2024 09:25:09 -0700 Subject: [PATCH 285/425] changed to go with the dropdown indicator. --- .../MarkdownEditor/toolbars/BlockSelectorButton.scss | 3 +++ .../components/MarkdownEditor/toolbars/BlockSelectorButton.tsx | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss index 6ad6db7edbc..92b35c2b793 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss @@ -4,6 +4,9 @@ border: none; cursor: pointer; } + .DropdownIndicator { + display: flex; + } } .FormattingPopover { diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx index 605890439b8..f95c8b9339e 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.tsx @@ -46,7 +46,7 @@ export const BlockSelectorButton = (props: BlockSelectorButtonProps) => {
    } {...popoverProps} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/TableButton.tsx similarity index 90% rename from packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx rename to packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/TableButton.tsx index 454195ffbc2..19a00ad8619 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/CWTableButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/TableButton.tsx @@ -4,11 +4,11 @@ import CWIconButton from 'views/components/component_kit/new_designs/CWIconButto import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; import './HeadingButton.scss'; -export type CWTableButtonProps = Readonly<{ +export type TableButtonProps = Readonly<{ onClick?: (event: React.MouseEvent) => void; }>; -export const CWTableButton = (props: CWTableButtonProps) => { +export const TableButton = (props: TableButtonProps) => { const { onClick } = props; const insertTable = usePublisher(insertTable$); diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx index 281d8b50883..c7677f95c1c 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ToolbarForDesktop.tsx @@ -10,13 +10,13 @@ import { Separator, } from 'commonwealth-mdxeditor'; import React from 'react'; -import { CWTableButton } from 'views/components/MarkdownEditor/toolbars/CWTableButton'; import { CreateLinkButton } from 'views/components/MarkdownEditor/toolbars/CreateLinkButton'; import { FormatButton } from 'views/components/MarkdownEditor/toolbars/FormatButton'; import { HeadingButton } from 'views/components/MarkdownEditor/toolbars/HeadingButton'; import { ImageButton } from 'views/components/MarkdownEditor/toolbars/ImageButton'; import { InsertCodeBlockButton } from 'views/components/MarkdownEditor/toolbars/InsertCodeBlockButton'; import { ListButton } from 'views/components/MarkdownEditor/toolbars/ListButton'; +import { TableButton } from 'views/components/MarkdownEditor/toolbars/TableButton'; import './ToolbarForDesktop.scss'; type ToolbarForDesktopProps = Readonly<{ @@ -76,7 +76,7 @@ export const ToolbarForDesktop = (props: ToolbarForDesktopProps) => { - +
    ), From 791b0282cf6a5ba6cd54d3f8cda48a4600ebba72 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Fri, 18 Oct 2024 09:45:01 -0700 Subject: [PATCH 300/425] fixed heading button activity... --- .../views/components/MarkdownEditor/toolbars/HeadingButton.scss | 2 +- .../views/components/MarkdownEditor/toolbars/HeadingButton.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/HeadingButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/HeadingButton.scss index 3b238456b31..fb45e70b539 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/HeadingButton.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/HeadingButton.scss @@ -1,6 +1,6 @@ @import '../../../../../styles/shared'; -.CWHeadingButtonActive { +.HeadingButtonActive { font-weight: bold; background-color: $neutral-100; } diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/HeadingButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/HeadingButton.tsx index 3b3c945a254..ccdacb5019e 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/HeadingButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/HeadingButton.tsx @@ -52,7 +52,7 @@ export const HeadingButton = (props: HeadingButtonProps) => { content={`Change to ${blockType}`} renderTrigger={(handleInteraction) => ( Date: Fri, 18 Oct 2024 09:45:48 -0700 Subject: [PATCH 301/425] Fixed the format button... --- .../components/MarkdownEditor/toolbars/FormatButton.scss | 6 ++++++ .../components/MarkdownEditor/toolbars/FormatButton.tsx | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FormatButton.scss diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FormatButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FormatButton.scss new file mode 100644 index 00000000000..5bbcb2454af --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FormatButton.scss @@ -0,0 +1,6 @@ +@import '../../../../../styles/shared'; + +.FormatButtonActive { + font-weight: bold; + background-color: $neutral-100; +} diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FormatButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FormatButton.tsx index df9d96bb6f7..0c78b4a8dbf 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FormatButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/FormatButton.tsx @@ -12,7 +12,7 @@ import React, { useCallback } from 'react'; import CWIconButton from 'views/components/component_kit/new_designs/CWIconButton'; import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; import { formatToIconName } from 'views/components/MarkdownEditor/toolbars/formatToIconName'; -import './HeadingButton.scss'; +import './FormatButton.scss'; export type HeadingButtonProps = Readonly<{ format: FORMAT; @@ -43,7 +43,7 @@ export const FormatButton = (props: HeadingButtonProps) => { content={`Change to ${formatName}`} renderTrigger={(handleInteraction) => ( Date: Fri, 18 Oct 2024 09:46:19 -0700 Subject: [PATCH 302/425] Fixed the namespace prefixes... --- .../views/components/MarkdownEditor/toolbars/ListButton.scss | 2 +- .../views/components/MarkdownEditor/toolbars/ListButton.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListButton.scss index 788a164b21a..5a365fb81ae 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListButton.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListButton.scss @@ -1,6 +1,6 @@ @import '../../../../../styles/shared'; -.CWListButtonActive { +.ListButtonActive { font-weight: bold; background-color: $neutral-100; } diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListButton.tsx b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListButton.tsx index b65200648fc..cf41bfc9ba6 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/ListButton.tsx @@ -44,7 +44,7 @@ export const ListButton = (props: ListButtonProps) => { content={`Change to ${listType} list`} renderTrigger={(handleInteraction) => ( Date: Fri, 18 Oct 2024 09:49:22 -0700 Subject: [PATCH 303/425] added some gap... --- .../components/MarkdownEditor/toolbars/BlockSelectorButton.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss index 92b35c2b793..60ac4e5e706 100644 --- a/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss +++ b/packages/commonwealth/client/scripts/views/components/MarkdownEditor/toolbars/BlockSelectorButton.scss @@ -6,6 +6,7 @@ } .DropdownIndicator { display: flex; + gap: 2px; } } From e77d5b78f5dee44cfbf5e8cd5216f997e5ca75c9 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 18 Oct 2024 14:59:51 -0400 Subject: [PATCH 304/425] fix query --- libs/model/src/community/GetTopics.query.ts | 142 +++++++++++--------- 1 file changed, 77 insertions(+), 65 deletions(-) diff --git a/libs/model/src/community/GetTopics.query.ts b/libs/model/src/community/GetTopics.query.ts index 8d75f605f50..c06237ab18f 100644 --- a/libs/model/src/community/GetTopics.query.ts +++ b/libs/model/src/community/GetTopics.query.ts @@ -12,74 +12,86 @@ export function GetTopics(): Query { body: async ({ payload }) => { const { community_id, with_contest_managers } = payload; - const base = with_contest_managers - ? `SELECT td.*, - COALESCE( - ( - SELECT JSON_AGG( - JSON_BUILD_OBJECT( - 'contest_manager', cm, - 'content', ( - SELECT JSON_AGG(ca) - FROM "ContestActions" ca - WHERE ca.contest_address = cm.contest_address - AND ca.action = 'added' - AND ca.created_at > co.start_time - AND ca.created_at < co.end_time - ) - ) - ) - FROM "ContestTopics" ct - LEFT JOIN "ContestManagers" cm ON cm.contest_address = ct.contest_address - JOIN ( - SELECT contest_address, MAX(contest_id) AS max_contest_id, - MAX(start_time) as start_time, MAX(end_time) as end_time - FROM "Contests" - GROUP BY contest_address - ) co ON cm.contest_address = co.contest_address - WHERE ct.topic_id = td.id - AND cm.community_id = :community_id - AND cm.cancelled = false - AND ( - cm.interval = 0 AND NOW() < co.end_time - OR cm.interval > 0 - ) - ), - '[]'::json - ) as active_contest_managers - FROM topic_data td - ` + const contest_managers = with_contest_managers + ? ` +SELECT + td.*, + coalesce(( + SELECT + jsonb_agg(jsonb_set(to_jsonb (cm), -- Convert the contest manager (cm) row to JSONB + '{content}', -- Set the 'content' key in the resulting JSONB + coalesce(( + SELECT + jsonb_agg(ca) -- Aggregates the filtered actions into content + FROM "ContestActions" ca + WHERE + ca.contest_address = cm.contest_address + AND ca.action = 'added' + AND ca.created_at > co.start_time + AND ca.created_at < co.end_time), '[]'::jsonb) -- Use an empty array as fallback if no actions are found +)) + FROM "ContestTopics" ct + LEFT JOIN "ContestManagers" cm ON cm.contest_address = ct.contest_address + JOIN ( + -- Subquery to get the max contest_id, start_time, and end_time for each contest address + SELECT + contest_address, + max(contest_id) AS max_contest_id, + max(start_time) AS start_time, + max(end_time) AS end_time + FROM + "Contests" + GROUP BY + contest_address) co ON cm.contest_address = co.contest_address + WHERE + ct.topic_id = td.id -- Filtering by topic_id + AND cm.community_id = :community_id -- Filter by community + AND cm.cancelled = FALSE -- Exclude cancelled managers + AND (cm.interval = 0 + AND now() < co.end_time -- Check if the interval is 0 and the contest is ongoing + OR cm.interval > 0 -- Or if there is a valid interval +)), '[]'::jsonb) AS active_contest_managers +FROM + topic_data td +` : `SELECT *, '[]'::json as active_contest_managers FROM topic_data`; const sql = ` - WITH topic_data AS ( - SELECT - id, - name, - community_id, - description, - telegram, - featured_in_sidebar, - featured_in_new_post, - default_offchain_template, - "order", - channel_id, - group_ids, - weighted_voting, - token_symbol, - vote_weight_multiplier, - created_at::text as created_at, - updated_at::text as updated_at, - deleted_at::text as deleted_at, - ( - SELECT COUNT(*)::int - FROM "Threads" - WHERE community_id = :community_id AND topic_id = t.id AND deleted_at IS NULL - ) as total_threads - FROM "Topics" t - WHERE t.community_id = :community_id AND t.deleted_at IS NULL - ) - ${base} +WITH topic_data AS ( + SELECT + id, + name, + community_id, + description, + telegram, + featured_in_sidebar, + featured_in_new_post, + default_offchain_template, + "order", + channel_id, + group_ids, + weighted_voting, + token_symbol, + vote_weight_multiplier, + created_at::text AS created_at, + updated_at::text AS updated_at, + deleted_at::text AS deleted_at, + ( + SELECT + count(*)::int + FROM + "Threads" + WHERE + community_id = :community_id + AND topic_id = t.id + AND deleted_at IS NULL) AS total_threads + FROM + "Topics" t + WHERE + t.community_id = :community_id + AND t.deleted_at IS NULL +) + ${contest_managers} `; return await models.sequelize.query>( From 62acd0085d7dd0e29c35740b70e539ea7bf4a438 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Sat, 19 Oct 2024 00:25:07 +0500 Subject: [PATCH 305/425] Added disabled state to `CWCoverImageUploader` --- .../component_kit/cw_cover_image_uploader.tsx | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_cover_image_uploader.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/cw_cover_image_uploader.tsx index ae427fd7e20..b0bdaba47ec 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_cover_image_uploader.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_cover_image_uploader.tsx @@ -7,6 +7,7 @@ import { CWIconButton } from './cw_icon_button'; import { CWButton } from './new_designs/CWButton'; import axios from 'axios'; +import clsx from 'clsx'; import useNecessaryEffect from 'hooks/useNecessaryEffect'; import { useFormContext } from 'react-hook-form'; import useUserStore from 'state/ui/user'; @@ -39,6 +40,7 @@ type CoverImageUploaderProps = CoverImageUploaderFormValidationProps & { showUploadAndGenerateText?: boolean; onImageBehaviourChange?: (behaviour: ImageBehavior) => void; onImageProcessStatusChange?: (isProcessing: boolean) => any; + disabled?: boolean; }; export enum ImageAs { @@ -67,6 +69,7 @@ export const CWCoverImageUploader = ({ defaultImageBehaviour, onImageBehaviourChange, onImageProcessStatusChange = () => {}, + disabled, }: CoverImageUploaderProps) => { const user = useUserStore(); const [imageURL, setImageURL] = React.useState(); @@ -168,6 +171,8 @@ export const CWCoverImageUploader = ({ }; const generateImage = async () => { + if (disabled) return; + try { setImageURL(''); const res = await axios.post(`${SERVER_URL}/generateImage`, { @@ -214,6 +219,8 @@ export const CWCoverImageUploader = ({ // Drag'n'Drop helper function const handleDragEvent = (event, hoverAttachZone?: boolean) => { + if (disabled) return; + event.preventDefault(); event.stopPropagation(); @@ -224,6 +231,8 @@ export const CWCoverImageUploader = ({ }; const handleUpload = async (file: File) => { + if (disabled) return; + if (!file) return; setIsUploading(true); @@ -266,6 +275,8 @@ export const CWCoverImageUploader = ({ }; const dropHandler = (dropEvent: DragEvent) => { + if (disabled) return; + handleDragEvent(dropEvent, false); if (isUploading) return; @@ -279,11 +290,14 @@ export const CWCoverImageUploader = ({ // On-click support const pseudoInputHandler = (inputEvent: InputEvent) => { + if (disabled) return; // @ts-expect-error handleUpload((inputEvent.target as HTMLInputElement).files[0]); }; const clickHandler = (e) => { + if (disabled) return; + e?.stopImmediatePropagation?.(); if (isUploading) return; pseudoInput.current?.click(); @@ -339,7 +353,7 @@ export const CWCoverImageUploader = ({ ); return ( -
    +
    {headerText && ( {headerText} @@ -363,6 +377,7 @@ export const CWCoverImageUploader = ({ isUploading: boolean; uploadStatus: ValidationStatus; validationStatus: 'failure' | undefined; + disabled?: boolean; }>( { // @ts-expect-error @@ -370,6 +385,7 @@ export const CWCoverImageUploader = ({ // @ts-expect-error uploadStatus, validationStatus: formFieldErrorMessage ? 'failure' : undefined, + disabled: disabled, }, 'attach-zone', )} @@ -388,6 +404,7 @@ export const CWCoverImageUploader = ({ setPrompt(''); setIsPrompting(true); }} + disabled={disabled} /> )} @@ -405,6 +422,7 @@ export const CWCoverImageUploader = ({ }} iconName="close" iconSize="small" + disabled={disabled} />
    {isGenerating ? ( @@ -425,6 +443,7 @@ export const CWCoverImageUploader = ({ setPrompt(''); }} containerClassName="prompt-input" + disabled={disabled} /> )} @@ -450,6 +470,7 @@ export const CWCoverImageUploader = ({ accept="image/jpeg, image/jpg, image/png" className="pseudo-input" ref={pseudoInput} + disabled={disabled} /> {isUploading && }
    @@ -486,6 +507,7 @@ export const CWCoverImageUploader = ({ setPrompt(''); setIsPrompting(true); }} + disabled={disabled} /> )}
    @@ -518,6 +540,7 @@ export const CWCoverImageUploader = ({ onImageBehaviourChange?.(ImageBehavior[option]); } }} + disabled={disabled} /> ))}
    From 62ed9ec95c08c0842c3fc898acb440ac305770b0 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Sat, 19 Oct 2024 00:25:22 +0500 Subject: [PATCH 306/425] Added disabled state to `PageCounter` --- .../scripts/views/components/PageCounter/PageCounter.tsx | 6 ++++-- .../components/component_kit/cw_cover_image_uploader.scss | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.tsx b/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.tsx index 5a35ba0ae86..e38bc790cad 100644 --- a/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.tsx +++ b/packages/commonwealth/client/scripts/views/components/PageCounter/PageCounter.tsx @@ -7,12 +7,14 @@ type PageCounterProps = { totalPages: number; activePage?: number; onPageChange?: (pageNumber: number) => void; + disabled?: boolean; }; const PageCounter = ({ activePage = 1, totalPages, onPageChange, + disabled, }: PageCounterProps) => { return (
    @@ -21,7 +23,7 @@ const PageCounter = ({ type="button" buttonSize="sm" iconName="chevronLeft" - disabled={activePage === 1} + disabled={activePage === 1 || disabled} onClick={() => onPageChange?.(activePage - 1)} /> )} @@ -35,7 +37,7 @@ const PageCounter = ({ type="button" buttonSize="sm" iconName="chevronRight" - disabled={activePage === totalPages} + disabled={activePage === totalPages || disabled} onClick={() => onPageChange?.(activePage + 1)} /> )} diff --git a/packages/commonwealth/client/styles/components/component_kit/cw_cover_image_uploader.scss b/packages/commonwealth/client/styles/components/component_kit/cw_cover_image_uploader.scss index bf3611aff54..19d5943acd6 100644 --- a/packages/commonwealth/client/styles/components/component_kit/cw_cover_image_uploader.scss +++ b/packages/commonwealth/client/styles/components/component_kit/cw_cover_image_uploader.scss @@ -3,12 +3,20 @@ .CoverImageUploader { width: 100%; + &.disabled { + cursor: not-allowed; + } + display: flex; flex-direction: column; .attach-zone { cursor: pointer; + &.disabled { + cursor: not-allowed; + } + min-height: 175px; height: 100%; width: 100%; From 429b96347f8f2e1415941421fee4f26e24e29f71 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Sat, 19 Oct 2024 00:26:42 +0500 Subject: [PATCH 307/425] Generalized `TokenInformationForm` and added params to control form UX behaviours --- .../views/pages/LaunchToken/LaunchToken.tsx | 7 +--- .../TokenInformationForm.tsx | 42 +++++++++++++++---- .../TokenInformationForm/types.ts | 13 +++--- .../TokenInformationForm/validation.ts | 10 ++--- 4 files changed, 49 insertions(+), 23 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/LaunchToken.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/LaunchToken.tsx index 4c87aba8f52..bfc5b530edd 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/LaunchToken.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/LaunchToken.tsx @@ -51,12 +51,7 @@ const LaunchToken = () => { navigate('/')} // redirect to home handleContinue={(tokenInfo) => { - setDraftTokenInfo({ - name: tokenInfo.tokenName, - symbol: tokenInfo.tokenTicker, - description: tokenInfo.tokenDescription, - imageURL: tokenInfo.tokenImageURL, - }); + setDraftTokenInfo(tokenInfo); onChangeStep(true); }} diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx index 839f642b7f0..3e255487ed9 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx @@ -43,6 +43,9 @@ const TokenInformationForm = ({ selectedAddress, containerClassName, customFooter, + forceFormValues, + focusField, + formDisabled, }: TokenInformationFormProps) => { const user = useUserStore(); const [baseOption] = communityTypeOptions; @@ -125,6 +128,23 @@ const TokenInformationForm = ({ } }, [selectedAddress, handleSubmit]); + useEffect(() => { + if (forceFormValues && formMethodsRef.current) { + for (const [key, value] of Object.entries(forceFormValues)) { + if (value) { + value && + formMethodsRef.current.setValue(key, value, { shouldDirty: true }); + } + } + } + }, [forceFormValues]); + + useEffect(() => { + if (focusField && formMethodsRef.current) { + formMethodsRef.current.setFocus(focusField); + } + }, [focusField]); + const handleCancel = () => { triggerTokenLaunchFormAbort(() => { trackAnalytics({ @@ -154,8 +174,8 @@ const TokenInformationForm = ({ ref={formMethodsRef} - validationSchema={tokenInformationFormValidationSchema} onSubmit={handleSubmit} + validationSchema={tokenInformationFormValidationSchema} className={clsx('TokenInformationForm', containerClassName)} >
    @@ -170,48 +190,56 @@ const TokenInformationForm = ({ checked: true, hideLabels: true, hookToForm: true, - name: 'tokenChain', + name: 'chain', }} />
    setTokenName(e.target.value?.trim())} customError={isTokenNameTaken ? 'Token name is already taken' : ''} + disabled={formDisabled} />
    {/* Action buttons */} diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts index cdbcda50701..094bc872a91 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts @@ -2,11 +2,11 @@ import AddressInfo from 'models/AddressInfo'; import { ReactNode } from 'react'; export type FormSubmitValues = { - tokenChain: string; - tokenName: string; - tokenTicker: string; - tokenDescription: string; - tokenImageURL: string; + chain: string; + name: string; + symbol: string; + description: string; + imageURL: string; }; export type TokenInformationFormProps = { @@ -16,4 +16,7 @@ export type TokenInformationFormProps = { onAddressSelected: (address: AddressInfo) => void; containerClassName?: string; customFooter?: (props: { isProcessingProfileImage: boolean }) => ReactNode; + forceFormValues?: Partial; + focusField?: keyof FormSubmitValues; + formDisabled?: boolean; }; diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/validation.ts b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/validation.ts index 7e33f7d9a04..b43a2d9aa8f 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/validation.ts +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/validation.ts @@ -2,24 +2,24 @@ import { VALIDATION_MESSAGES } from 'helpers/formValidations/messages'; import z from 'zod'; export const tokenInformationFormValidationSchema = z.object({ - tokenChain: z + chain: z .string({ invalid_type_error: VALIDATION_MESSAGES.NO_INPUT }) .nonempty({ message: VALIDATION_MESSAGES.NO_INPUT }) .max(100, { message: VALIDATION_MESSAGES.MAX_CHAR_LIMIT_REACHED }), - tokenName: z + name: z .string({ invalid_type_error: VALIDATION_MESSAGES.NO_INPUT }) .nonempty({ message: VALIDATION_MESSAGES.NO_INPUT }) .max(100, { message: VALIDATION_MESSAGES.MAX_CHAR_LIMIT_REACHED }), - tokenTicker: z + symbol: z .string({ invalid_type_error: VALIDATION_MESSAGES.NO_INPUT }) .nonempty({ message: VALIDATION_MESSAGES.NO_INPUT }) .min(3, { message: VALIDATION_MESSAGES.MIN_CHAR_LIMIT_REQUIRED(3) }) .max(6, { message: VALIDATION_MESSAGES.MAX_CHAR_LIMIT_REACHED }), - tokenDescription: z + description: z .string({ invalid_type_error: VALIDATION_MESSAGES.NO_INPUT }) .max(180, { message: VALIDATION_MESSAGES.MAX_CHAR_LIMIT_REACHED }) .optional(), - tokenImageURL: z + imageURL: z .string({ invalid_type_error: VALIDATION_MESSAGES.NO_INPUT }) .optional(), }); From 7f19a7996bdab7da56f8e6cfa87c3d6cb0635053 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Sat, 19 Oct 2024 00:27:30 +0500 Subject: [PATCH 308/425] Added streaming endpoint for generating token idea --- .../server/routes/generateTokenIdea.ts | 173 ++++++++++++++++++ .../commonwealth/server/routing/router.ts | 13 ++ 2 files changed, 186 insertions(+) create mode 100644 packages/commonwealth/server/routes/generateTokenIdea.ts diff --git a/packages/commonwealth/server/routes/generateTokenIdea.ts b/packages/commonwealth/server/routes/generateTokenIdea.ts new file mode 100644 index 00000000000..7f90db1906c --- /dev/null +++ b/packages/commonwealth/server/routes/generateTokenIdea.ts @@ -0,0 +1,173 @@ +import { AppError, ServerError, blobStorage } from '@hicommonwealth/core'; +import { DB } from '@hicommonwealth/model'; +import { uuidv4 } from 'lib/util'; +import fetch from 'node-fetch'; +import { OpenAI } from 'openai'; +import { + ChatCompletionMessage, + ChatCompletionUserMessageParam, +} from 'openai/resources/index.mjs'; +import { type TypedRequestBody, type TypedResponse } from '../types'; + +const TOKEN_AI_PROMPTS_CONFIG = { + name: ` + Please create a random idea for a memecoin cryptocurrency, have the token name informed by current events, + and historical internet based humor. Make it hyper opinionated and subversive or topical. Provide just the + token name without any acronym or symbol. Make it either cringe or amazing. Restrict your answer to between + 6 and 25 characters. + `, + symbol: ` + Create a symbol for this token (symbol) of 3-6 characters. The symbol should not include special characters + or emojis. Restrict your answer to between 3 and 6 characters.`, + description: ` + Provide a description for the token. Make it funny and keep it in the vein of ironic, sardonic, twitter personae. + There are no emoji restrictions. Keep the description to 3 sentences. DO NOT BE OVERLY POSITIVE about global + phenomenon, only the asset itself. Restrict your answer to between 1 and 3 sentences and less than 180 characters. + `, + image: (name: string, symbol: string) => ` + Please create an image for a web3 token named "${name}", having a symbol of "${symbol}". + `, +}; + +const TokenErrors = { + OpenAINotConfigured: 'OpenAI key not configured', + OpenAIInitFailed: 'OpenAI initialization failed', + RequestFailed: 'failed to generate complete token idea generation', + ImageGenerationFailure: 'failed to generate image for token idea', +}; + +// we have to maintain this to have "conversational" context with OpenAI +const convoHistory: (ChatCompletionMessage | ChatCompletionUserMessageParam)[] = + []; + +const chatWithOpenAI = async (prompt = '', openai: OpenAI) => { + convoHistory.push({ role: 'user', content: prompt }); // user msg + + const response = await openai.chat.completions.create({ + model: 'gpt-3.5-turbo', + messages: convoHistory, + }); + convoHistory.push(response.choices[0].message); // assistant msg + + return (response.choices[0].message.content || 'NO_RESPONSE').replace( + /^"|"$/g, // sometimes openAI adds `"` at the start/end of the response + tweaking the prompt also doesn't help + '', + ); +}; + +type generateTokenIdeaResp = { + tokenIdea: any; +}; + +// TODO: add option to provide a prompt payload which can be used to generate an idea (optional) + +const generateTokenIdea = async ( + models: DB, + req: TypedRequestBody<{}>, + res: TypedResponse, +) => { + if (!process.env.OPENAI_API_KEY) { + throw new AppError(TokenErrors.OpenAINotConfigured); + } + + const openai = new OpenAI({ + organization: + process.env.OPENAI_ORGANIZATION || 'org-D0ty00TJDApqHYlrn1gge2Ql', + apiKey: process.env.OPENAI_API_KEY, + }); + + if (!openai) { + throw new ServerError(TokenErrors.OpenAIInitFailed); + } + + try { + // required for streaming + res.setHeader('Content-Type', 'text/plain'); + res.setHeader('Transfer-Encoding', 'chunked'); + + const tokenIdea = { + name: '', + symbol: '', + description: '', + imageURL: '', + }; + + // Note: name/symbol/description were generated very fast by OpenAI and streaming chunks of text for individual + // name/symbol/description wasn't proving to be ideal, the FE was receiving chunks way faster, sometimes all + // chunks in a single buffer. Adjusting buffer size was also not ideal, as the chunks from OpenAI response would + // contain 2-5 chars max for name/symbol, so we stream full text for name/symbol/description as 3 seperate chunks + // and them stream the final image matching token info. + + // generate a unique token name + while (true) { + tokenIdea.name = await chatWithOpenAI( + TOKEN_AI_PROMPTS_CONFIG.name, + openai, + ); + + const foundToken = await models.Token.findOne({ + where: { + name: tokenIdea.name, + }, + }); + if (!foundToken) break; + } + res.write(JSON.stringify(tokenIdea) + '\n'); + res.flush(); + + tokenIdea.symbol = await chatWithOpenAI( + TOKEN_AI_PROMPTS_CONFIG.symbol, + openai, + ); + res.write(JSON.stringify(tokenIdea) + '\n'); + res.flush(); + + tokenIdea.description = await chatWithOpenAI( + TOKEN_AI_PROMPTS_CONFIG.description, + openai, + ); + res.write(JSON.stringify(tokenIdea) + '\n'); + res.flush(); + + // generate image url and send the generated url to the client (to save time on s3 upload) + const imageResponse = await openai.images.generate({ + prompt: TOKEN_AI_PROMPTS_CONFIG.image(tokenIdea.name, tokenIdea.symbol), + size: '256x256', + n: 1, + response_format: 'url', + }); + tokenIdea.imageURL = imageResponse.data[0].url || ''; + res.write(JSON.stringify(tokenIdea) + '\n'); + res.flush(); + + // upload image to s3 and then send finalized imageURL + const resp = await fetch(tokenIdea.imageURL); + const buffer = await resp.buffer(); + const { url } = await blobStorage().upload({ + key: `${uuidv4()}.png`, + bucket: 'assets', + content: buffer, + contentType: 'image/png', + }); + tokenIdea.imageURL = url; + res.write(JSON.stringify(tokenIdea) + '\n'); + res.flush(); + + return res.end( + JSON.stringify({ status: 'success', message: 'stream ended' }) + '\n', + ); + } catch (e) { + let error = TokenErrors.RequestFailed; + + // this usually happens in the image generation calls + if (e?.code === 'content_policy_violation') { + error = TokenErrors.ImageGenerationFailure; + } + + return res.end( + JSON.stringify({ status: 'failure', message: error }) + '\n', + ); + } +}; + +export default generateTokenIdea; diff --git a/packages/commonwealth/server/routing/router.ts b/packages/commonwealth/server/routing/router.ts index 4766ea0e53f..d5092131c23 100644 --- a/packages/commonwealth/server/routing/router.ts +++ b/packages/commonwealth/server/routing/router.ts @@ -56,6 +56,7 @@ import setAddressWallet from '../routes/setAddressWallet'; import type DatabaseValidationService from '../middleware/databaseValidationService'; import generateImage from '../routes/generateImage'; +import generateTokenIdea from '../routes/generateTokenIdea'; import * as controllers from '../controller'; import addThreadLink from '../routes/linking/addThreadLinks'; @@ -553,6 +554,18 @@ function setupRouter( generateImage.bind(this, models), ); + registerRoute( + router, + 'post', + '/generateTokenIdea', + rateLimiterMiddleware({ + routerNamespace: 'generateTokenIdea', + requestsPerMinute: config.GENERATE_IMAGE_RATE_LIMIT, + }), + passport.authenticate('jwt', { session: false }), + generateTokenIdea.bind(this, models), + ); + // linking registerRoute( router, From 79a75cfd20eb3fe94feaac45c6a48cd1f53d7f0d Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Fri, 18 Oct 2024 15:28:01 -0400 Subject: [PATCH 309/425] add coalesce to cancelled --- libs/model/src/community/GetTopics.query.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/model/src/community/GetTopics.query.ts b/libs/model/src/community/GetTopics.query.ts index c06237ab18f..324e2302c16 100644 --- a/libs/model/src/community/GetTopics.query.ts +++ b/libs/model/src/community/GetTopics.query.ts @@ -44,9 +44,9 @@ SELECT GROUP BY contest_address) co ON cm.contest_address = co.contest_address WHERE - ct.topic_id = td.id -- Filtering by topic_id - AND cm.community_id = :community_id -- Filter by community - AND cm.cancelled = FALSE -- Exclude cancelled managers + ct.topic_id = td.id + AND cm.community_id = :community_id + AND COALESCE(cm.cancelled, FALSE) = FALSE -- Exclude cancelled managers AND (cm.interval = 0 AND now() < co.end_time -- Check if the interval is 0 and the contest is ongoing OR cm.interval > 0 -- Or if there is a valid interval From d021ace3dae89e19aae2b8d2eb76b2913203ac10 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Sat, 19 Oct 2024 00:28:08 +0500 Subject: [PATCH 310/425] Added `useGenerateTokenIdea` to generate token ideas with draft state and streaming response from API --- .../useGenerateTokenIdea.tsx | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/useGenerateTokenIdea.tsx diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/useGenerateTokenIdea.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/useGenerateTokenIdea.tsx new file mode 100644 index 00000000000..ffe904d88f8 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/useGenerateTokenIdea.tsx @@ -0,0 +1,164 @@ +import { useRef, useState } from 'react'; +import { SERVER_URL } from 'state/api/config'; +import { userStore } from 'state/ui/user'; + +type TokenIdea = { + name: string; + description: string; + imageURL: string; + symbol: string; +}; + +type StreamEnd = { + status: 'success' | 'failure'; + message: string; +}; + +type UseGenerateTokenIdeaProps = { + maxIdeasLimit?: number; +}; + +export const useGenerateTokenIdea = ({ + maxIdeasLimit = 5, +}: UseGenerateTokenIdeaProps = {}) => { + const totalIdeasGenerated = useRef(0); + const [activeTokenIdeaIndex, setActiveTokenIdeaIndex] = useState(0); + const [tokenIdeas, setTokenIdeas] = useState< + { + chunkingField?: keyof TokenIdea; + token?: TokenIdea; + isGeneratingTokenIdea?: boolean; + tokenIdeaGenerationError?: Error; + }[] + >([]); + + const generateIdea = async () => { + if (maxIdeasLimit === totalIdeasGenerated.current) return; + const ideaIndex = totalIdeasGenerated.current; + totalIdeasGenerated.current = totalIdeasGenerated.current + 1; + setActiveTokenIdeaIndex(ideaIndex); + + try { + setTokenIdeas((ti) => { + const temp = [...ti]; + temp[ideaIndex] = { + ...(temp[ideaIndex] || {}), + isGeneratingTokenIdea: true, + tokenIdeaGenerationError: undefined, + }; + return temp; + }); + + // Special case for `fetch` API usage: + // streaming responses doesn't work with axios POST method: https://github.com/axios/axios/issues/5806 + const response = await fetch(`${SERVER_URL}/generateTokenIdea`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jwt: userStore.getState().jwt, + auth: true, + }), + }); + + const reader = response?.body?.getReader(); + const decoder = new TextDecoder('utf-8'); + + let timeoutSec = 30; + let chunkIndex = 1; + const chunkIndexToFieldNameMap = { + 1: 'name', + 2: 'symbol', + 3: 'description', + 4: 'imageURL', + 5: 'imageURL', + }; + + while (true) { + if (reader) { + const { done, value } = await reader.read(); + if (done) break; + + const chunk = decoder.decode(value || '', { stream: true }); + const chunkJSON: StreamEnd | TokenIdea = JSON.parse(chunk); + + if ((chunkJSON as StreamEnd).status === 'failure') { + // if this happens, usually image generation has + // failed, we ignore that for now as its optional. + } + + if (!(chunkJSON as StreamEnd)?.status) { + const valueToSet = chunkJSON as TokenIdea; + const fieldName = chunkIndexToFieldNameMap[chunkIndex]; + const fieldValue = valueToSet[fieldName]; + + if (fieldName === 'imageURL') { + // we dont want imageURL to be updated in chunks + setTokenIdeas((ti) => { + const temp = [...ti]; + temp[ideaIndex] = { + ...(temp[ideaIndex] || {}), + chunkingField: undefined, + token: { + ...(tokenIdeas[ideaIndex]?.token || valueToSet), + [fieldName]: fieldValue, + }, + }; + return temp; + }); + } else { + for (let i = 1; i <= fieldValue.length; i++) { + setTimeout(() => { + setTokenIdeas((ti) => { + const temp = [...ti]; + temp[ideaIndex] = { + ...(temp[ideaIndex] || {}), + chunkingField: fieldName, + token: { + ...(tokenIdeas[ideaIndex]?.token || valueToSet), + [fieldName]: fieldValue.slice(0, i), + }, + }; + return temp; + }); + }, timeoutSec); + + // we want to render description chunks faster as trhey have more text + timeoutSec += fieldName === 'description' ? 15 : 30; + } + } + + chunkIndex += 1; + } + } + } + } catch (error) { + setTokenIdeas((ti) => { + const temp = [...ti]; + temp[ideaIndex] = { + ...(temp[ideaIndex] || {}), + tokenIdeaGenerationError: error, + }; + return temp; + }); + console.error('Error fetching token idea:', error); + } finally { + setTokenIdeas((ti) => { + const temp = [...ti]; + temp[ideaIndex] = { + ...(temp[ideaIndex] || {}), + isGeneratingTokenIdea: false, + }; + return temp; + }); + } + }; + + return { + activeTokenIdeaIndex, + setActiveTokenIdeaIndex, + tokenIdeas, + generateIdea, + }; +}; From dc8a84402ff7c9b109bb225bb86a223b2171d2ae Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Sat, 19 Oct 2024 00:29:02 +0500 Subject: [PATCH 311/425] Add randomize button functionality to `QuickTokenLaunchForm` with micro UX behaviours and interactions --- .../QuickTokenLaunchForm.tsx | 94 +++++++++++++++---- 1 file changed, 77 insertions(+), 17 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index 22ad5a2196c..5125351ed92 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -17,6 +17,7 @@ import { CWText } from 'views/components/component_kit/cw_text'; import CWBanner from 'views/components/component_kit/new_designs/CWBanner'; import { CWButton } from 'views/components/component_kit/new_designs/CWButton'; import CWCircleMultiplySpinner from 'views/components/component_kit/new_designs/CWCircleMultiplySpinner'; +import { CWTooltip } from 'views/components/component_kit/new_designs/CWTooltip'; import TokenLaunchButton from 'views/components/sidebar/TokenLaunchButton'; import { generateCommunityNameFromToken } from '../../../LaunchToken/steps/CommunityInformationStep/utils'; import SuccessStep from '../../../LaunchToken/steps/SuccessStep'; @@ -24,17 +25,30 @@ import TokenInformationForm from '../../../LaunchToken/steps/TokenInformationSte import { FormSubmitValues } from '../../../LaunchToken/steps/TokenInformationStep/TokenInformationForm/types'; import useCreateTokenCommunity from '../../../LaunchToken/useCreateTokenCommunity'; import './QuickTokenLaunchForm.scss'; +import { useGenerateTokenIdea } from './useGenerateTokenIdea'; type QuickTokenLaunchFormProps = { onCancel: () => void; onCommunityCreated: (communityId: string) => void; }; +const MAX_IDEAS_LIMIT = 5; + export const QuickTokenLaunchForm = ({ onCancel, onCommunityCreated, }: QuickTokenLaunchFormProps) => { - const [randomizeAttempts] = useState<{ data: Object }[]>([]); + const { + generateIdea, + tokenIdeas, + activeTokenIdeaIndex, + setActiveTokenIdeaIndex, + } = useGenerateTokenIdea({ + maxIdeasLimit: MAX_IDEAS_LIMIT, + }); + const generatedTokenIdea = tokenIdeas[activeTokenIdeaIndex]; + const isMaxTokenIdeaLimitReached = + MAX_IDEAS_LIMIT === Math.max(tokenIdeas.length, activeTokenIdeaIndex + 1); const [isCreatingQuickToken, setIsCreatingQuickToken] = useState(false); const [ createdCommunityIdsToTokenInfoMap, @@ -83,10 +97,10 @@ export const QuickTokenLaunchForm = ({ } const sanitizedTokenInfo = { - name: tokenInfo.tokenName.trim(), - symbol: tokenInfo.tokenTicker.trim(), - description: tokenInfo.tokenDescription.trim() || '', - imageURL: tokenInfo.tokenImageURL.trim() || '', + name: tokenInfo.name.trim(), + symbol: tokenInfo.symbol.trim(), + description: tokenInfo.description.trim() || '', + imageURL: tokenInfo.imageURL.trim() || '', }; // 1. check if this same token info was submitted before and a community per that info was created @@ -257,10 +271,19 @@ export const QuickTokenLaunchForm = ({ ) : (
    - {/* TODO: https://github.com/hicommonwealth/commonwealth/issues/8863 */} + {/* allows to switch b/w generated ideas */} {}} - /> - - {/* TODO: https://github.com/hicommonwealth/commonwealth/issues/8863 */} - setActiveTokenIdeaIndex(index - 1)} disabled={isProcessingProfileImage || isCreatingQuickToken} /> + {isMaxTokenIdeaLimitReached ? ( + ( + + )} + /> + ) : ( + + )} +
    From 20e238d6913033da47f2f561124f3a4486d28778 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Sat, 19 Oct 2024 00:38:01 +0500 Subject: [PATCH 312/425] Fix types --- .../QuickTokenLaunchForm/QuickTokenLaunchForm.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index 5125351ed92..ae222302c2e 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -322,7 +322,7 @@ export const QuickTokenLaunchForm = ({ isCreatingQuickToken || isMaxTokenIdeaLimitReached } - onClick={generateIdea} + onClick={() => generateIdea().catch(console.error)} onMouseEnter={handleInteraction} onMouseLeave={handleInteraction} /> @@ -339,7 +339,7 @@ export const QuickTokenLaunchForm = ({ isCreatingQuickToken || isMaxTokenIdeaLimitReached } - onClick={generateIdea} + onClick={() => generateIdea().catch(console.error)} /> )} From 3297f2df9a121c9cb3b7dd994250dd7410125ba9 Mon Sep 17 00:00:00 2001 From: israellund Date: Fri, 18 Oct 2024 15:38:44 -0400 Subject: [PATCH 313/425] changed copy, committing to change branches --- packages/commonwealth/client/scripts/views/pages/404.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/404.tsx b/packages/commonwealth/client/scripts/views/pages/404.tsx index 85a513ddee6..50939e6bd7b 100644 --- a/packages/commonwealth/client/scripts/views/pages/404.tsx +++ b/packages/commonwealth/client/scripts/views/pages/404.tsx @@ -22,7 +22,7 @@ export const PageNotFound = (props: PageNotFoundProps) => { content={ message || ` - This page is private. + This page is private or doesn't exist. Please Sign in to view or join the conversation. ` } From 9dea61abbda784fe2d5eab8862a5453e7f54c9e7 Mon Sep 17 00:00:00 2001 From: israellund Date: Fri, 18 Oct 2024 16:47:13 -0400 Subject: [PATCH 314/425] truncated long community names in sidebar header --- .../CWSidebarHeader/CWSidebarHeader.tsx | 39 +++++++++++++------ packages/commonwealth/shared/utils.ts | 6 ++- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWSidebarHeader/CWSidebarHeader.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWSidebarHeader/CWSidebarHeader.tsx index e0f2386d1f2..4f6993932fe 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWSidebarHeader/CWSidebarHeader.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWSidebarHeader/CWSidebarHeader.tsx @@ -5,9 +5,12 @@ import { navigateToCommunity, useCommonNavigate } from 'navigation/helpers'; import app from 'state'; import { useGetCommunityByIdQuery } from 'state/api/communities'; import CollapsableSidebarButton from 'views/components/sidebar/CollapsableSidebarButton'; +import { handleMouseEnter, handleMouseLeave } from 'views/menus/utils'; +import { smartTrim } from '../../../../../../shared/utils'; import { Skeleton } from '../../Skeleton'; import { CWCommunityAvatar } from '../../component_kit/cw_community_avatar'; import { CWText } from '../../component_kit/cw_text'; +import { CWTooltip } from '../../component_kit/new_designs/CWTooltip'; const SidebarHeader = ({ isInsideCommunity, @@ -23,7 +26,7 @@ const SidebarHeader = ({ id: communityId, enabled: !!communityId, }); - + console.log('community', community?.name); return (
    - - - app.chain.id && - navigateToCommunity({ navigate, path: '', chain: app.chain.id }) + 17 ? community.name : null } - > - {community?.name || } - - + placement="top" + renderTrigger={(handleInteraction, isTooltipOpen) => ( + + app.chain.id && + navigateToCommunity({ navigate, path: '', chain: app.chain.id }) + } + onMouseEnter={(e) => { + handleMouseEnter({ e, isTooltipOpen, handleInteraction }); + }} + onMouseLeave={(e) => { + handleMouseLeave({ e, isTooltipOpen, handleInteraction }); + }} + > + {smartTrim(community?.name, 17) || } + + )} + /> {isInsideCommunity && ( { : `http://localhost:8080/${community}`; }; -export const smartTrim = (text, maxLength = 200) => { +export const smartTrim = ( + text: string | undefined, + maxLength = 200, +): string => { + if (!text) return ''; if (text.length > maxLength) { const smartTrimmedText = text.slice(0, maxLength).replace(/\W+$/, ''); if (smartTrimmedText.length === 0) return `${text.slice(0, maxLength)}...`; From fc7c574ac4a17a75bb3ff4aadf0d7b51c26f9214 Mon Sep 17 00:00:00 2001 From: israellund Date: Fri, 18 Oct 2024 17:03:54 -0400 Subject: [PATCH 315/425] deleted console log --- .../component_kit/CWSidebarHeader/CWSidebarHeader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWSidebarHeader/CWSidebarHeader.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWSidebarHeader/CWSidebarHeader.tsx index 4f6993932fe..ec8c4b7c874 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWSidebarHeader/CWSidebarHeader.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWSidebarHeader/CWSidebarHeader.tsx @@ -26,7 +26,7 @@ const SidebarHeader = ({ id: communityId, enabled: !!communityId, }); - console.log('community', community?.name); + return (
    Date: Sat, 19 Oct 2024 05:40:00 +0500 Subject: [PATCH 316/425] default-avatar-images --- packages/commonwealth/server/passport/magic.ts | 7 ++++++- .../commonwealth/server/routes/verifyAddress.ts | 6 +++++- packages/commonwealth/server/util/defaultAvatar.ts | 13 +++++++++++++ .../server/util/verifySessionSignature.ts | 6 +++++- 4 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 packages/commonwealth/server/util/defaultAvatar.ts diff --git a/packages/commonwealth/server/passport/magic.ts b/packages/commonwealth/server/passport/magic.ts index da76eaeb65c..744ce8c67fc 100644 --- a/packages/commonwealth/server/passport/magic.ts +++ b/packages/commonwealth/server/passport/magic.ts @@ -22,6 +22,7 @@ import jsonwebtoken from 'jsonwebtoken'; import passport from 'passport'; import { DoneFunc, Strategy as MagicStrategy, MagicUser } from 'passport-magic'; import { Op, Transaction, WhereOptions } from 'sequelize'; +import { getRandomAvatar } from 'server/util/defaultAvatar'; import { config } from '../config'; import { validateCommunity } from '../middleware/validateCommunity'; import { TypedRequestBody } from '../types'; @@ -103,6 +104,8 @@ async function createNewMagicUser({ generatedAddresses, profileMetadata, }: MagicLoginContext): Promise { + const default_avatar_url = getRandomAvatar(); + // completely new user: create user, profile, addresses return sequelize.transaction(async (transaction) => { const newUser = await models.User.create( @@ -116,7 +119,9 @@ async function createNewMagicUser({ // just because an email comes from magic doesn't mean it's legitimately owned by the signing-in // user, unless it's via the email flow (e.g. you can spoof an email on Discord) emailVerified: !!magicUserMetadata.email, - profile: {}, + profile: { + avatar_url: default_avatar_url, + }, }, { transaction }, ); diff --git a/packages/commonwealth/server/routes/verifyAddress.ts b/packages/commonwealth/server/routes/verifyAddress.ts index dd532009839..3638c2dc384 100644 --- a/packages/commonwealth/server/routes/verifyAddress.ts +++ b/packages/commonwealth/server/routes/verifyAddress.ts @@ -12,6 +12,7 @@ import { } from '@hicommonwealth/shared'; import sgMail from '@sendgrid/mail'; import type { NextFunction, Request, Response } from 'express'; +import { getRandomAvatar } from 'server/util/defaultAvatar'; import { MixpanelLoginEvent } from '../../shared/analytics/types'; import { ServerAnalyticsController } from '../controllers/server_analytics_controller'; import assertAddressOwnership from '../util/assertAddressOwnership'; @@ -84,10 +85,13 @@ const processAddress = async ( addressInstance.verification_token_expires = null; addressInstance.verified = new Date(); if (!addressInstance.user_id) { + const default_avatar_url = getRandomAvatar(); // address is not yet verified => create a new user const newUser = await models.User.create({ email: null, - profile: {}, + profile: { + avatar_url: default_avatar_url, + }, }); addressInstance.user_id = newUser.id; } diff --git a/packages/commonwealth/server/util/defaultAvatar.ts b/packages/commonwealth/server/util/defaultAvatar.ts new file mode 100644 index 00000000000..f866e6b20da --- /dev/null +++ b/packages/commonwealth/server/util/defaultAvatar.ts @@ -0,0 +1,13 @@ +const defaultAvatars: string[] = [ + 'https://s3.us-east-1.amazonaws.com/local.assets/fb3289b0-38cb-4883-908b-7af0c1626ece.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/794bb7a3-17d7-407a-b52e-2987501221b5.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/181e25ad-ce08-427d-8d3a-d290af3be44b.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/9f40b221-e2c7-4052-a7de-e580222baaa9.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/ef919936-8554-42e5-8590-118e8cb68101.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/0847e7f5-4d96-4406-8f30-c3082fa2f27c.png', +]; + +export function getRandomAvatar(): string { + const randomIndex = Math.floor(Math.random() * defaultAvatars.length); + return defaultAvatars[randomIndex]; +} diff --git a/packages/commonwealth/server/util/verifySessionSignature.ts b/packages/commonwealth/server/util/verifySessionSignature.ts index dcc44cb2604..e129ad3e635 100644 --- a/packages/commonwealth/server/util/verifySessionSignature.ts +++ b/packages/commonwealth/server/util/verifySessionSignature.ts @@ -13,6 +13,7 @@ import { type AddressInstance, type DB, } from '@hicommonwealth/model'; +import { getRandomAvatar } from './defaultAvatar'; /** * Verify the session signature is valid for the address model, @@ -72,11 +73,14 @@ const verifySessionSignature = async ( if (existingAddress) { addressModel.user_id = existingAddress.user_id; } else { + const default_avatar_url = getRandomAvatar(); const user = await models.sequelize.transaction(async (transaction) => { const userEntity = await models.User.create( { email: null, - profile: {}, + profile: { + avatar_url: default_avatar_url, + }, }, { transaction }, ); From 1d2305964bb3366b10a4a79287f94dc2f10f6c05 Mon Sep 17 00:00:00 2001 From: Salman Date: Sat, 19 Oct 2024 07:48:13 +0500 Subject: [PATCH 317/425] refactor-remove-images-from-fe --- .../assets/img/avatars/default-avatar1.png | Bin 38615 -> 0 bytes .../assets/img/avatars/default-avatar2.png | Bin 583201 -> 0 bytes .../assets/img/avatars/default-avatar3.png | Bin 102971 -> 0 bytes .../assets/img/avatars/default-avatar4.png | Bin 76928 -> 0 bytes .../assets/img/avatars/default-avatar5.png | Bin 707378 -> 0 bytes .../assets/img/avatars/default-avatar6.png | Bin 165827 -> 0 bytes .../client/scripts/utils/avatarUtils.ts | 20 ------------------ .../components/Profile/ProfileHeader.tsx | 14 ++++++++---- .../components/component_kit/cw_avatar.tsx | 5 +---- .../commonwealth/server/passport/magic.ts | 1 - 10 files changed, 11 insertions(+), 29 deletions(-) delete mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar1.png delete mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar2.png delete mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar3.png delete mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar4.png delete mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar5.png delete mode 100644 packages/commonwealth/client/assets/img/avatars/default-avatar6.png delete mode 100644 packages/commonwealth/client/scripts/utils/avatarUtils.ts diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar1.png b/packages/commonwealth/client/assets/img/avatars/default-avatar1.png deleted file mode 100644 index e76ec9624c86b152052db48d75c365e6f30401d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38615 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

    YnN5Ss}r$qlf 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 diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar2.png b/packages/commonwealth/client/assets/img/avatars/default-avatar2.png deleted file mode 100644 index 547cabb4524b3e88132572544e65c39c873bf976..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 583201 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 N4AyhVt8GiJwJoW$s1E+A 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⪼JDBkIareI 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≷Z(Z(9i*_09*bWc-O8e({~m9NubNiayDa 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 LXmP##8Y<%dncymP diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar3.png b/packages/commonwealth/client/assets/img/avatars/default-avatar3.png deleted file mode 100644 index 2879c8009ba42b9a7ef26d76ec68f9db94fd4023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102971 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 diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar4.png b/packages/commonwealth/client/assets/img/avatars/default-avatar4.png deleted file mode 100644 index 38db86fd07e3a025e844e9a6186bb37aea928259..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76928 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

    n~Q3jnc!iK;N2(QoKx=Pabe{+|&%k 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

    RE<*<&a+e6Lo+c5D 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 AUH||9 diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar5.png b/packages/commonwealth/client/assets/img/avatars/default-avatar5.png deleted file mode 100644 index c00a686cba689b0dbedf1c42fd0e0db1fc32d33e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 707378 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�kP>>$3G# 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%0DKzCo)4x#5;AuP&&Z4Zd!BcsZ948t`;oZAkk z0v8od!QKje1S?~SFm;7Iba0`AZZo|dNYgFy6#A4uVCZ$sn6Aa}AN*qIhE2NDK*G|pjMCz4(X7J>b9hxWU zxC%z+dcqu0(=+vtO!I9~zgv@2rZj5#trD(+{SE3P{FVeD-gWfe-SGqawn>d2Be@HLMJ3wD_+V4c6G~C<^SLuA z%7;Xl4tL>8pSW;-GvgSzkX2gU>T3kzZ4!4GY`c!f^@H2tNz^;-eivhO=Y|y*3d3z5 zv1p@BmYk!cI@?z@(I$*329|<6#_xo7(bl_WYz`gOQM~GV(=OvrkdV1#3hJ>0+Xz^p zZ+ML7twOi7Gp+cbykfC3mn`>rE5fhw(MONYtyc9J)Neg6OJ8=@MimJlcpM+z6QAI# zz8{#+kMoLB`E_7^!f&ygop4hm79GVZRH-~Ak$x22Qs4-FdSG%$@;wU;^}U1S){RN3 za?vZFhsP-{PZBue+xU70{^vhFTGa{|&4&=*-0`L*LV(T#T65`XSaHVk*?wzsJllgh z5_XWdB;|lyhpM_2AgO11N$osjyucz7J|9Wnpf8<5z}#Yz4ktx#MEAdsm*#=A5PhPo zj+D5YWe(64J=pR|T+l*B?^>9cFx`hwfhxnOp1CQDPVsxAXL)oycM*H^K^22Lb2Q21 zBY)5DQ$$IpSNS`0PeO$2=cvGR1rnF*;;y&$3#7?1j3G|j?{TAS2ZOWjjGn?kwk*FN ze;!!DM<7p>QW60wDUXuv78D6pYgP%3q28msUUFH@<#Tfg}Ivzx?Ab z|Nae*-%^++An?k^Zl+%P4u8!afZm`l2TFfa;Hg)e@w& zO3;yi4a;{woZp{}(1emfBaDTdT&L;z%M{0&<`{htU>m6MX?vvPWT|EligWbmbi}l6 zV%c8tH2~cJctD50g~16~=*NNuCPoPl=st5TOh=U7SWFp6P0Sn59ymzADP#2CXH-jg zmLtTaZ&)(rWIViU83kP5lU&eUDw_l@!1zRzcm_%Ru7^D4v=8X+8l=omnFiyt@2v&e zpVP?&16AS`ge{Y2Y@LG0zOYQ>(+}0_Bbv~=Mna&?uTnkTj~H!^b#gt;hwmM%eDUYg z1@7PL&&HB><5dtg3oWaSwgctiZKbu?XJ|)2ZaqlHS74j2O!pk0BMLdNdshbS&y&Q) z#EMc-xl5A8f9lt3*y-T zdm7&w9}M5lZ*1GVVHlk+I+h%B{6Nd@!ZR_iUut`Nnl9096bHjclJY{?&gA$=`|s=c z&wf0v>eaS|txrN{`=;1Dl{0RF_=F@-S$)oKrVX1o>l{1uN^(E)vbnem8Y#L9qvQCy zl)?e+OJ%8lpVeP&t^4$2?nBs_U=Z9zfWg`HK%WXUPQSo(Vsz0Lq}pL8{mD5j^HtA6 z_-O^JR#fERjkR;?lOIfBp;!0U)7G5NOz4izobQby^-XkL=TR&0Dg2mgobSjxT?`{E zk#SPKS}bWKX4lq|Q;sF43%Phz;+VO566Og854tQ=sx*-0j z7g6~LVX-YyS?U3-(1R*?488?>3a_DdLRdP7wfsAYo>o%y;I*r+gLc?_DZ9DH7o4W> zQ@eXKVNER}R2!WG3~eYb{d@VF(J5NN=t@#Jw6$0|o@*GnMPlT+heE51zbK;M_Q6J|&Q9D>=S{{O%ZkZ1=DEPygW`@f%*hZ3o9c{KMa9nQt#s3t;o3 zKQIFmEz!0~UWQ#B{XRi#EW;33kHr5VK65qFJ$V!=h`UZYj@L)-P|yL~y~ zPvcVtJ$y1;^upee!Nd5PXMGn+M7Z4Sv*Xy`^z4Pt`aKHiE*_-HuXvrCZeV!@acVE` zA>YHO795}}dR=6YM5L4?7Cfi>OiC8>Mb6HoPu;%K!W$U}b%hgj;_*}=)$hQAo*whY zdlf(x$Hd~J`Ur!mJj;;_6B*DJlN6OCC+0o98MOAw`qmda{{ndM*$?DA|9!-nHM0ayY03(QfmUB}6X4})e^e6f3b2|L2sHU@Zh4Ze+3cQ|b z5Q!OEhYs!AZGIN{-R-W2Ts-!U`w1(fW7F^0RnD!J<(IrtWNvB9b9Q+gX*t(qdUE(>GrurQQMRyQiK_+J$0Kn>n(3q442~W zKmVJ5{!Iss{aGaV)qF`EGocXO!N@q>ETs9+RL1;~$w&3W54en>#flU&7()Uq-uLY; zLz~EYdbUnXput1;LIQ@IExP%l$1(kf@5-+-`oU1(Djp4Mq$xv*3PW4+JP_eP^9z!A z#zMJtKm)29%ep=RWv1LN(398&Cey_?-Ku``G^~*Hndh}@GJM)82YUyJ7jpWu1|mgY z7&O8e9szwz!Hvhw3-vQGQAsBg7UTsJ_-HjkSsm*b98&LV|r~i!4N^iG${@{b+44WD7uz#ZwylrggX}+p1 z6qeb2}WXyiR~957)){>OdikmaGIj^tZh8O`@%tb0l8I1{Z_)0 zS?Ak6VD-QWyd}WB3xj&`!uz2QQ+UzOFqnYHd28nZw7@Qbodj|-e!}d<{RRK})=}L> z6-hc2_tD*g#Ucpgy6TF;>cim}8^z#`(J`o9Oww>Ics;I;^QrD_vIM z^>va}lWXA`c#Ng<*4Z5(iO5Qzn)Z?gwD6C3lF-JkcBeXh`;4VeK=YT8jTQ=y&aM^d zR8!i?_YgRIz4hjz99b~J{Egj(&LZD7N+?W*!AJ2ko(+}=e zOv+%cXOAz3C3ibTH<-DTqI0Ze&#xGwC@Gi zLn*P7{ooY;2VU)EoRd%A-t>qIwqN1L3FVHjSy6hbQOcJ=I=n3Q{-&C)*-euvU{eN)ViXy@5cco_6ms2EqHTSgwP$X zmDGm(H_@; zF>8LewjLgR1XwN|alH?pOlRtJE(!+@zLHG#qjN*~lgkn(XkR5S(Vq^CecTG_CgH4! zdGJ(yiTRw>c62z6h~!*=+jI_KF}~w5`CFmpE3`#rvppyM@-Nh+DBjQ>vGTI9B-1FvH#QXrYF>j znGhU0PunSq#4aQy+=8in{W;JDpA?Q>ZZz1uC%;U`tHCLB;1Rr^opS1+&inx3Ukd$t z{XECzGCD$x$MN!~O*F1e9SgOW@o9hN*wjhdxg;{NeFX7nyv%-_UG>g_C7}LH+o}DF z0|%btWZHbDw_NnxLf+6pd<0-8u11>_A7aU9UrTtQgax)(`~_e;G@^#`V+0e&RCaSA3Rd+o3d&9)EJ-(kHE4wOG2MKQr$RqyZm)uH$FL>H+sF$r%pfT z(aU=75Oqe2J-rP*(Ls+Uc3#916>ObsnH4UnI-z!7ZJXh=f9K5^<9t82YsHaWve=P@ zyYk+OTcz{8+TG*u`~{Z{x2{tTv;&<_MXpJf2|$74-}f1Ds#Dw^AE3R$bX`e<4jGzs zLU>Hu--*1+gsbnUIvV+Tc+<&RIub&!+W**+*x!B4bhXF4w` z7_5(OUz(&RV@MWhmR$ve7d7u+WNQm>=#Ju5fbnW-B29VRnq0**h}>^Fy6};sTx7Wv zo9CBKZih!HM#}5P9c2_+4kesxy}%29aJ2<@RK=ubMMTXcE>Kx z=L;H4X&ji@#R(g%_;7ZdnJ)BLtG(u#sSC}q^uFk{{{Mn~O$^b4ZkFD^3BN+*o^Nvb z!JqOMwA&k`;dPO>O3%jIKL56JIDTV+BfWYeRTx8J8N+!68Iv0h5;yRNGtKw=QTuBnTL&i!EEE;YImgHfYTsCiG#%nY0BA?UL ztO>&r@ZAg4^-t3k#HoJ^`K|$YEPNCv%(hrgnm3(VpqNPn5eR?7(mbLkD=CD;kf7lrj3tdbG@b8iK%H4;U`r=R55~ z`XzCR`A5B>@W)_PXV`s`5Zb=R6o&$xh*MxShzvPiE)mabi_;oA$Vc; zh02uI^p>9<_b*`a^Rs1|Sg>>WtvIA?-H#=U!1fnUn!CuO{Zrd#%6ns!M)TqGnUCh_ zFE!WcSpr)&^qoR$)>#FY7Fr7LELv*Lya-IdGD^Sm4+#ni8-BoGMVImzlG|H43?Z{jPCT? z93g%ncEM`wd+|qb4jFy)Y13z8#Sg9n7CWa#*_B9NqPr1r>k(x%yagRdktUXIb-!r4 z4QPycu<4!7m*II#bMsk#*I<13Sm$P?7N{CW7PHQxgWKugJopD+M;0W=9%8j+&=kVbJp{rqp+lNYJ)2)FYCs_8M z3A7A;df(rJ?W3{x{(Vi^7(ERyeh;z@WAR5%lZOW9`bt^pQgy2_6*mSG5@6T0!M>Po z@{zG(UDw05boD&}(+^sj!|N*-l>;WV99M+dNin-UFq0%?tOh=-m|#-IL^-7$og2hf zY?UlEv50A?t14X0t(GYPQed{rE23>H`lz_!m&m+z$O;fa3VaKm!#D|NkcT!7E$NZ) zC*jF(&ZpcvUX&+p{M4nyPGbE~Sj_72Uge(zEz(%2egs2D%q<7~@~2k_K7l3QC5zU< zauV_KyV;4#EfW;R~{k=euF#Au(T?+){L%zx#OTY0lp7+D}m^WFUTX9%4 z;;k)|JK%Qeyr=)-SOvF!iQz2|h(+c@e*O8=z9kj^OJJ3Lh0+d5rhuo;rTGz;)#7XS z%f5}2F-fn$^)9YHpiq4z58_sNxX*9<88;GG^Ss*|gqOVKFpE7}pwTwoZ{}sS+vZ80 zF_9@dsm=&4cWE<8N{KBH;;R`J~ecyGr*s*`)(uL~x zsrExGVE#gh3*no#ul=q?YmjL&jy?s*r-78WoC6khm&Fa^I#BF3j~d5T$6JSG(d*<6 zFn-?u*W-gz;7!c5iU^8s4E$VrCyj%Jjvo5#<*0+4<%izgqxo(@ukn*KT*~`|CElZ{ z$)61M#%U4c5XTD~ey?B0Sewr8S2>F$TwioIUo!cT76M0&Lz`?2M>oo!glNP=KU=>P ze}KjNTt24`p*H>Ht=gGBp33|2nlbw}jdcr1Y(A{N$$2kh!4$&srBBmVjZdz_+e9*C z&ddhpV^W@Lj4pJIU6x--bi zRDVi9A2}NGWR}s5g8-axLcCR>+WF3=B&_DKfr$z3vfJ3Cou=C}$=>+J(=Q3%87KvG zWhVsJZl``}_z*?Uz=%c}x>9gpF0+3PrW)gR7g_++!PNQZZi0hJqq^v z?5n$h;p72=1vc5M05SpImoKB~Y}rrpD-~A;o8%oPVLSIfpYcEGNiC4rhfN~AFr|18 z59fRJW%LKVO@#P+!R{l1Ik+|sJGq@w&tM(Xj`~A<)95>^XOM}D3a0bAjbM6?wUa@4 zlCRjk9q9Ivd&Z}de|K~b5(`h&^>`v+JRO>vpXqe-H%QTPJpwpcC?fwIhF$N(2&3i0 zv%XhU3uX^oM1H#3m3T>HK-sgH0S`z8?n7pqN7XLDqH&5|9XbFF5Y*N*k$e^#l)sq7 zr(s52Q<@H!F2hspUwIg-P20m8jVhndL!N%t1&akOO{b^v^8!vKFd{#QEh!xOJp6!$ z9?Si}11_Eg3FlPiO0wE+3jJ9 z87aOXAm80zIu8K#6)84-;Tqk)?WJ~sydLOkVsW3{PMgIM^-V8*vV2i6abX9QYru*f zHdlqfB=7EaR~%W`Id@f@kL5R}5a50_(0b?kGJhfVX*&ckx&xCn^*JEj)~ju1KUIP< zRJ%+mZn1cRNS|LUaVscN)SpjbngkBC;>PuJfc~;&-+IQUlL%vyNjcwprT&8Zy~FR^ z3%%wO`V!@1b}`M;k=O5&Lt%KS{|%>7&y&!^{ldei_Q27&?Qtb}9)9K&uDYG^BrjNT zX7oW9*0#=og`3$W+_uGqRpP01(LRhOh#kyXcS0Wo#~PrEIj6}P|C!LFu_)~f6S;2u z(=nS6Jb95RLkK;QPd!px_=Eq|ZB@)t*G>JdOzS)20N9N*_4W zuwGb0`=|#bs(xn&M$G1Emd!5! z+exMb^h0YNzHxFB;*tg$IwrVNq7ly3$22V843K_m^TBr!yu%4;w`ITtEo?}gz&}g& zzSY*a%rT}Cq;OmB4;P{x(e(8|A5h+eJJYrm!LwT_4V?h@qtPbt)S-u_Fut&8;rQeW zezb>WPmRnjyfv=bD>S|O*&1^a%PA}%;Rl1B9SI+sY|iH{z8pEoSoWT0gz_;V_&^+d z)IG5MxIU9H7<5fQlsP`@@X&uBzUh+ygiljE!`9aXmTq)_Wl!v=K#*rpxE(-nr+zn2 z#dd2|Yi=i5K1}iA3UKLLknSVT0V=pqlN!!vQ3o4?^xkdDA$+j6_X|GIpfGIQF!+EL z2Vwk4CKV-b2G0_V4_vYB-2C^#&X(=gt#_I8H||KQV*2X)F00y6q$^_e`jlU@;zu}7 z6|XPPwcs*s;;FN-@M}DDM@42nanFV$Fw1A?tqRKf(dQ7n(rt~!2-zK$0JiSj!%2dS zocZAR7n^jT@|q`j1a*)*4PbhpyB8oh+6AQXn(LKp=fwe$RSG`>LmzUtm9e7zF5EVP z^lhC`|J4cY#AB(r2%qMsG`OSVnJl;{kF%d*vU$(5(}Wa(n;ex#jm7x5c?P`)Zp zuXlb*BA8aFi}5F&u#caecs&MI<{A^CJ4qXPjt@-CEk1)hS_QPt0?{G%J_B_g#b0E; zNT$*;*zq-Uz@SPRhChY3sb-|*1sGj!+X{FRTlS*Ya?eXSZRfwzyKD3ac*LizpYy%v z0^;AFbq5lfPml2pFr4tV_}=GU(s^B_S2(&aUfw6^58m?fXon>q(dj1QVGpDyR96Dv z85?Vyl8Je>Y0@9OK*n23bi8UeGD~TqXIm`d!toy3EHM;2sJ}G)QpkUiMh z$Tls?H(m)EZE*a?ib17LcN%zj$>6?X#+Sy|{fd7xFZuWP zAm`5a#B8BY4LpH9PX?mX<_kfc`-t3P|Uurd-PRo<7YyQu*D=ejLOdFIO5H&j`ZKPKUTE=|J6lK~$cgsw7Q^eBq z?x#;{GJ31&*4-Ez2mM1V`k@q?9JcUmHeP9A+7pb;Jy&&Cu z9kyLU2YHmzXcrF=0xM*U*gKKbpW?CId+Xqqffc#(*?0N`aqooqO}`y};Gq-YzE=BS zaKZThfuG9Pj;*ipmaELgpQ}*?Q`}>ppNx^$-RJ^xCv`%1@0?JbN-Q4*z;2yLyz676@jp$s)DBX- z6m?9K!b^639308>Gk|=TGfMk%OaS^Nd3o{EhqK<1bkM6~FTJTM8V1n<0KwwAkMt#fQY} zOKCAB#VA>?IIAOVhi?p7f;_{jai!T@Pc$v2p|+Y{5U1YbsxfQ7!ha{|hLcR7TA;h& zf$@P|u1@t~l0|TZ0Z$!yI#&iecc35&6oa}}tn0e9^I$~V+Suu4t`m{r5Au1O;n4JP zmep^{oBh-a#X)VF@<~u#d;(Se#*5%|btsm<2~oXS8B08D_*|#XoWh0%DQU^~ zbJVW`1J%cz9+f1;u=nAw@uK&@Je5n$O2ER?ZukUSrt zv3y0h3*lS8G0?j>FVr|k=2==L$%gnk>L5Ss*&Bf40=w1)j4u4BtPUQ#kk>qq#k;u; zDB6CPT#f&2^MYF!kb{K{rOOKlF7M4B;?)6A2k@d(;rzhNJ9})(VEB*#6Z0M?C-|lA zDXtEy?M`e^7s5V}h|6lhlOn z3<#sQWm0&A>jzC~h!LA)5k^zmNsuGGed_}fj0wMA!+6hy4KLW6?^7JXc^u0ont!@G zbicwL&6y)h!s>Z7>Rs&m%e~AwBLl|Q5dMi?FC3=WvU$CB<^U`@JQm3^?VUR7Gb;6% z_N4}%rJVC7x3q+etGol2?Ujz~WYiSV`C_A9Fr1$}eEFQKUGDK9_!9TC6YfxO zZU$=vup5w=#Js4J5cJ{ zjUacQvhOd~uAj?pIX=OhDxps# zj@PD>${BpeQYMJ`+&{Sq-4k;!?*4Japruq=k&reS*_ypZ4zw8H1H0LZ5W6hoVc6QG;r7 z-K)}{eNA+(9NZA0_Z>H1rcI>bJhwa)MxUitji# z^n@l$?mtF$0l`CPK}?bE(RTRk@Q;pQWc}tOnvT23ke<}cs#~`Ge?%V(w>&Lp8+;)b z!st+bY}#*5|2+28w7+_x)TAfpNh)nyMmIa%<9>z)hz=_M9H;p$WnB16pBe(;+u$J) z$i7YBgLPI$zKkjM7~lbzpAx9rC3g^L^8ZFFjJGLm_4XlsLd(Ig3LO%h4g6k+kX-{u z_sD}3*>B&<+rdi1F{>-8?D!hP$1>`zZj&XFIb{$wnG?k0^G}0Nfn}%&UXWz0&wf~p1ofiI|Wgo}xO74PBGs}yW zErqk<7c#aciL*G7)J^5_6j~PSvCiB6V`$mD=^us<5`aJWH@euxwhLVtIBhT5eamX* z7{aHVyRG7Mc;dU}&VRe`XSVWqQb{sy5}x|`1dK&GMxs5z^cWStD1WComqj~r=7b}D z*+n2S)r3{YYd!#?BXX@{3@gN>&{FuX#KS?HJUPR5wH%y@~ zD0>YEL&S5(v{;2@;R#}SiwOg4{Nialf4>$ z9wsA*Bq3wK(1B>epCg-6J^{nYAE@V!J#?Va)WVM6egN#0y1|6nGL*-M(vTT#Ci4(S zkWTX{S|8{Pc4FFu%CUYwK0^vQHCyq%T-YQMI>9ZK*GE>iPKsTl1G#gssaN?4id-5w zix%bjFub%0(|0py2d!*VDp4Hnz?Vn|Ab%+`CAPyG9WQgah^#_@SVXda^yg@&%*kg~ zMJ>3YJoOfo4i+^L&ypL1%1$bIo5QRir}rJ&Z&|huQjg~#-ylCufa3juQ%L9{7QcerFX3YZo-~o`)ccR(SOMQ5Ic0p| z-~6_DBmN?vzE2Q9J0Uv@Wf`c^5tt&;ZSV1<%k5wlD!_4L-a7!jmTc$<^w7i!v>*X- zJ`*~fc=E+I6^CwfczmtjTh>Kel3&dS)0;xucT`~Pf71n&`*T|XG>sUZJFtcoAOER zbMtoSNa1yN83$PQ%zM<((x$9crksx^PFB{mT&D0RV%4_2;1kzj-*(+scnS7`mJxT0sQt9cHXv@ z#*eomlEMhP)_!Ie12egsarzkziN|ZMZ#yae(SXU*8^@;kt?(no38bVK)i1>tJdM|E zmT{CEM0%y;5Yvn+>Iy*rvC{Y$${aGJ*XUGV2yM= zxO56a_&*0%rTqT=H=5V0nw%QI==abehA-1L9Or?V0?R@l(tQ7)f<GUOo;h9v$ z@O4EP2?;)7cn(dg`q}+Hz|(YAJ0|J%y>`NccCl^}Opk`^Ab8RyvY1;rzMt~68+!=K zcgC&TGiIj)$V1~vU?80>`@5)-6jxh>+E8>g=q92IipB(|4VlF>;~J5?=|n zJArAr*_ey(fbs6eKbRbz9YNRV4vPblSX+@)^_e*Fai^3e$Hv+@rAdI>NJwSB6Vc&8 zJbB^cx=w0=OXn2`A5YtBczJLT(~5)_ciR48vf)!YIR04~SG-_+)yZR$zrp+P;G2AY z9yFD%hqT2@@^3@y@3f2FrDlDz;a-C4dYoqyTh2(6(GY6&_EDF4N>T7^Q9kqiKBFb% zoscKV3k>f@rag~^&yZ&6XJbC13T)V8tuZ zm;TO~jQ(*B>jcI&n%DlAQrK@0K0ow9txI&Hou8 zhrR>WlT7MiJ#1jm$r;lTqptH7p6-;-BIDIOVY&d*Vsw-Z+f3}0#Gz{n`i3S zDLNrVS9QuMz|_gqAoP9L;LP!b##T_{UxGj{GINb*#duJ6JO7dC3*+rlbbR#Y_@kri zvWSx~Inn1bR`8u0n+>`6I)oJb-kB3Z@-nJ{opOl<&~rWtX8w$jG2Z+`c5#HoI?s^J zxWGIbj!$mm-}Jx8wD}M(VzctUYaKI=^%4dDw%!C-i zzUIHji;>JHb8MxQ&DYaF95BiT$}E=+j+*6h_Hd=q~Ti&rTK3SFGsLL7zQTm74_ zS{!P)t8DeOuZwtYUT=;j+<$VV0*o8`4>2pux*9h6f~A`aw=A}xuKKB?=Iw^rIT#sC**Dqt2idHA$4y&eN*fJtC zh)XM6sqgHS=g)(OkYHYsPiTRO`gPuWRkL~MH|urMYfj?<@7Qh(ek!+EV+KWA|6HV` z=j_O3>yq@Q;125K&1<_5-=`Y)#&+D=bWv5)3O%SU-Jys4y2CjFfZ zrHvm0L-{wbWDE;v$5yDO`+qB-Fok`SY31P}6Jjp4Uv5i{!6WrZ|U!WwD@ z#ivQ|l5&3=_rRw@@u>&ofu5fbqDS0eD8A#{N(vA=Nb515kJyFKtK+BeqtW(j(pxJ?c?s6sFmfxGsk3J1> z#g{4nH4jn}#z{(33LC~6p5dWB(2DdD?6T;T%HAo$+)s$g{p$` z@#_j4-}5(?QS-A33jX;mksKtQp-*_A&YC_&@weTiG~WD?4-cN|aOt>>TtNn=iZZFN|2()ws=~4)`M~~vVH{zp^M3)$XNb`lrc%b7|Kk<}1O@Re^Scq=IwJMiKGeb7GOuka2jR%yc7eJgPP zQ?uLa7%|jMWZ;lrc_o~ z_{cf9vT<*?A8CgdS#Q7A1+x7paNQxJ@*uo4nI@j{umWQ?oRb6+M@SK)#!UFGvf`~3 zBVy^@OHmWK{KNmp+TWzxj_g>1*aAJXt(ZaG8AQxL8cGeJW*kj5tEp6FJwor$0Ian@ z9)D3^X}h1hH%T-617-k?Mv$k*^OeY{4JjX#)h)CobTez6D*%iSylbyITYe?;0~XW8 z4)yiTp#IOe;XbFj=-6;IyjzoRftA#)=`%eJ3p?l{bwcnaw6d$|zraaMps@S{i z2;GiCgZg~WS+ndydDPVqcm9Jur1DZf>BKc}@#pj3EqX%I-<#kR{VUA90s=|-qvZ3P zx$7+?Ghd|Lv<$L@^1QJ`-$cU10cPT@=j=jRYg=F2xnk%HG6GxtbIYp#CU;0Jn1sN+ z*E!Wih};1y-t0Ru;!`vFhR1;^0!-mUbk#WTthc%Nxa1$7H}>;EtO7e4>8!0~J_3jBxS<8Sr0^&KDW z^@Q4+I;?3DOF;+cG0t|54SE@Kwmrxo{xUr68{>Q@;FO!D4=iJMcM5GFO$qok5ppX21r`J#tvP;ujG9J_@e8E5a5=|I(vBAuX!thea!&AoDIeBTN@HwvUg$gwRxU@%h*o`0gD{ zS~V`|ii$n4*F9MXV+^3Ey`eW$nMBj@j7Fs4nMWX^68x9!QtouabUc%8@qrz$13dTm z^U$RBfsuFGHSQOn^7^?`uA3hB9rb?2CszrT&ZfXex+gJOHXU<*$-KC2A8w8H-VI&s zc=ivFRVy=cXi^j`67=$J-TPs9k9eKyal&PrBP&4V?a8qEC4Z;EIlMC2jSR!}NFm>M znaro2YkXwF3phECDyTmKECgIj7ami{`)>F1xpw6~FuoTbwz=)SS2=01V0b7SYZ_f= z$AG;+N1H~v4BI9=#xU`QoI8iNwdW`6=7(&uIx#Js78!#^7eBvj9*`68)b@_v7rh~# zGH+ktzikgGcN#-bOffPQcg{+PN5_?Tr#!}{HgRqs#ps8;Zdth;m;^6hX&D8*-u39d zXR8;cZOLB3Ip=3-^6rEj;W)@+n!?ZZ?SDnMt$ax6iaN9Ll`L+@kQj{tClW~_|3RcAz z+6w7H^PjH!@wueGz)-Zzx^P0eQ;IohNoJaijx59Jkso~{;=w+}S>bzr6DBG~li1sB zvFJOG4E%%kyX;6;(4^uV_=}!7l^j^18&xVz^1CPRB7f$4Qc%?QxS>GLmpnzzbIDgHxNnEcs_Epbs0wLX98+60B}VWfQy87(PTn!6st|X#w?Vm3SAOX5$-0o=!_Scb~flcLl)qO^B~foBD`9 zp2J|<;VF3cb>v&aK}lVTv=x6znO)k(A@WZw|61{>Wq;x(eIs7-$xk~} z{A1_2lK8c{Wyh4kmq+GW9CAG5QEfTR$1tlIu7%HHO#jK)++&9p^}MhP>BGHfE{$W) zwQqi3erM;C_S!P3F>>S{q+N?tS0#44=oI3c!=La5#e=fdsf?VWYo^Cz#)OvH`;O<} zk@3KBr`wS5g#`8{mbvWr&=hzj%vkh(jN8LAME(^^)V>p(OZcH4&#WP)vp0nSoVZ|v+aw!A!Q55YV`~%cU<|J8XuHFTalsPov@40G@Zj&kr<$*po-1oSA zH_X~MW~!?ozp@8LmQ6DkW~|n^7?=EGTB*Hg{GWY3LYho}`lc1omrnLa?FLownfxGk z;(GKrD~~d$kGk4lXC#qiwES@935nNAvf~?9jctn5eH=A5j(h~WnOKM{=QXI)l6E!c zbQ8{W+`*zs$lGSVKdwWl-p8lI?EvMo!Lh2PZ}DY*>I&s_`gbC#F(?J1_|<%C{A$}M zUu^%Gw5^I|%&D3N92^WFPvOemCIrg0MbU-MnJ*;mhV%vXs`Q$1-y$Q`Z_aqCcGtiE zC-4XV;`6Ty9FbhT@#S$C%b!D6h@Q{)c|C4rek7msOwbE`3qR!8FV7H_Vj~ceRDamK z@OS&*#H(C`4V=xH{0dFGu<{y=IU<0DAaF8e1&fEORO0gN#FB{4B7B1grpQ{G3d(j3kE`_`@)aZ|} zV7`;(UafL;AoA+}I?#5JAZcsX(tJ}U&J{1(woKw0WQV>EkaG%B`j})v19!_zjgr)* zT!+~#|HSv9$#s|w*!~_5T^B5IlGw?_Eii`AJV;wkO58MIf;?B%4@{uT(zldFW%&JSPJSN&3hxNi)KNz%_XT2e@%0`h$ldd8yBcesp3Cn>zk zfNuJ({#szMJwWm;Lrz+AVm#lRbNc1Wn}3dP@ipN$6B=(-C$VtP9dTCEO-@>nP&E z&!v~7ylHnbRwjnNRKDx?bN^WHjLN4#j^&08Z!%xA$L=VH-ouG^bqQd`_pF$r^Zb!* zjJv&7lKot}Z?Sp69)Aw8Vb!}OZseu=w|%uArTFIH4|cbLf)oOt;zur@%DUUFva&h( z(N`CX2HtCFJ>@*UBe8$_qiv5?-!?dMw$*8Efik8vk5P8eb7<8i7R>^`ZPZ>Xd?(aa zyKhRq)$@=#6r3&VriF7I;urewZZ9-h>{Hkua*lQI)AugfN8db_xMs3xKKWb68Idk} zE^39Zu|J>VZ1@lwM#{I(|Wl$E4$i6_{QkRbBk1ulha6 z%0BedZ-g;k>bLnk?Xrt0Ikcba|Hohd_z(Px&%Z8kWc4kpXnDrTTsy7C*1plz>R7ypI#*)_+r!oUG`b zTlI~H@6i5=EnQB_j>0ab!M|(J)#b@K?TYu{WXJ+ET7HlMSuj{6Y_bzdtMJXoA#z?% zISqv0z=s|SRWDc6y=C5s1w+tSa8Qq&^a!504(Om5b1aj(q{C$S_nF{d!)t^tMGrDC z-;@P}1|X#madx9w`2gC9s!8S0Dr|Vi{?pqnnM3pvD!<{kul2c^dQh%)u3?=&p&Pl1 z2A+&s|M8)G@z*-gc`Ks~?U8<}rH5~rKi^CM>kSnTj$D0Mr1ip}{$`PBCghMp#L!s2 zQaCQC|D=sqZ+XSg+T+B*m8)3Vc8bzVNYD{ODgIuMW+4f_jsRtF^ z5DreC+GD!?gy^LUE4o@DRTjeI$S5jFhx%kl8}Xaa zG44uHMfjZLK82TXzF%>`U|{&rIYbwLhYy)J>!)R&MZ*+~MpU$`(Racu$L+V}0(jv< z=$HX$S<_Kx?g_do-H6$Q&BJufI@w8VV)OYhUM)R@yL>aQT zwk$gTZpFvgpTKH;g{kxQf_=at^4!$`*o@fLSj=0Pp=6jlOg(l!jdW3 zS3#5gv7K0UnN`qO30cRZ^ZD2ixBV_%-s+=nZ-73E+Xc-LLEN8u8yN>-Hy}q4^e_jc+D(%CW8KyA4O%`ExC4;}$}jmgILVs!){a3X>3i$!#)#kUJ&-J!YrsE{R)_y6M7~!51;8k4$Wc!V-IC z%C@H~2W-KXRys}RpOQ3(6-58(4y+U%pA@zfj<~|APhrD)3<_-p#k%d)?oct-Sj3f)3cJ zIMGVM&=T5rCB8=P7v61To!Hkg2T%^;r%!m*9qyLb8sHV5N-gx9TiVIJi_i+mhjG%TX>yp*}o4a$d3lV`t8ZIc! zBfDhZm1t_B7;u_&y58-tMH?o*ikv|o0z6^upwVsm&Nase77~@dNt{Dup4zW*i4H?! z5EG}AV#>%NB*s?U9$4lF^nuq#n;;MRI6>3)*Z7dem-1(k)vJgO^_idVTV#Kmyc#ec zJ^awG=;(=Mp@nFbTTcJYk0pOWAAWL7o4{5R@fq^tcQ$>jN{P!dFTr|SOHz)Pwn|N+ z^Htnb+p$m0iFB;pI_Q(z?{2mA?l(LDx-S`AeCCs!bJUltn$WRTAC)=R@1ZS6rdaZI zzck;G*cqWKN_wz|$?4GMHlC12X)?t}f~zI~%3tr=jc7SHVKc4Qu*jV^n&aarwi^P%nbngU`@F(#qnJ*V78ksfRN_2+jo zDHVmlKBlu==Z;JwzuM>edjT8ztvH0T*I(N!t(=3k{aLZ;QHAugLQ6Poh~A#h+N;Cx z{)=;^`<(M^I^$yHR(-Sj2vM@VE|N_kctsk=|F`FN8(p!u=%4X@=`OztLRj>+>~FD6 zS<%t@D0@C{giDKylWVn1azE&vi=A-(I0A|3bBDqI!aLup}OQevA>B_}rx*pnTl6H~0zNf#f}a6P5U zD0MJ)*`&1Jz8wi0xLy9K5=0NELvQ0uH!2?xs(m<*!Ai?aZniz^-PH*WS^PYIl2*#| zn4!b~q<4MCmc8J&JT-L9OO5Cf5au=i7ns>$?oqkMLzgWvyF78Eu+k;UTOftbr?g>V)#s&%9Hf`GJSyB!Ki7;`}oS3elegPUvgNX;X3> zOXf*js=rfY^o{ZoU374r_O+S#Hcc`<>7$MqIo=k3?S@3#W;l(Yi4XoumbDLE6<;#> zsKpa+lD0gwe)^2=GbMU|zHaCnmK28DIpdh|pz;>o&l|_G#*QFQT3}>M+j6;?lwjEy z+;8!5o`piNc-Y4wbje3`s^`>?VQp0ZJ-`i%vqqXnN6@ z+cyeUN}QMRwa<2Of_P9vhR4f+IEmMY7dgw$#dp!?9m=dAx`mz)zKQA3Bff1ng$wB4 z>1y~1j^RBw?IGcLA*{{ibM(QtRzPS|eM=1K4N;-C?fRI#W}r5(K9Rzg$Rba1qjqxv zi`idr0-hM>U~OCIelz#AHpC0H)gnr3UdOMbZ59t=m#3d7uL0cufcp>@?*5i!f5l4s zPWQ_Yn~tGHiel6DAM8KmXfam`2m*ipLgl=8#Kx5^^f&zmyJ@%yLv&#Whsz_Q_Kr;~-cvp{2wO@Q3!k zE(1;B=kopEKdr|kLDa9(k2SCXmXO+~ZSI-C*Rn0LKS;KHG!mU0gt%*n4TaFIiPth$ zDPA~Fs%M|%h@FCRRhyqADFGb_)4r2m1g=@?JQMfGWp8`(1}R3U z|9j#)uVMrX4#NZByjO5@8LB;G*&!CE`C;HiOHcgbOsr^Ep0EM}!u)wBCa(XzDdVGxEzRU!)jVv!j*(i{K{9Lzh3?Ld()@#7PGA`On^{#SYWh%*`4z< za5C+VyWPQl{?@Wl@gK%;w^bH57##I+u(K*B7CkDz-goGnyTau&Z2{Y#xS<+9o5obs^jJDLLG^Vf}@1Wh;j=D4@z43Q<~u?m2r*PaJG*R*(1 ztne`u)faKhBN5C0A-aR~#n?2=k2M}^{9;@u4?9C-kpb&`!IZIO=z!SV8h;S(7n%@H zB9lyz8J|LUs&)Zb?0dTSELe+_+K}@j)h(s0V&z!f^qt?i3sUG+C;pjn?5VXR*)c(YdnOU(_+VJU%crJRHG~S<$bZ> z+;pz7(@k5f>)`JcIc(U&j_)gC?HM@aBYTd7<4E8wi}|~u`*fU}Cinct%nMtS8-|ju z^eR6=I~f_WkIt!~{$IS_|KtDs+f^KYU*MQGsI*}%!Ksix^_{=+Ot`yWOuq@5`R?zP zQGj>CKk%hb82b2Ni#H#gVBhCNPk8sMu3M@5)lnPv6zTBltiI)A!UxYjSmbj28V+c8 zqBSv&gcz*L=aFGmlSA<(>`s`gQ3mW~0~5TTYbCsX`-38v_6KbbYbpeFqPl*=ma3|b zuhhwv3Ik>MLU zldPVE#q_ws?xUmS%fT;SOVmRiZ@|YJWoD&E`EHC4-P6abNoN8zuR5zBIDP{#QJ!nW z>0?}i11^Vk^}(UZ3Xnc%jh!^l0pdrR_1oki*uU@aa}N{tnH3~rC!X|$%iQ>*UD}&L zp5sd-^E3ILmjn;ZUrXtu1Q8-b#jExi5Gs)uyf{)YlRn9}U9CZ)`7)XzbSd939Vq@BJoH(>6KQ?S zh;Q}CkAhQHT*xI~Ns^Zzp&o-fs~o7GJsH-=ambV79_GEm!copgLsI3lOA2QM&V;<`TWaCCpa;(ybfCjXL8k8{D5qLAXO zPp~n#kZ#M(;{nR$;Tn6CZWfTp<7a#-05>>ZFpj+8IX)S8a`6qkj`#W8@aQDgM(364 z>jN)DR?F`EcTD_Ciz_|OpWi;WX_+1VS)78|cw)kJ|K)EnWEsfAjhK0>_R2ry&GHsOz_V67RvpFSFgR7m**Y#&Y{f z*Z(iLwpguN1i%Mxl>Rw<_dZaQ{Hfh0`zu=-mgVUO*&GxiP& zOtkPaXX~qS7w#=EcOw3rsk_91y2BS!V0p!%(plt3veqn&65uq$W3y|rdGx_8R-X|2 zdM`I`NaQVKq7qac$BKClRRSbu5u*39%)scJ8j2e*nib6mfZ?V8&|Z@lc_=sLXUA~p+Ycf|QI(R}@RqVyDwgojD^ zi>97fTXGjIf3d8u3417^s&{zbAZ=4Di!?r(&89)`aun6UQ(*V87Gp6MHA0OtQK?&*#|IZ*bK= z+CHcbCK0N4ykMwZt4}hXO~JurDg8Spc6^Wan}ja;9v$_#N}*!=!Mj+QU@s}gNPN}5 z-s?sCV)S~x{}TP3Wctvp_1p3DMH}x-$C8V%rG>-c&t$$wf|G_eeA>fIS%P(bB4|Q++@zh7=C`isV=>9DZD2TXSA6Pul)_zhn|5rEt8d(4_)Pz;S6Ow@ zkG1CJbHP0zE6HDazD?2Od1gTAws7oDiPpa4S(8G(rLOGrp(6~g`NM!qCYZw&i^`O- z{t461PcLnsxn$oQa=qy%@XIIC_#K+F$rA;10ym2gU6$qt)0c2fhf*6jKW;mjxgy#U zgr?v z_&8;s*Ez(`_g{g(-Dvdh3mm||5n+7GKNs=&p@bEn#({J9!#ETm&L*E7Fy>rXm@?Ee zuw}Q1Lf1wKm?`&!T4>E>U#6$(-;;=ZQIPNUDfFcPQ6406>v{(5IQ;arJngQ9k6&T* z(-t{(Cu&Y7BHw*NC!a!YKx{uDK~y)i0cN`2~p51gPD z>@HK1sP3b9)3jPXCl7bIM(^)?ac$1sxFK^fondHaVlMhsf>N zSMSfz=UKerB>Kol`Zn#7B+cfZpx(K11;d{e%@%+51_v;d+rB1I@Q=u>*wi#pM_<7& zS8xuIFDwb~zpHFRSBZVS1w!w_CUg)!eKKFMdfc??i1}W9L0aMJ~FUhtrU6l{j|LiP89fu)X@&aGgS1h&V!5pm<+S z+J3%n%2$0WlPh|XwskA+D7#2_ysEaklIxLq`gJQZKyg>Q&{2i2)jfXTKG}1LQ()sL zH2n*3Cnvey?12>5Nx@McPG)^w_zsiTf9T_mI&PMQP|4X>nS`bgz3S#-CXZrL{iniksdIS!6Fl|1+U51V%E-!?*8Xg;uR1EZw#G{XB3>}LNmEZ03Iwe)vs$pkl}P95KAw8y$AgS1GP}9 zTuLCV1ropal%(`{Dz-zN&rqGvaPG-^0I??4?B|{|6)I?ce9E9nU2qr z@7%b~U8LcD%r{Kt7_l&5v`piJu6a{|5EjxZHrcO$6fI&qVH$iCKIkkO1ZQ zY(hAAVBdfwcOi1E!i6R^V>7`?Jny{Ghq?%$W5X;GcR}$iyNt|5t|D!JZK7=c?jGPt=2;r@c+`Lkk**hs$*DHWFf!v(mwAU-1+i zEwI2nh+1pC=qi$qXPwZxACboPS;Eo8!xJRPxNrm&H8?fyvAHRzh^*7kz21}omnWe9 zpHR7aKks|!;v*`T#(Mn@rN#YPAJ^%D@EX2?eS{zVPDvKygVs5gihYD9Cx;HP$?jMF zxs&jx_sjn|mb_L`WqyFD^%0dMn?@A`8<4X(@(S8|fXF6^OuEa-ynfoo} zqB}LI9{xEwg~C0zDmL9W#{cj?XvCrl@xLA7ebr!(Qia)T(3pY$uXw&uxS`MbcBkQ zMkhr~;1fu(LMBw=ym=#_{h!-U6jUHw1DtjmHycHYuG@F$ zFo)MwcuLL1rfrH1^q=fm@?uhAg%$=i7L1vs`>#kU)aIr|;odpp7ajXt?%x`pMHqXJC-ehc#KvoQRb!(j8Rl#B`@7v z1K6z>D6bi~Qb7)FSMr>cJH&rDdCFll4VCibyemr#L`_H!UuWVN7Tkcq`&TE@0vn{| z_#E{Wi~obr z^`O@^dRos;X8O*XPR0awoIZW+5{!>6frFCs5NQ4Hf}k%y%W0RxASV)IW15vWjcw0h zg3C#aC#bM*Eux?eLk6iVelU-d49-Y{)t;m_I^qoXDZlf0j1(2fgX=OsWHoo=<7;9^Iq%hE=3nVHk@MyhkzpL!M|3i9lDL?0E1@eD z+;^3iT(X4O%JlDvQ#xOLoiH88yp|O?h0&aBjIgqF@wLZIF(u~~{>B$-cZ@+SQmmL3 zZkMz<$lW&x&Xze!)-m>Tc&Io%1yaJmk|*CB!|S_fh-x=tz=%x>jw}QYtujU`4Seml z*lm`NrN^%;;5IU{^1>tiEGLm`m4)$5J10r>rBO4)c4boEcim@Suq4l&Jcdv>#loJ; zq-sHAlW8~SoVV%`t%o$ayIAP{palbk*{4pyiiQ7=51ZfIK@2G zQcBVA9+|X0sM{1z720wPP!J2g`QwdMJCTaWBnsmW=R~ z>?WW&uKEFkh488RydCy)`8LoZlm98 zNkErzC@FrrSb~wZyO;A;MTUuaDXS$q0qKD#UPY#PooGs+o#dXB^|Jk_S%M`NRI>QJ zmThFoYF)8MDgv{@VS1+Oy=W*qKeD|nAype`8TYkWa@;6oB~c88a>pJ$$+^KvyziLs z;0lMWk4=zHAHqylf`6}U2*ai4vtlXZ5AR%o$)&=E`wx?yl=z{AD^xKy=lHzwV@3c( z#Yk(C_@r#^NWfextIl2dy#_m+5ZwfQH=4Ydy5IRU~ub$E4xk1w7 zNyu-}U#kCR+Df|C@0eD>K7N^gjN%ha)Fx@mkMWk2K#Me2$Ys&9&Nn)VC#baRs>evq zHU?vm_Ff&Jj{}Vae$MFzb*XmRrvnml5h{y`N9ykds*Y6}g9k!KrsZ*==nDHJTA}o{ z4m4ikZD_f43oHZJI0BG@z3sVy1Z%!(D!&&v?!W%SB)H|n%EEV>L)xdEli82{_<%7@lizK~fxp4O;lGU|#7NuV z^23O3Llb~)9=ClZq5D(FX`z!HbJHknX%UTqKJ2(BF%XqxI$_ynk&ZuTE*|UD&k`Jb zo@1%D0g?ah1GCck@HKhp_5{kqHZWOkgNy!2`8H%;a6~ zEZc-In$K=`@Le_geyyy7+GbKV0Twy}(?7*NRF`SA<|MFRlW8x8=E%?<>%hA6-}WfH za)QgdvQJW9cC3l~EO(Bt34Olk*9j3m^wGtu_7k&r>DMdI{4t{DJM9>+zrsDb`1#!b za^*?(UG(L1+J~_+5n`JyAKHuPP54y*Q~IA?GL}Wfi*3{0XVWpO-Gb+R^++1-Yx(fd zPKXu9C@l4%3B;dqPTi?JnU?;zf?P@aIfyPUKO7A&IhGzYiQ*mAb8 zK7G|!G2>B|e{rtH;)m+U{ogrIp657aGgSNRW0-u#M^cWZs}_J-4=t~`ft`fgg;O(y zgvATrcR}P9>GSS7JsVid#f~dY!a3Kr9Zs`o{#=$hKrv-)x`5F)M%6WLj<4g>tGLG- z!s_WucS;ay+#8E=K8*lLj@4!-@m0HP2Z!2443E{Y$eNN$c z{8*Mobzvp-x%P*bt16HfMHLpbt z(3mqN$UbfBU>k2c?7*LyjF>PapaPrk4py@dLZ+GGX_Ll+!toHwUm6O`@iS%8hGj_b zKn2*OMB%!A!st~Q@5u@T_c*x(6vL7ml>{JZIrQG#E=BKMAC$MtL4M8ectMq;9-Nz} zqx+Pk6ZQ%(4%QRMmWY}ly)!qHklecUgG&HC8~BN=8Amnws{hjYX?yC5s^0a-F7zZr z>H!}wJ@g%52v2?IwQjx*UM&J>@nbm4l84+Sn#8ea`dJZiHnqIe%O+?an&>o6Z}Znl zx!Y(%h$g=24!7TB{OCk26<3leP0VMthy$o~8%gPe(CJMXc0%+pytmx+z7%=u*N|#> zYZ%XDsO>va+Gw2f7}tIGn|^q8*$OxS(huc0pcrwusmW^c@uAj7!{SD{?sz@np2uFo zVMob%4k zp-0|x!=v!8!ez^8PxkiXSzg3&7@Tt)_zCq%9dWYk$nhv2eA`ApPIW^kF;aVn+Cda= zT||Z8AAhqLn1iq5E5y!HCiv!0GVbY|0x3S+u&V!jLyHX}gEbD5{DiGol<|1xoknv? zu|ejEiMeifpCdg?6z%RG#ZOjz>Et)R;s-GMHHd#q|4fk6oH73Au?F>*J%8@L!|K>L zZ}fz%k}63`t}$~o(FL&mUF;@WwgEL+`f>SSz~)4Gi~rTR))SNALvwmSA?l>e?R?3T zW04ek5~AP2nK^QS=>8QaS}x6@@Ec+mDtnoTikv|QZ5ho4z>{d@3MxQ0t#iET(l+D; z1=BT%`?=EJePfHN1B=E=XaC)J8DS{@Vha+(kIaf5;kWhCafS3#g!9FmQKPu8Igc5H(r|3V?{`+P072^$`e29r59vo4)_*ryWBbMXv#{LWNxSAg<>Zpsnw5iiB@!Lq}j@MNngRDd5ER zmk*$O^^(cpDPFDM#DM@Bo9$a^&~}jJk6v|q31!g+^wQK&xyd+$bo_*&1AI#(Bq%Cs zg&)wd^}x!Rw9TZTbQHs1zGM&J~ZFiW;uDTBWUNLh_RnjriT&%_gx2?fSU!f7*; zd^o**eJY|oS*Z4{Uz-#d#+U)N^`iq4H{{jg3zJxT{bexd&jdR}$4%>V2afQbw{n;) ze8+t#oRYcPM`qtCy@e~x9eeWX^z)N`2WWgriyk2|NbzMo?|6Pb+(eHJo`l8~4L_E(As=-P9LG*Mlcz z&=FZ&ZEzuX0v9h`OuCvD(B^0CONWj06&=^TtVuZs11)|;XyDiD z$^NRh)IvhpPtqsb_qrs(JpkO+hOZ!uYuRJVTJ_#~)IA2e7|}%s+MLKYg;q(JN`>_ zj{KH$uY}nCJh3wA&lpw{-*G($4@5@OudjD}ka0I`Lu3i5Qdpnl!6s!T*I4l=`PkAU z+tf#F7zbMNdp@Oi{B7PVEJ1K7i5-8U_&NY7FUFCOIzWyr)CLatUaitra#LO(lUUmy zqV=VPVBxd%iO~2%{Q1k=P+>L1ggf0^mXJAAym5hY7+G|ZmsF5$bn1L)f8gcM^05^a zaM`JCX%ad1JH5{FEwO{Ni2jh2PsWm53E{!fwvF|dbf1;K<>K9i5epDLgx1B5C^N{i zGY6$bXe_@usBg}(gJTNy_o9OEcYsOx7D76Qqa0K(BG(%(pyVo!hX)!adc|Nx2_fo( z(2|W2Hs|CMD@cs}_(sYGd%Ydz%-Lj|5r5#LMuiT5t=MZ6 zDkBas4uGG7!-MPaPs#zUJ)8heS)OLpXOH|MeqbThDMWD(<+@* zwt(DejJ_@tmE8I`L8jkeKj-Bxy}p@&d=l>HPF59>DcALuO&2Dfupi{-vLc=*D(8|X zr)qD48Wy8!AlBj{d9p9fAgJ?saGtyUDfEQMRs0{@rsY~X9JTweJ8`jfBX$gd>63cE zi#f|TlL_46(RHlx$CEe~Z98G@6imzi1O7U5(UacoT0V|UlY4XPH?2}oxee3ad3xkt^x9k_i=O_CZG*YwBy>+s zl#>rwoUItGH&n;x682l^Ws)%`iVw{A0U0NJOuI>clKupYr}HoOabRfJxUqZBr?VO`^!*M1*WCmd%@!k+Mjkca^4Q;VS z)Ui^p?G++NXu2iAY#@uyP28T?H5MG9QDgk*GoX8A@N*B|X|IfopVSOu{8r@?*fD$x zBM^BET|$f4=+Lg?irQkYMhd{j`MGJ;8@-FFQ)=D01#dGlAU6quN4GL^$|1-3M0=y>0_ZIsH%+;$Pvi-207;ltNcd?U+Kp z{n}e(64@Z1Srg+ftc>li@$Qwp)|k`@uKBGNZ(_%u?h|<15&I!FK780-^LZ~j?8hB$ z)7iF-mdn^#(QT`qgpT=3+JF}CSQJa6f8=K|btTqjf6lKJrexgTvN0LOvZZ{({0s4c z%XQ3^#!GgZ=*_^oz|0d`8d9x9UXxItd@1Q8v9|h>A?j zME$GbdvRWHH;r}uuB7$+AHrLj?pZWcSi(mz;n$*0?`gu7?Lm@MD3d&|`0(R5dBKXs z3`kIa8-8OEm}$i3t@bKDWt?rea2!aJ)vN3CJ7&)(m~2kWr(H=LY(Eg%IfuFzt37@M z_?lD5OGl)i8{9cP{@=}2PLh;{&*x6Jjsq;8zwkYWT5QA-q^Bm?jlDc?#mBNB7^p^Ba1)zpa0vx;p6km3XcE&XWKUo55F65 zy0Wd27^K5|kllY)x;q7*EJjr=_b4zQ}hR_+9?qtw%(kme4_r$-S z<;rbmSjB?IIQ}A3M7)X4LtooUi$qg8R^#g<1*DzmK#p}ebq-xQy4!L{vG)%ADh(ZU zrb7eDM0`ES7(M8PK#-WG^2LgEa2xA4Gwgv=CoXA{$hV!oOil30q@vqyI{WtwN9oQ< zy(RS%oFr{RHZNE$L+n{MB)o)f78>6ZeV^Q?VVNXh%Y2Br!ROe+Wl*@U)n^wN^^Rck z5y{C0tG+q>ym%K`jh;gA#!gPRZObHe(=zQ+Xd!KbxAaI@KAGlmB`OI^S`Mv2-;>ur zY5~aQ1Mp6MC$N+&u=WF}^L_4Gwm*Yl_Of)bqk!`j2SD#n5Hgm%5@}h5!$D2t`<(VW zFY)?wI@+$Z2=Lc0D^PTDc&_L2fkVO9stcYc{ZTx9(foXOte#}MadKq@?dmsu-4ucqj{1t~DA%1H_BB5jSx(Uh z^wrelG#!rF;=}7b*Yj0SL5+!=Bwq9eoB_G-zu+%s;I@qXPZM*sY@ zJTAau!0Ry*oZDl?K4u z)}|@@ab+f6@rpR=d^FoRw$L>HBq_Jehe|uKWKwd{qS)j+Rg@lEf%9R0n(kS8EoBwY z&)nCF2racF(07iQj2mJ%o_y=uk3s;-xfW(Jv6O!VTUv@`H}!>{wDGZR;1+y&Ug4f9 zjG}ub92z4qLZsIFYjTi`C9wX}JI-1h5I9DQ!WTIAqGi8QRg`Axfb(YA&1e3^7%?>G z%K%)Tnclvg$>d4}axazkv2J$1+pFvn+cXyLbeV11dLpTS^6Pg(AI}<}Is?m~=2(h1 z4Y6RFJd}w=v(nJ}&jriaNK_sFOdS&;Vt2T z&;!?7NF79^j~V4FBJgx^?>R7tTK!pz(q~RX4x(9%>=$}Un;_saU-Pgx?APq++bIL z5Qwpn1pR3*c~-vF$A^c%p%3er$y4`Z5^>deCIMxuAB74aC*cIN$iW2i$nyT6KVNYs z$1fP0_$Cb3K`vR^awW$UED!a!_!#ZOuS0zsWCG zQ*0`vPh08SoZFI9C})=1?g$};*1q+Ph5yJZ&ta9Ih<>8@Lm#K zrnowdV~9VSRR;OUj@Nk5zfR*^ z2Kg=-zUA@y{n6*uDBpUK7X}>x6x=Uo>rQ~qaKyW{G8NyLJ_u7<4p4QWLGCsVUwPN3v04_PWa;h z!25NTSa)hM0#H~pIZMh-;Z2HM^mWBNO-jv4;g)3T&~jpo{g+G*nwY_-F7F|pv?5(3OxT-5nvP~!Of(loJsBOj2a(*!}Q=e6javZRj)BU&tAX)S>-PO0? zHd{g4_*)LNuQa`UZD#wDm&m~iVJQWtkv0ngO^2?)p^gE4Z0W+b2imgPMKCGmTa?~9 z#0M<*JvpE52iu1C%>~4leZ6G{#cxT*_E${NV*7u?O0k7bN~2`x#rU6p?y{4DC1b+S zIpekzL|S$-PGRYG;*joxG(N2*vG(rOgc}3oDk?Nz%kPapn*Xw~u#mT7s zQ@E-9OaJLU$10?(zU<95C(jGQ%Y5T_5Nl!nr~fUm6I(X19Fgc zFbD0v#}L#+L+LG@hwMzuf|#bXu$VjCMc9zj1oQQji>6p@HAeM+HgOROLMCv4CBBiW z#kalj&ZbNXb@Bs12N9jfpF4|^5DCwaezY?=4yM?m=3#I8dNC!@ZP z2w_sLeO{7*u;{mF41t4}+}b95vPn2PF0vfDbR7X*JwQ40aieR&cD?3jUqCkNjfAh9 zs`f7%=-;=;Lea~9TuX~G7w~B-wpuYsV|>ueJMJ#$Gw*0yayj%Xx%s=!*LbUbGkdU% z@ok1@Yzw+K~Jbb&a(mCwtYaz!>|G zM{iXou)6}S17KdUYCgp_2B&n>Z%dkH;2m*KL@GW&#>yJs()>nk=Pirb&`>}e=vIEg z*pwC+&jfZpSJaV|n*E5FB zd?^POA0J4{4=^4%3wPO4$ZR+B(GNI-I|@vKewR&4_08i8sfB{3F&!T5X`u>6ZPG2u zv4TT2dT3c~8eD^Dd0A4Te>cp39vhG(58+JY?r-d^_G?wk$ouUdy~56+ioD1XXm7y# z@gKa~g`Cshxn;t~iVo(r?}!fG&8q3MU<~?hzxsU@g9Oi6`PZ-B-F%(nzpn3%Mt>=A z;D52B6oG!p?bq{wS9S1hBwwHQ$8zE`FvbKe3lN_=?-Turm;H?rK4=fI1HC)a%ZQdr zNOO7r6YSGr0>J0)wPts8><(pTz-u0KHA6OM&Q_A=Sn>{Wt`r%obG2AF*g*z*fk7;D zZg#6jfGZ5TmB_TulAH;)}+i@w|t}J9Y*b>6J~=4xeg4vap<0C9zHN}#0nWPqqOV)k&jN?84Eh8 zO5sHur4r*b(d;C8(-+HD&~za1^;~U$k7z((ANJzg|JFuYJY-+W zy&rA*`PM{?Nz?C%yUL^c0dChAIoy&Et)Y~h3nmikG{mxzvBWt`EA|k+lW|%0HVkhoetUx8TLsP2%2i}i> zD9(hJ)!#fQuMpn(s7ye8GYV(R)BGhHXF&J2i1mFs-l7kf-H_Jyr!*>#U4<77mt8{& z8_(skfz+M$``G4*?t}9PNRNvMxSYMXGV_L9V<1}RyJ!X8B^Um?=-f$m^Ms;l^cIR6 zB9k0>YGj?S=4Ebn$o>flSi{1ZtG|+P3NW{fs|W8cJTum|&2ZcicI4BNUPz~?0;BtU zCx4IL>s(^xIyv9(dCWReej#`Z=+Rd|ZHWBB3b`}yl$#K?dP0t$$8_c96UXLj;%PQ4 zcIWDh9A;%jhT0MgpZ*@(Neq7}4BVX*>f9j+BU|Xud1T_1o2h9{(W2y<{T8|4&3ceW z*JsG;i4mD_MS5R_g9r955F|QZ;%Sj-C~N>wK(D`#`?I-dDir~&xo3HU$xk}h;R5I z{rkj61@T2o1@Zk!L7+Af?Wlkh4`hj>fST7G3RD|VG#J=%*6UowNHpWGwlh3szKbcz zKpAiLWO6bH=DQ~a6U4_aICUTmV%Yh1yFM8r(fO|Sue%T>5QQBkt1!7VJweupBq<|p zRbc}$Fd+JE?#r=Kh*DnCaTy<>D^AjAHXBAypYo+AomgZxy}`kL%IO@u23PA|42u&r ziU&e(53o8QzGy0)J;}mP`wQ^9`HR=W-;=_jLwrMVP5XcT`xkgez6I=(gBi_>2642n zl^HYWgR#csRR1uM@YM*s!6p#61)7xp^i!0sQX1*;%rJzrDI`4vPj9A|T6XncUlkI~ZnR2vo(5;iI9u{B}yn-o@gP51GM zp;L=GT&+mGLBc;qPNXY!E?)E5-tU6CrM$0M)z_9nel!_WoQ__`pki_tlw!3rc{L9i zFI~)-mM$kNBCUNqS_h$o1{U#EE{cTSWKFa=rqSOp$lp2sX?LmY2M4u&bfWlYCd8jl z+k3?d$IoI-dlXmCxaNM&eQz+Tx!uSMn>N4_?%!xK0qd#htG)zE*MxMo*ytk z*%93(jxCB-XZe_5AKy>I5mQWGG`;AA^KS(NyxVslJ9j&+69c;;S9Uy2LPssaoWdoR ze3iFQyuw!@?^QyfI!L@={IlhM?Gcsd6|wox#4Ka+IfU1KI3q9>XMQ-eN2l1`JzGno}raEJP1UZ9}c`3 zydZ+mBrQppE?;e!S2?E!a1La!kIU#BWQ57%;7No`nqtu!YPV2rq)Q@{7mTjjXReXc za`NFp_B22k9ozt}utaP<;f3wy@1lL0dR*&k4TH z^_Ijbus`EVp^xTJH!}$+XYKZ;_nEN8^1r}5j}OX=znykF7kbA#pas5@@LkZvS`(VS zyNr!<#i4i>JG*a*Coa8%%X2EHCfKTq{dX6DX-?o|5l_sTI=}(zOscOC1Mdg+f zpT*DdCG&!%cyvj=+4G!ZG3(s)BkF{tz2^CDk9?lQ!JdB|ey?bkT!pqLYXG!|;10Ym@LSGKCJ zS618Ek6QGf>WiygX!|MpfW%(Y!N}7Gxx?;S&WjXTi7g5p9eaB9iTbkXDFtTx7+St6 z9}b3ZJNIHj(?(mY_PugYc)04Y$55qf7o0+5G&U-Ba4r4`XG&raaSyJnHV|1h9Gy#H znVJ69xIe2-kYM4Bg$hlQqG;9R;S#;XNb5FR;ijW8^FPWeJZ44v0N`;Yp<)?(7I3z&)s(VTlG&l0A{>&e>s@KrXEaUNej8PPjdY4I5yqxR0$1DGXmevUk-1K8_HAT zXgWWOFHQHBTT=I(XewPT*FNWWvvoy8)6b$=N*pwJ%fwrbXN-)AiL?uqUYb7;md9wd z$#~(?Vo|`7*{1+?VOGu$b<=ai#+z;8bJ()0e%+^zHO`9W;YtI>Y0PHx6gKb?W%2*E+^6a8(K|XkoIe( z1hg69ZQDqj8)3LH7y~!)mc!4_^H@;d*gw8Szdk=yuHUbU{aC^A-~S93Nub--J_S9p zdke)F*w-}z$z4?BmomZYcsuN_>VDc}ABxN#reoheOU_E>CSF43@Ev3qJ zJtiEBBSN}NpE8$Do-438pE}WiRE>X`{Ddc%kjitK9deitlUV?|(G>hMK^WhkX)hDR zC#HzaToRm4(66-$(q{NgDvhfh`1fTwDeYPlYR)?0?|(ya$%>hl%d-WHy;pUqP9xiY*VjfUot$pMqN=l@_K=G>_Y-Z2+gYzr^}d<2ba zS(*7CL~UhQ{-^@x?xYr!9xOkwtHNV_TBl*AJ~9t!OL~v&RqtBppgbl3h@KBW$7ZR2 zPm$92ZkS%Q^KZ)IiuZmL=AT=CfcX<`;+|{tk&y3%Cgbrc zXa#x`UMo(*eQ^ivU0~||=C9#?C&L9^E4Wmq6N@(u0B0E-9~rm!;hrR(bY$Ca!u=su zd>me4<{CPocCLE4dXW%ACrVMU%wZIVArv1C4$m9toK+dk9Ra5A-uuIYu;d} zxuVQ#W{hs%>+|Th*~OY$>DZWq|Es{zy7AwB$DV~0P3!@?^D2|cp7+@hAar%3H2;Lm zn^Wk<(A=RC6RQ$>Q)^(@+~6$}ZqCX0*n6j>$wP4wSWAe|&p6xQE?I@sH!f1=QAne$ zi%FYaLQ&t4U*jL$z6uB-rIN1VC+TThI73bMj{zShca__*xxxPcs5fO~+bNz`4cl9W zGR;;(!|%DR?yZ9_W!{D_^%W=?mrNaE2=F)eVv!SyW_9zzhLI- zny$w_pUd9om`*-Qg`64~+c9*ATV&?@`kbD@kSAxtc#B~qBw0QUPu$1~9 zY|}VN5@~~KjEsAi@A$AG3~m;y0v!1ITn6v_^yDPP0b3tIh@zj?cQL#8@w>akX?MoK z0n3ve$~+_(>-7ws)Vclk-MM}gr7dNW$5c9h`>6Jd2U*(M0jig%w%z37aMNBwdp$VVB>PeF%u19u<=BwjPvVGguOLubqS~}0XC$7Ac ziUTvHSc0)_>cnKSd|zb~zx|0kb^#CVD-~z^#7IsoQvHJLrDT_@8P!L7!?D(0C+p z+CDBj=koZA1HsaJkd_e&#>Z{dSxEbkhEV$n_6O$@S0#!ZN_FxaeiLKB=C`ekJTT*P zfaj*EB=(wRL;=}8bIkXC$?tT}l0&>?OI(1)F>)zmj@}ucPn=?|Oq2$G%ON4x7QfS2 zA4MSm#tIoXCHAC|okl%2pP}5zxxfeRgOjTs3S!OKU?P)1FgFi*FFq^APy3o5sr8w^ zx4k{Tvqix~H!%f-w(+NDl5f4iWPCN*I8@TC+v62Eh_RKSKgjFQ zFSK+4lDS2g^{GS0b&aAKp3{^SP-0q;ts_V?uQS6^(L92Ydz*+@EsQmPc4^pn`$3cR-2Epo5XSu z_#{iOshqIlOPyDzl$hRU4vJf7DB43~W5MqN`AXK!`s`Z2orbHRInP`?2#ovVRk0rh zj_VHuU^}r;vcB=F-uzr>gz-;bw~C&BbjjjWE90{zy6Q~XCv+uBHoopXfem7(`7vPt z+b11g9U4S^oLf4o4cQ>Fj3?DdmJJO2;K`q#ccD>M4(-(A9&psSCni+$TahRGt9B+p zBz!eaN4CMVz!HS$ z>!`$-ccwH+wL(oU`+&fhbCt}`sstvxyklGitfm3<&VJ0GhmW8@iBEYbJM9fpCwU6L z(|Qd)PYBh%RL<0Ou8lYuz^{RqCYKODwmXA$2Vm$fm{Yh(eBPm^9x2}r3|zV|z8E!e zOrAT-yOlpLu+Vm-ND_G8O;5^>cGAgGjJyVCwKaPZy*~+8ozUV$x9yMak74wPo?iZ> z*Lw9vUAUA-Fb2?$y*~no7fx!HG?Kn&)4(!{wn-~!D4f&;oUugTDx(EP>P;pX3RBwl zYkzws#gs^ZJnOg?!5zutzF-#lcl#xn4z{?%(oOd+rb8JLOq4kIUw=B~%5Ce0og0($0pOVER8$Q0moJQ@u@rFSBc(v^Cvri?g zh}1OTqlB0B`w^$uMN^fWLy(s08+%30>Bsh^lSj-|Oo~-Bi;`Z$ zFeef(lGVCZ9EwD~Sab<1w9Fu)Z40mVqZ*R_`WhVdJ6|%Lo%Yp-o(5tg$!B)WEQ%)! z@TwCLdLJ7dD%0r;C1UMf%dyi9h{{t{qs-I-i<0+eW7_QWScs?d^*U5mC3 zW;zhtYJ>C%PY4kw^xY&1l0>!+LMI++@PCfms>^V{%l~xwP*$*P5PfvdCCG#-f zymny8PWpw7AZ^Y6JFz}A{PjE|+sOg@x2~18k!hsKqxtFNkb0!8s%#Iwgg)*=+N7uw zX}pcUTYLSZy=no8Nhj%o&^PVI4s-DTd~}k`{+^s38Q=wb_(p(9C9vO{yybx0qO>|^OeOFpmj=!!|V*F`K(XB23ufQ2# zJr;|Poa6X}d(Nn@Md9=I{b&QnqBpJlR^U;j%?OV(UWx1>cWng>ty|&3WHp}_VT9&^ zLjnfR>7QludPC~i9E)a3#oQE7$eV3&?AO%p>6h9mrfu6AO72hV5nnKG6l%2C)m-V= z_SmOnYr2{F_+s5m(#>4wt&?KUoe=K%Y;)20^m4BxNRbKqC_KtPk_orYjk<7dIci|y z$}Z9Y@iL7;PE7;IO*DERjC|d3ZJ+re%!?_EX$>PbQYVHiomi_I=;m?t4|h|pc1fHe#|^AspK3C|TA_iyqm?aU`g^1$ym~j@ z+MtO)e^=~DbQ=C?6PUa1&HT`ofF(Y4jvGf3KJRMLa4dN+C+>cA#|L3H%2=ARN+YNE zarJN!SvJQ#LMR_vc?h8@kI{qpRJXO~?4dT(v7xW2Tp2_5STHo`F(k1LOrl6Xb{#4| zS1iBk^LXo>D>?LTSI0HyL-Fu#{7SB5#ei+JYm*+IppDJJ?c($k{|-o!n^S<%yUD|M zdeY4mOpP;Lc1d69)lXvsE%(@oyu@-OUVBprPHxH>q8BFLEZ*mu@aWy99NP4Acuzh8 zx+i=n+Qr7KuhQCufwH+N+(GS9iz7FSwMjqg0f?^%X5Vusm+ftAYJ3etX`T3+*7i9! zg~~Ab=ZbCd;$Mp*O1l^9B4NeL6yG>J-q-~Z+P%j%`(E}uvXb9ZbjfF3#MrrtXkJ&_ zW0{VlMFNY_A+{M}k>aCe?^XaP!p)a+!RVzsvRV$|h0ErZvIvYnh|LWT%U1ea&j~n} zOy?#X$Ad+buPgeJ2?%r!LwTZx)2!dr>$DTQcOFx28WBHAREK;iZCJ7gKsH{TR@LXx ztIS2**7QFAk>@038jiuZfA+GvO?SI&GCZbH1T5a}E?ktXo^&x;v>s3rTN4$Bdu90x zxWLR~i@MLt?A6z+memg?{&5Dt#RCFoP=&Kxc>9r-$pL_o@i~%&cI?=F2&BLe_#COO zJS(A;YP{QE?=O%$`tC1mz6r^vCcR>liO*ixp@hV!`RexHKZVw3~`xf*wCG6dO`?q&-tP=c-iP}I}fE{KLXVb-oBPzNCa)mWh?Rn zWQ9V1_TCq1I{OPt2H3VEe6D!Ze&RNxI-}ocf}FE)TteUYVMPb1Z%Z*m^)3C*eqN`& zPX1o20wS$o+xmG5SLNUPu{)zD(rJ}Gz}ru-bjCsn>F=T`BJuf_sjPW`j#)M|2`o6j zy4nq(K7kz*hMDKndd=|SR|53ARJk<#nAI}}HGLmt2fZO>KQ1@C1Xut_!J*@O`B92| z`B;(00*wP{41~$-=ezExs+}P4wGp-37YyGKVM1+Q`?T}$_ z0|uWoT=C|kbrk9HPC0e7CvPwrPA7N{ok^o~F3#@nC$W=(6V6x2Z&-k@!EpexH-n~Q zEUC;LQ%#K0c;lcGsjCi>GD6uubTTG`mJA+2rl21+@b;yE)6uGc4f<&`>oU1aQs3V? z*jNCE%Y1Z~XT?O&v}jeWFB#aIn7)J1ZOkq{9L9<9da+c#;&6^X{CsqY{56z+Y+MG)F^aL4IX$=U0@dU=@k&S`;bi(|z?a^K zCuwzF>Ct^g;zeoe{{;A^@8DaL&8UG<x=155ra}&=m za+b-%hShIB`Bgt6*NF{103(+z<;d#Qw|{G(Q`*Jd*pS9McjtoeF8iardUYRTX#2a< z)ytkwAw=j5Z`*JiXBRrgpX=Og4EAHged9qk%v8DR=DbXHZpZN@*Eq4iANSD}Aun4G z`jy(B!W)s>M9#;t=as+HK4FiP^%x*_)G>m^!CQ(YZ=2Zuf8=pnJFK?m_Y*HQ?(5ro`IVuHW+yk(279ZDQZtgUG*a zMhiq)vKBP;53Q|r>W%oV8#l99R&hq>*0U;ru$*^EqKDNX)a2T-Q#e>O_8U3WHo6Fr z`4+IscQ$VQX@94IhUj#PLI33K9++XW;5el6rS3=VY8NBXl(}CDUwH}>?f>^%uKp{> zmY;Z6KyUSlOv;@T=+i3tQG&K1kiSBmCdbnMp2+q!&9UY$U$$laz!nsk+jk6@LrRkhb#OutLtoFB_;D)hRZ1#ymO`l!+me$KmY#y zTU7Et|M!1GR-@cazl8C{WH-z8JKvywL(vBd#uOY1*^%imC*5QMUrK+$^Imn7RT+#K zus_@ZlMsC9;nSA@t8$ModNRJTrm|Js#MdERunK zrWG4k_(aeDgWTyB-a|JH<+nd(aOmib8{ZRUr+tb6i^rx@iwF=|k}gU3;^_D4O$bBA zIE~%qpZz@j*zcuQ2Pty8v5!5fzr@EM@OmV{Xm39Vx34f#zxIvjziS{RCux?fFP;+es$aE@v{ehL zOM7-dR7V)w8-JBMFN_UtgIWmqdejGSIrIeA+bONihr@Arfcip=98ZA;V+-~;PwUG1 zmN>eN#pw34k1EjNWF|oXV!+ z`fRK!^Qt4JFrJ}2V}H8%6ccr#JE(o>YK`LKlI7{bR*ln+0Yc}IUt-@Zi3O)RjaWAA zVZYb7oeG9HY<|;oytb*aeet7|m^jJi{UJyeLpV>S-(>IUuyk*HrGBdoW9C-+VgZrt zQOK-XZJxsE(+PAgVNe|if&8KcE<1v%SEA-U5@^3lDVV1vq8nf;vrvD~SOkktkDGtMqeROF8HLaU}p8dD{ z&;Qkm9BU5z-~SA*?f4(|VAp;-pC9e?M1D9)JKd@fo{3=(x}eQ{;2&{iu3)>YH2oR} za|VN>h=j((3UFgc z^H167#vcqwDS==D=xI2{mG8mt8o6R#L)ti^WH1BV1bckwIz|rJxK;M(gt;6eHHi=z zVGXPhf`)%?OXb(ur{4yEnWS*S)u%Nn3aG78KFUO&o4d#0WUlXm_Qr*Wmh`xhCZNG- z3E}+AX@h}Dy@v45XWuDjmCF=4!q~@54)*h{X(8*t3_e?b37{Ty!mZfk*LD_-D>ZzE z+}*?^wz{0wX-~pYTyrO3zfN+=E7h*(gi5Pg)>Q?}YhZo-#qfwZUNI^$ce+oXHjsRg4Y*qgTeGSNW5Pu+i<@(b)47)pY*A0%x-{JVWDNj)j4hty+m1)cefQ! z8V7cG;yJJL(*a-PdmhQ4%)HQ)Bd?+50epWHYlbbc;g964kArr5=;-5QF{q1*g_An} zNY;m5@i}-wL~Zaz57xdJ5~p&Cn{EdXo|UfIWOQs6A2=nJ;n>P9YU%hi#YFJq#hHW_ zZ{`)QViT181l~G#SDSPF5?KZkZu`s znOrCVX?Xk5MuU+ZFK**=D5$%)THGAiiPeEgSlDqa`;g>MzrkdZv)$ZN?PdmhpEb3$ zreOBI;WVk*#(-(L&SO0?FVE>*<7o0i`{cPCF24jq?Sf*jw*VFmH}GC?H+ zX9Y!adC8mCp`Lf6&-}j&+oG4B8wk;`-=c0Dx(|yzzM2|K-G*L@4mnJ3Jjv;F*{@Qq z?`%F^LKk^%e^io!;F9p!ly9?{mA?W<=Uzki$U7DA2kyjoZkemgYE!;Co3oluwSN+a z;+aR5_Twpw-qdrl62u9?y8ywPOKEVMJ(*8w0b<+7+MIvmus@}hf#)s#Tzoz^zs1)Z zPmhhU$8W{gD?vI=@o~?Ie_F&TUjHZXM@jMm$3N~r!}O=!d_=)5x8FXW?UuCcTa;@F zcK!;#<;%e)KkQkYd;GQy2V%UN%6JtwI3W5UPGS{D(*)ynDpcWtEMa5XoS);A$&4Hi zE(K5<_h@H@-4m5VpQJd6c`Y8`p-BZalcLCVG^i`!W}>D1ONE{^=WBHYlSA&Y(D*LZ zXiL&LC>r)KOwgo8+iLJWbT&V=u6~=3)FQOqWL@ zKV;RstrcgY*fd+kYb-qe`SY7^g}Q*Hn>R0?2|Ugnac$dvW$`RJaqHpz%_PCh(?=@p#bCbEx&Ww8RJ~Xi@ufuOX+D^JC3NI zXgq3Kbp?{iu+AUZ1z2zdV6AgndVZY1r{6a9XA%$s_uwhdN)p<~#g4%SJWht8KZ%YO z51ho*kT|mB4U1YGkn39iE<8TxQ&<=sX#(6j>hn_@kblDD(6OcE5XK|MY=xOl;((cV z^yPcSh^zv1%1x@axv{;xfX%0%o4sR%X3DAJyU7fVUEszk>?Yp&R=GC&YX3>8XZv>u zeVbn80UGPTw@HRJq~&bdLtfny0y4Sp?(%>ATN{EN#^A-3Wu$UWr|$3hv-S}jlT3tC ztOCbdHw%BC(gHVpT(i%P4gKblR7J;EV~o>`Up5~BE!@6o{h`TMwaw~VYxnWdK&kL^ z)5>cBeDIm*^H@C&G5kI;kKl9<5oSV6$YI6c#{^k~OytS{)%O|9B?Vi8qweT$_6-6Wy`j~#oOGylRHy2HJ2fwu|bpL1$w^74iI><1z{x*Csmkel z=;3QM`A7+$TYaE~^S2Y-XVPw)ys4Z*k`UoRl>Q_qp@}fYHd6TPHVNA3Bir0MgssBr zRWT#e*fiF0xU8t#K7ZF8^CP#mxw9Ne?SRwCH%(XS#-pBKj+|oxX3>}LHg)b=-qGb(j8K>%>N%W_0tseR3e}4s6oprp~aG}S^F+pWLa-NvUbLtO@}8EFnkpP+s68ajIORbHm$yQy{3$dH_ zLH%A6d>x}$RFf$8h>Da3oaignURyw%7d>R$xnvM_D0NMjhn`FAz2$Zw=8glZn=DUG zw>ceCr?uF)?uT;pABJ~-=FKR%m?#?NEhBwu7ez)MDLj||nC&%1IsQKFGT($vvtXfP zHm{`ZcH6_;?Es)MOw8(tdEC6^5^uOIe=wTz1}tVi-idUN8?#s7vcvZbLVnNcpj`Cp zN)C=;ExSyWZN9sQ^c~}DUu!;Z??;5#PB~{Sr&#S9pC%R^BzljRt_b0V?S8BMZR{3! zMr%;igHCRUCyNg1OO8+APQgiWy*EcqYb*Ypl#|(=Mwd|At4E-algmB%b*AOcG`7B8 zeI~Y6+iLkJ(*;{bdVMQgg|#ky_J6_qFqp6Y@zK97jJSi-fD!n1 z2z=8ScDkzZLnHO51OLdY$%l$CHI9fKGnhgA!#P43b-rlcG>y^cnh+#x(vZ`i#SR?= zWASpNz=_rK>sH5#U&NWh7bh#kM+S9*+-=WMFs=t1Stzt4{1FyCo^)_5~^STVDUT7cV7B<1Du z-*F+m-&~`tjyx+~#*PW+_Z4bW%U;2i7?d-lpqVBwmvs)Ehu_54CY{%-UzmMh@ukU@ z`hd5CENKrb${n7AFlvx?T{%r7n~yt)^n)yZG&*`*)nc{p0pxO=Rftjmzh)nRW{|!Q zkyCHJN;xIRY1s&JV5iHt6Q+lk9f#S}XvVU~gPut)udjqUS08YUd?oNRAE19V%z%hG zd2QlS$Lh7mmA=}1;4V8ldI+Zx>i=Tn3MbNd@FHxrYkqo;t$#Zh&)hrbwDR4bWA_D5 z?DT8J?nzJrT$!Q1Au@_Uzx{*bKZ|!Q)1Dh*;hdx?l!uhMQgVJPG8j&6ZiBM@Fus-l zwu{9sxKBaz93smYq&Ds+^}F%S=-GVUZY$a$M4>)^Yc3nUSY&RzRCaGy(xjf(s~#R( z28S^GSO)(U>;u~!Qt^4OEclI&}>0xgR2 zCuYVTQ285`56+Fmh7F4~_kI5nB36Op!oNFT>aFlkejMaSqx@+9Vp#D7Ov7dn(pD=) z0;dNnCagL@y-9u*WNyF{VhVKRtzzlw(*zNxMdkVTej!!c{AxoSYK!V~@ddvE>OgfKhM81eJt(q)ZUaSZjg7L%30(Lw|O89rY;=(o4rgKu3KvO)%t zSaId_>1DNqjj^9l85a*%7cmsKtaQ-tSJ5JK;(hkO3720NYbvaQ&=DM0Ui@dCqpOUIfPzCu;GUD*#(u^pF;-*U}BKU zxvhNka_KRK_gOg-B6BG0mMvzZ&6IZ3vHRN(PuWooPZZx=(pX^W6#;I<>zw??#;8th}I2*u@-^;f+qE}@vH83cwuSN-E@eph0_4^ z-V13ffqDfF_u|-n2MVeLZuGU0n<`l69-w)|``L5>`^yy+X^coVW$NVptL zAH)+M@R_i7aM$)lQ^lbvmW&O>&=(AxR=`qwp?#$IpT~eHwANb=-YL9Cr+o(!R_w)#{zD5lm&Nd+en~pi&c6%QEp{!=zT^THG?3r+ETTnV@56)g zi~1Q&x66m)zZZXm9n8F=CZU>)G<{Z>N*U73X1dM2XqO^d!1x`VWd1t;&EmB$hP2u7 z^SPp~2>NFfSbckwHI>Apd8YhGCt(&lKXcJ~l!AL86g3gkKBRwJkJ2))dDk*^xb5jT z>mhnRS;T4=PG0+>A2LVMBFEtAz9ri!eq=$&7omfz=f^Ww0_O(o>v7E=1t>bETaLVV zo#zRLyq=g4;3Mg&WG;IVnrvfIV-CLZBSp?|9O<_b&sQ!QR3___uO9*_`767{fqjZ? z0k;|2;`}Q)V~EbiSG#{!F12h8+HNl0A0*ReiJfmSv%E&}zT{E>9(~^UKr}LFeBCFp ze>47`6ZZ$s#Jeb0@UvHO++r)|eDiq@+YegSr1!7?hX03B?gfsFe{%x}YFZOsmDT4b zfBD^?`2GCAR%LHc;>@qYMO~9flNy-1&-nA3ub99i4xB!yhY)nev9;4}$u9J`V8s}W zID0!0bY8LqErS*}G15T|OH`y!1Am`uSqK%Nymp}>VAbV@p6`LajWLqb7OY1C+9h{? z!x@U7bad5ECssPx*)Tgko(BA=ls5hjThd*eD{QHsP71@~NyFxybY7c@KyG`|-|r+b zwy8rWhX9xSy`i;ye!kBm8jYVbq;AujgFfe0aP+0>`wn*wT@66*_;rDT{B^5M4HY;8Jug%~-OwyONOSy&F$;eD>zJdVnh# z1Z=SMl^Grbh(B1k{h`JZJ}nxY9$oNhea|Y5lC|9}t)=TzAn0qQd)2ppI+3K_nn%~~ zfw}i0={8KfsjI-(U#$R0_SMH>W-vquy*q(wBgu#F5Sp&B5z;vJmudq{uA6pEmi{U{ zy@{>*h!;vJhe`fZHq%_ZE1#MOUBegS--}KFx#V$vdmp1QQ&yWWc2H+52sMl|$KrT7 zz7;7tXnc)3psRpJCdC&E0{JNu)vM8{bS-<-RaMs~Y(U4)?#C55>U%5@o`jx>^^Cg` zFUFRFa-BQjpEPK(0j5(v2BV)UGNkxNzadHZ4;hP(EZkn^e72VQoa;j$=RouFb9e3% zSkDTBuzr+3ZJF&Q=5%ZeErFcRd$ZtXN$Kow;_3ffY~|1*kDX#a~8J{V6Ar$l2L>DDeG^4To=j2UH{cGld5OF1pD%d1NY*Uk45Wqa9 z4LVGZTiFHf1YUD?p+}1gzVZc*AIo2IBxCYFB;6*bfuwUl=ogDwi^%%!Iqi^&SVEzR`4R7 zQ*ekydzdW|c0g}d^|h3^|8P)fUaL6LWoQ#PB)nLY{#WM`AN1yyiR-}-&yC@xIE7fY z&Gz$}d!)(+Z@;ilES%3Pe)E@hLbK+PxvpuOk*l_;@4`KHwPJ$8;$u|{+>-49krtIB zm%X&=7?j}~+@^rcACde~jQKS^m~H|22%~SWmbMTGB4Q zc9v891cQK91lhQcWx-Dx*caVDUCzcv0j+Rme#ww#e7*yFAWkzty!vVD5XYs_kuA}^ z{Aiatd^Q}`g@SovkkW6Hr;*di3R4gX}Th}MoaM}4ztL7h+K8abUbjs2c<^?AnNVCpFIQ|)Lm@Ja;Qg$_a~e)B zVvH3Dp~~Ox+m_xKJh|7RfqF)WAO>z|BI?Brqa_4?uE7H0vl3(YXcYUk{*Ugp&=Kgz zq>lU+onT=}&l?<}y=^PR9=j@|#kJ`K#$uO|!|eny0Q$g$>+~X2^Ce@)Y-$Uz{$C_s^KsGU5D?kv7uSMW6@Yt1GpQXM#>~6{M^mtL%A9Pc~+A(IjFo z43U;`qp?w*P<%@FL6yeO)k_f@SW59fA>&iXJ|l!ZG7xlAY_tvYD3%_RK@mZ$qx|Ux zl|shDz@`jv9X)#d$R)2DVH2J+%k}1s;wYU7fBqIQwQz_WVZz|}BdUrZYww9Wo;ih` z4^aqXQkrbbp4x6QOIATVB=q}}Dwtn{H44b>APNMp$WZhgdez5&PTtS_`HX*@MN<6% zt~`iYeHU|QCk1_apjAH^o9e>ZHJ0Zy$EDwi9}s-;X4`C_+Xgsc^jXvJNsAtlro{Ev zCoXudRXU&Ir521}ILv+2`fgFd{f)xQq;(uQwa61_T6h*O}tzEcS_Rqg!#V*s$d(% zH_ga5*MSJ{5(M)lkD55j`A3_Ae&SGHHv{DF_>!+RO-b?(P`g{zb|Ds6-3W8sD)1G= z+b0^T%CpZNo^q1YUICz0)F>j)e>Z3#7nSxF$D(I?%`Ar&8Z z{}s7thZ)lWefrvW0fg|2(y7yjhO3s1KW$Rz7dbucLi=J?0ffMv^9V~owibtnct29m z*TdvM8{(>&GjMfMGOJmX)9Pd^ZB$Q>YzU79mw%Ag;S&WPme}ZPd%qH6Zdxk*ghrT( zZ!de`stT3Mtol${LG%*|yQ>|5?%B}$nv9eZQwT8HL+BhCtauV)Cpyl6kF)7Y1B`sz zhD(Q&EH`f_2)Pd=_KJnE&(i6Y0bMQ7uco^srco|AxKec4{dKhi&~bm$kgF|a?s}sg z+ujxNE($%@CS7*Ds={eKD}Z|P=dz(Z zq>sdbE^dsUs@?*|-3j}65Xqeq6IK&R;aeBVs+grBDW zd{=x9w!5u3KwC<+=S(H}w2>7DlU%f(^tGxbE7gY@k`~79`m=diE*q+j_V$xef*6^Q zGpE#ktNnfM+8S*sGEn;&!%vZq6rcLXnd^wpq{Oy|#KI(nj^k=f_=fn-SrYDl`U%Ef z_KOZr;HIaNWAu$R@x}2sk;FL}hMV>zpWAhH&V{IhacuYkW%kMedhZCe%j{TM*yZtO zGXsgYKnNdYAyQm-8t@@pRX+PgotxN{8VlnEf8vXv%pprg+~?d4^^5kQ9YVbvaT~s| zJN55SHfpoZ{D<`8-WDWI|CC7h`PecQTYPlUx2GXDa$p=ic z0TU(B+>f{{K8ly2_>9kg^zsxq@<0Fge={w86%t|-Deb$BA^+v~>l66f!bP88+58tc zIRke=b-mfh<;L`t3=ehb!E^42&L&do2w(x>V}(E)Zpa|^P{NK|zD5Uf#VKzvm2|1-?um}s zWRkWtSTn46|5|Pq=^;)BDh*AiA{!qQF(p6}OX=N9g`Y`SF8;}$Qo(^H8*cdZ6xi~o z%jMt2k~Eue9fTy{btb*dz^p-jl7K>@?SB55`fVzGJ7|_{`fgQRY8}oA)Q-3Gx+Kf1$R(f3MII%?a#%$6xP6b2D4olO{2j z=)B+5L7cJp4{Y0<1hNVjY;*WjICK7&B#cQsC+~Z|2<2tVsC{Mlssh6mTb3%##ONKG zl({Sr+V3mjr#yf9{slhv^pe@ajiOcGaC8M$Vaf3g9T9_9AIbQ&==q{0xo1i^j%_0s z)TYDj3|b5*nP&V-zwPTWaZiePh!2^0ydd8E)a!X1Y4=U{`{(bT#LxHOf#LH4nd{Lv zfoYM zOX}^QJO^qcGhV=LBXYqSThWA?z06-~BFE^O(Bj36C^fINeLlbf&Gr+@q-c*u6()Zn zTSK4y?nhrWc0Trm;0Fy!2{`zqbPXEi6v-hFOA|v5rUeF{G&_`XQ1?H`M zEu((qqh<5ZUXrSDI>pvP?k;m9S&^Lv5|yFI^oZpaIp^4wK91UWL*+Z7J=gAJiD!7g zLa(+hNpz}SBgOB&2*=z_&kVnul<_CC@YpadXWs6`2W>Q3H2)6yuJd7pLf_i*dh2C0 z_%5i3zQLjyKt0SjEs1!nR%BTrmy89(-Z?;$uGgh`x?5N^viE_iTotX?&7b$*lgiw< zAJWcGlx$zG)^`y^xn# zMOX2q`SX}rc51L-z3QF%$Rt4J1& z)OKc^24z2(6mQzxOB40Iw+mye(iLMH`eEXvzSl64VL$NtjO~_z%xa3YHw7eSwf$3$ zLHT84w)@Ofb$b66SjhO(zC~+hg=D!eKY*r?B=|z+lAsx8P7rxb&n7#R1a7M zt@x0Ia{#Yo!G9~B7Emrav@mtG&T{DCaoKR_YK%B5hK7#jK{gg0l7!zE-6`14wI5mj zPvB3}#zGNjri4BK-=f5u%YM8Dlqj9tr$~4g3G{? zuDMa0m=y?5(ChQ4L2Uz(?+}wy(gR<{)z?tCumT2#{!Q=WiW5}ciJS`rGD)f9l8-Ju z7Ha&L@+ZL!tM90>0>EHR29x#?DXK#6Z047~7hM{j;3x1o1q$I! z>HWTM)^|~wo|v-}PFcK(oL|}MsBWf1 zHaQK|1$+D5rr-p<`8sz)deDpUl}VWKog`^7O%u^BF#N!n#C+&UxjVwCj>5g*gEEU1 z{S6U%@g71`xNI+r2x3J+fic2pSGxOr z%Vpig?Q<*HgYq+zpn8pK2oEUVc-eZ5?B}~5MQI;re@TF1CDDcJGTsy)9}j6< zd!@ivJik7QL|+Anj{C83|0-KdJU`FQ%M3Ubm*V(HXn|U#kuN(Xjn#3&#j$VE8+CQYmpjjpjmp_JP+WDBs(AZ;9#SpR8o=bN8J2H%c zr^(uTObHQ@>LbQj)UHPlbv!o_8cw8)xh9^0o5K6SlLprdpbq5ZgJ;D;8S+;{?4;f3 zAKXSB`Ub<916?BL8sT*wm$}A&|Ip0hb;UAx)b-LKNa_;ryL^LEo|yrhnyi>@7qt$nQd+Ox9!0H@@a>6+VWD zT*BACEt`~r7tniHOo1WP?u|(Kn6@E7L(Y5L?ANW2geLFG(QwD3l=#rFtTy+Y;@hlJ z@-5Pn=y@$;#ck%c#khWWgP_gm&7IMm$w-dBa_P*~PW$)sUkSd=sg4Uz-u-9{>7~Wh z9NSbx-7dqEp9RN-4+kVXjWoQ#@!y2WKg9Z*Fmio=ee#z>QDc%Edh7?xRP}$MiA7Qx zCLJ|ig&%`2e1`ky_{xvyT2YxFbQJCsDlCA(lKmcFws^a}ov&){{o+9fbZXAv<_Q>A z8Q>(VYq_3}lR^3h&pGd}5j&qN_VXrl~|%o9GRC|F{|Ird%cW+qeC z7jL_hhyt6?!Cc%J>T#$2`zk%0XKXp)z2OF_b{R3k$L3hi4P9dtaVC%=t4Ee1mDBH> zofa}dR#_>JF;YDdprs#W1wCm@9cZQC^9=gI33i&s3%|4coV(^KZHM;SSEvVjBTUnBiB4qM4xMo0s<1d|W`pr&LX{P)+ z7RaQ$oXd3riADN5Cl;tr*bHFwOP6nz~4pxl!TJeke1iu z$mpf`oYfP6*dWL&cXotDtd1c;8*O@3HY00j+!y<@{YWUB6eJoW+wS$aov}AX$Jhhq zf5>9s^Vg0xxPmMbys@E*`NQYLf|h-c&LMW!H2SD48i5w4Mr~K=_lbkyJPuJ}(Xse2 z;zbU~8N1F4AK0XeU2!&n5xK>Jt8#O@*H;O{t9oRc+E|LgPE|xG9Wl5J zW{SR5#=^(Us5++l00@~JEWDE)2n8XK-2$d4F?OII#o28d()AWKVzU9abG0{A{&i?L zY-&77?_YX9eSYlVVmnAX8MP&N93T0|KRzB&$@t@eBUW4&fu-O}MY09AK6X9czh5xp zgNYYV*oF2hDH7yrGSZC&_r-z)w@gdcvf#!X@uPRj3{nTw)!xQXaggbl@Z{6vL%lRj z1M}`Gy%tP**dzn5G5l8tprG2ZV3TZVH6ZRupqj1=3s+{XF6gk5*c>vhW%Oak?EIiAJJ!9Psw%|f@U%qppS4Ol5@=-C1~10dC=s{H(EVy zx%8QdT**3AKdT?~k&eTM?yj#ojeYlJD#rcRk&DHZfIVJ8rKmj>J!J#>>dg-DF@=>j z&f0N1D3e&SI|HPs34P}~(EC|zSwFrP7kJmw?PE~ZookJ2&EY(rfbabW+`hx^t_S4q zd>olRF(Qt9^p&X^kJYElw<5^P-?SYciiS(un&QUTtJ>Qay!WKM3j@9SMz84xjtWm- zFRSp!7p70i*yNJf3HS*dH}<1`owv0Pl;#e$3cLNx;Nmu&5P#`7x6JxZV~*Zi_v4R2 zyLdlxL;pw99j&*6Ut^NNj9j|fk4xm>IfpqkN6SJAQaYg+e;@h!$H;t8)gVJ9B@|(}?)2V$k-Ns4> zy5|X?HY~|>+ixmtjC@=cXAJ1aDfybitW6$WCMfwanQZ6uf7(LHpz5J^8E znq-lr+vO^d=_&!1Vv_tMIUQe5xq&7xTnMo{hMQdc0;j-q3og=N1ZTc=CrY0bM<$jz za=1Tkw&IshD=>+_=hb6hTBxdd)d)eq`o|9y_wwH+MfghLQ>*o%)TQ@98c$hm=y%tf zJ%}9G3B8eN$J;&jozGbzN96_<(@wwkGe)&d7F;oyTzDJ2=HNfJ6ZedN)9?f~jPORL zumIjGZYX!Rsivz6wtt$GOXT-&Bvz1110~*n=Q41;KHR>q<+?TuNZ+pjyJ3A^uc2qN zF|d~-43{!!tNe$goI$Knjep6x5G8l#Nk%J(TO5}DGZ`r3v*he=+W)}2oJpa(_?rMu zy1vxaKj$tax(kP{ZO{PL#EgTL(oVBUU=4y2)5jeAj$F8%EV(ofs&i5dxx1Bgw0sZ1 zmyUn}$D|`-4Drjp&PhX9Xz7&{7RO)o64*?x`VMX3i!vonczWU#mMr*K!sHl+M-u9y zYHY3=pUK5732NB$-zrP1L>IK@dGG|jCfpc#WBgO!)}nhv=$(&a4?e-ZR8z^N+VR4b zOr}dFn&`}~`89d%i609BJ?Pvfuioslow5@nmD}J~x-zAZ*2|kuVdGkb2X)-TJ8bg5 zHx#A50DaR&50KX+&2Ghgcgu=*@B+dp&1}(aFXUWy+i;(vy)}RI$0PR;KW!dA^eV7( z+49Idl&AhpeOzDkj1yJct}q6Z>`QRyl7G_Jc=S=6_GQw=qEtOr(YARi*9KqrSeU{k zs)#agLpgo*6~nDh>My;p5iBk|F|p{kB4f(;_)m(gfgYcJ`u!DxZ_C9JxHOy5-?}2? z5^(d7VHI{& zhGLKZ{P!4h(pJ5h`&L;d)!DZ zs(k3D<=!wQ(Y=}ueAz+|J8FYH4*Mizro>Sx!WG(%^ICjf@`=HJ$@WPGNKyjYMB9i73Ngg5>+%LKo z5_@|{f2HAmn9EUK_$qoOC2OvJ*4tBYf*f!1w6L-LJpH{l9Uh zTM!0GDjmk0$DvO-f1OjO(JPeASB%@6h&uf3`vjhLmp0qD@%cGuKUQ!A{ueVC!(9jY z3(yl8@Wu2-{_2N(Ho6=d|TdgnE) zCG@b)smk9_;YI)=0;=CkyVpNcQzb#XNq`R>bRz#~KB;_K=iB53F5C_r&^*ii+{$%P z=?bd7r{y7f6y-F}+e?;SLq#ebgAfxb8P4WI4_b0u1e96f;LN6)&c;ekEVoKvmGdjAhjykR@(dfi8I0_f3txdWuasSNVj29X*7O%& z&kX(t;e{tAnv-GDPN7kPDzWQ${X1~a65h{uwE|oDm;yIU9T08$bk=42*Wq!y6TIWK z@wGC^-=sOmJ$0Fx3GRWwqM5-`^E(+hBxh4X^`HhZkI2SwjD;%#nni88J3t%!#s4;} zpOwHGn#=z`;+p`BE@s5=x(_UE`%v0DXy_K&vz9F^-{~vt7C(88V`Eh&%m0x5NL zr2B(-S;^LQj6Ub3Jx^2P!m}Z5X);Osg6YR*GKH&m#vZkOkEB-RzF=h ziQXwbArd-cKiAQNV+@b5Ei3(6M;f_!YctoGH;~*gqj;X&=9!Ln05-Qev;0yHFNuc1 zH*x7;Op+7pUl^RWyJ>fl`s7m9>so)yti=t)4}gx&4tUWR?PrU}dsT}~V0_!<%Bizu z^uXxDZ(9#LnWJ)_B$C>eaA0^JtuLyr)Dia+l0YS9^cHHX8uUp#PeVO zy?@FX9RJCB{8IvBfP@GJ__NL+C}pTat1g|F%QL*38dEFQmcQV0nMo;fuk5%G{@k|4 zI*x+qqID=!x}9<2cHoLtdOLlue~qh2Woh0lX%-g`l=c)_23LXA#=lA*IB^?Zj%!vU z6IwTK7qj)(45r{PL^A}<^XuS58izl@fFFV>DQ@Q+L`#xZM@Bi@4?~yq&DWvbX*tfW z_g_9E{(#PeeA_5RU^tm<{rA@Ag|1Y8Mt)NY-BCsb5rGi8x-5nV&v!W|1JFxEyNi>V zlS*`mJDm$Wif&*#Vhv;t5*QDxTP;bWGkaG^gpH#$o^UvAkc~+u)Dp`@M zF7eL6er6sD*?vC!e;FkA#RHl7!15xZH0mnnDq3gLFpMD2yuE{??1D5-(5?1h;Ir)R z@F>OU(2m4bjmufha!}7fL_Lqzm85);*p#`wk{<06$%8-#hzSjhIWQ;B?^fF8S&kp~ z`aEYN$_B7-blEB;E^pVX)^+zO4pZwu?j1Zj`Ova&TheirCBnWe`wZ{29x=Gv{{5ar zN5G!zC#20pC+uK;%iGA;x{znFu$`dg`VtUZ{sqZ*!uT7q#pveYn&iS@W2Y}jo11oG6{Nw z!MXa!ZUYcpnt$T=rhl2b!s|Hw0h6-MLuecQECBZ=AL`1`bACTP1}Yd|8z_9X&rvy2 zzY`&GhD}4pVUEGm;ee+ zbw(P9jqG#43oN*Cau!VFZB?NC4H~~N?B*&$+*SE+b)e&`41sY<;B;CSn2tpX` zHjGNunP=L-rT8D1re9?Oe%{6~ZupUNeucKF*vJx@##Px7O!t3pr}sBxU;U0y#~{4d zcF2jghJ=jY0rN{tys9AQVbSn#3}Y*5c5@-$A9pHn(qINC^Z^SWK%BET`2GI_)mdy0 zeGgOs=^xsEjKxhekLQi7&G>iUkx6XcG~VP3kk|XW$TH@uj{L|MU>z8~Me><Hi8@p zP#vfmDF_jVF3_~F<-!NO)coj$&UQaYmjTGQOHURd&S%bmaAuVyeb!5P88aKZUpKdP zmjU2$jOTvs2`@&R?I)b`(FO-Mer3VU_zi*tejOhynikCFJJ2`H{R(vlzy&zqpL-e!qVqI(d~I#F?^JE zYL$nta8SF}l}_M_jsWGGFSe>}icI68H%DK4>rF1biWm8DHOO?T=vmFfzZ{(iXiru6 zLpz~U{k)}!ZEyvSp1slASmbx8FAl>OXkSn=sb>AGiJZ6cp!tZ~Nqg^!9!&yd ziXBu1rdb8|Bwy%5!p8z|ot<+f@&R347`|JM2rN0QkB$c}p75GF=n%r-#0@n0JB#*6 zT#!`XzrP)@1dTZ~$rOfMp=4Cn(bwaCWBSB~k?DFyS?1t>wpHX@pK}2|bVHfqXM)Svd>6{$Nv~k`gWIX+gPrmv zIDX}XVBtHlSu*)Dc!>;xp8SXgje&!GeM-3m{H+{LuO^IU z`s`a?&axRsgf}0GV6vRV7P^{;JW&6e!-ke;?rk?_UoQt2L-0^Ml}Cnu8a%Rd-B(9B z_Zug(V#h&(HTJX8f0&E}tk{Pq^SZdc1uY$)d0~nrIPzcEA0y_CkuQh=RG!=p6Yfat zH$=%_KF#zO{wmCC70ocU6+iLn)Zp+Z*zQ@?agJ^?RF)j0R$b`wgI2Z@^Wnf1`upEA zP*aCTeIJ&vGWy^`H54V*)u9mxQ?yf;gA2@6;}Z^F#hg_-wPxX_a>|5;aMOu|d`q1f z5_ZGI_9xk}hN>J?EFDY^r~%^N1ClQ7OREnR&jJMqzIfMMI!U-W6>)toMe}O8Bit@A zh96-@?K*NLXM^`2m9umT*3QhjK?c@GFlXSQco2qm1U}lhifv4QOoK_vf!cokV#~Mquz?qwGWS) zKPREm2_CJh`1iG*8xYW>8W#Uhfh&3QRCYy^9ndy{LEF6PVEuh@3vhdh_=r1^);!Kh zqCBE^*I(j#rf0MC;k{-DNTH$W5PSnnE=d^;NSnXDOg`;?EZ)xcnLz0a2iEF=pK14F zc-`{NOWx1*JQr_nes!C(qUKeOOpqLZ5wbGw4#ub-wf!LPHYqDfH~?~pY+i|`xuyb{ zpV`S9zlay?{$nV`w47{gpHRLQ4m2V|*jQ-eiDS7uY`FtCYLFC57OCYgdg-n0W zzEoeed+{Of_Q?wasuErUH{XQR9yH!-CTjU?rzX z2uU|~c)o5luR?#O@!)H%dB!-`85YprZVRdd>;+H*qQ3VLXh+_i2-8{kEIu@izzZ1) zDQrjq9fx-KYW0#0ZN2DcrU$aM#b&YP+V;ttEGY+-aku%Hh5(wlOwmyum`dI8bH1|v zm%cgU9QYa3$g>(JW~|-qXmVo6o7EUGZ&d392?ReU90SW?sTo3DV` zkAW4&s2x6Wh1oZsyOc<$2SN6O@C`U_Lga=UeW zkZ8S<$vbP-GCV1=49s~Yn-)l!AvUD$)(6Gu<+J?BxkrDO%Fi!-8Q*As8j9EU3K_M zTR-RiMx&%Uh#K$=UFsUQ@Xz0Il41HYxFoDCQ{$_n$tn||bMiJiAu;e$VaDpz%KVp4 z;;fU?mea|Rjt(HTyZ?d_LVRp;1Q&J>h}=BjY)y8(5SoP##Bf|m;U;u}PQHU@(}RW> zl9x_Mr?CRMp)WBV)^cp4cZs_$FgSLLp&1tFGe8Fj%T1Q76rKc3;*>V;W{?>>Tu<*E zfl0QpdnOUenQLWH?jTiR^xy`V0h$a_`w-Lbu<>h_D+_h z>l6#+p|n8Culus-xa86D1Q6^u0XgJAu`+T@CZ{dtfK3Z%jCe zI^r^&VdE14zF+=cCDQlqWDIF81a&EEX1`Ydl#|fe-D9QcD}jCo(?L6XBx%E-Z`-ye5uATohWDI5vqED9?p%$M zM)L&y(Y#yESztUFE`#E?t_VTjd%=0?Wa}6lpP^m!sPUVz0Xr{iLgh_7 z&U2MX`tyY8&a-)|d}^A@PNBG6eA)aw7pZt7*?!(h2ZL!dx%I4Fy3DBDc!>RH%1RIZ zP0)?Du^7$QK{eMnb2C}eKW+4@{mc{)x&Gvy26!oWZyF8G+sBQiePW28X}_y0uC#BB;it5b zH}2m!e$f1Q6P$xI?_w&6EeHyI!C)oQ}7Ya+za;+WuDzhO(0)R{URl+gWnIzE4R~+acgVf zg0KME6eu}(>}MK~&R$)JyBvJkrR&V83~72M9kFqw&OFJjK>gi8ND2>irq2&}6np3ZCGz4)^YBR~e!jM3a?HY& z_{GA#^@0f>;Y9>=PizKxOdd+`nh<$H=qWsuzi_?SholDX6)0a_HQkf;#V6ZqRZAYK z3%z~v30wjDY-yB13X@1B3)5-G`KIe!GxfhG4UDTDZ`;e& zv-WT4?P+rQ?T@@_{XV#*y@jR(p7+?IQwW*>VB&yVZsIC=l``+55H z;Xzwq$$;t(M=9P0j0gNaV=D2RF%ms6GDfdE03R5cFYv2oZr+nV$QIP$ON7yW!K{JL zritqnFtXqRgW^rHY*$YSE>rrhxzc;%PXi%I*5QS$LgjfPa&M8c^~<*I3cXo4q_6h`?{2d`8(FRC%yW+&mLe(n$G7Cei%}X59F?ud>xMm)!uUWlvi>^3}`1F`axjb57B$o)vPU0 z0&>tvZ|gP=r)!iiMP|8x^7DWFpZ~vq|9+qT_~*a=g-gl0!B$dfxEYLiVF3QPHvkvx zRqrq7yXD;F^`5lbdKF++?)&@Fmjn{G{!IOLiwg(onCEcAg-2YDJ%w*DVX{4K0~3Qx zepqEH3YgZe({kXK%h?8QJV@<5VclHu@?wLucR=(YVhJ&|u6GFWVq5(=4naC+aNu|L z6=p3ZEG{J-_?3t$vJ#x>7?PzAc(=P4d`xQ#Xu~#oAkP5VieOb66JXKJ0WC~1qRPkM z6)yjV7=nL+f26HmiPQVOIrMrQ^0)X0y3~{d2hIifc_XB|_4))yA+JA_n}k;Q z>IEjBn9Ta}MfIXCn26M5)-QdZ(&Lh!_(|1;oQtg2)V_5%AA7a-&@48ueLf6FKiqQU zA4?a-x9vpVB-cW1MOL|_B+!1h($DKj;qrke%=Gu~|C;n3KM{RR{D(fYtUr=0hLm>N z`q0~JrHTazX?00LE`4T_$>;z~f4@4D@FW*-wZT;%YX2w<3%_)mrGCdBv{RqFZ%XKR zG%jA9Bt+EquXng56&r8~{jwxK;r_nwCGw(UfPKegMVXqyY;&l860q6R8JmR3H6+-5 zcHleZLAr-`A;nTS734+Zm*k0-_47C=&mI@~N*OYACLmkJvG7r-v9(+mZ3hhhAL74vJti;LjeT)@~7ZHp5xOFyY|5-_!6#JmlZTS08 z$?gBj0L=%8PTHfk&#rfD-Ckq!<@x7DPGXm>rsItyi8QL-I*`xE3T3{GV$>KCUih@KB_O!hEN>_my$MORW-CVe4K+EClS*4-zz+}d+>6C7^{ zO>P*1SH9vwJ{}#&rghZM>HNX-UBz+wkN?VlxsHhU-MlTKA*2X(BqQY$8z<3)s(V?P_=4X-Q-+>)AH%N`7$6ZT3D~pS2ye$-tdJgp}+1a}7yWw9#R|0YMI%Rb7^6GsFJK{j2OwRMjg*gMr<_ zk3st3pC$$XOFHC|g~;Fe&16HvI6U@p&(IXa0Ss6fFedC(u!cjwvXgS7U4VY2l6*j1(D!2lJN>)J#-e_cLuzWdVSJ_~6e0YwLl|$cL5D zXSbdG>KM=BAWp+VlXKzIW0UFwMvmkAc2GLvpiU*>48GG><@m9&E7@~DzjNsy!g$*H z0V^Y)bX{xe<3%1%#AW|LxcwJSl$rB__r*R&ubMZ0mdeI&{8_TR1rm|VwrMXIS31#aM z0&F#N7QGT!>j9@<406ADYM$`EO?0GUB}sx6m?uUr)ZTWi6dAa-a3h5adA6mjrZsVc zG3gZExl9!2Syd4Qr>G{ZAWV7W@rSn)Z~Py~Os)`jq45J*VUXep0GLgHp_RC39yq$? zQ?)eVkS!@w8wm0DbqjVsYFT}shYLRquv9FnyN)oreN>LF^lzz()bMY?UDu*Z!`sLu zqa@6kXh`x}n`uQX-5CM=g-g;dMyC@Nu8+?W{>A2fU*x)P^re&myih{VsX33Lihh>f zG(Cy6*ZEaKYP8O zFZce!%jN| zEr(O&xp}w-7lUUNy|>q*tOx zTAudP@6301n4vmtJ^jl)z)huLmec6%5|83om2{9Yv@|T4StiW3Z&ILJCy-h`^$FW7 zAe{9b45Ti5lxw!R|H1?2uvvEu>{xi}%rFVmpcgXp<^#Rc4g=8N&y&yaC5CSd2D|)E z@Q!x@aG1s{sy9!q2Ze$?Nb&3lOWL?u71~t&wg|Za)DFsN3&gwS$*{cdjriQ6Mz6 z?JzOZD=8S*&l^pW$&)8=CC4B(#8oKg`>Pw_t10$hucWY*HifwHyJR@Qd@h@cTxXfU z^g(&mc+a7zg3DvLF?nO~=KhgUE;$U`@xfvG5@WY5FX|a-4jEIHJQBEUDlrVPgvroM zf<_8Kxv37AE`@w2^?CS}E>oqY+kZ-zV!W4}IA_^i!>5`w5|ERvLudmobZ!?};WGc}d@qgMjz{ z8l1HD4&{l9d8VheiULKeevS;D7kwbT!}ER?u*C1Q`c-GwiCLO&G^@m>q&@5Qb?e8- zFn4+1pc^`96Os0tMS6?pM-%*Y<#5S|#9~~dl&W7Lc)omsvT6OZ$vJ8!w9ouL=`;G; z>?DDcD`L)u6}0~}y(}I!jLaExnI7q_;I=i#Ppb(6AKPJ92%N^x ze1!PBiRCsUFGmZFPfk^pJXidbGk`gFV_V?X4SK)vr(HMNZ+81E`(F|N{=KdV#OGfZ zOwk4ZD6`=nupMi@DaHEn3ODcjiT8W+O$5>+_i!|dLllDCTpyi_WR$o1kI)nM?5RNI-a=GpF>X1 zIBxFSc0tsOkdkiRlQwMZS?U=2w-R=bU56QSh>Re!p95RlSv+|JrxeHW4H(2346hqb z@LM_JgBj8s)nJ6OBdRSx@2E1U>mn;PF6bh#PNqP-&2L@Y}jcT0`K{=tA!GAS?vp z9Xv6Jp8=z+PN2Q%@TV&`EDpaz`1({b;@~U+7$k^`rm3$rffJ@*hp$HuJMq_tcj~zZ zjR@Noc;&qHP{{{7SXZ1oK~V#iH3MV#FP?T{WB4DglibP_43MGxsg70oP+aBe36S(g`U|R$=(7GRxQGk;}bTFnpFAGhYtWLxde8Ea`pWt!U?Jn8UdaXF%k;aU`uhmXfcB9s50iU3Pp4in zb&~&u?->TwT7xJbI>9IVuM578CzQs%lf8bSc^1M`)=&6&MP&n_>k6l4Y=J=}t)|O; zfd$3QXPt&&9roSaTFlb9Y!yONtFQMZf}_$J=|MA`A9~Pjk>1rX8j*sZwwYM+V`8E2 z>lPJyDovnLw`bh^!IZvNXAshv^OUL1XtX|qXAJtOZil!`oyJUHnP|6+R14B_27SRK z-tRZJHlIWu8~#$C!iU35U`?6`G4M~q5qDjJ;l>paOa_o2vG}2|M@IT=AuV6?R zZ;>KJXLOI{!(ajzA7l$q`)*h(Z#bgpW>PMpV~V$`x!9SQH+G=L&Z&60Ez!14Kd*1y z;;N;@D?eXwZ)kpqZusw!*KgnPKV=0+{+GN#F-Bx02ufmM1|oUGrcN)KJ8*w}9`ntBM+Q@Y zIaC#@n}uk|QooVO>bQG$5rV63ub}OD{Y5%@kfC(Xpz_Q6-Tt{gbk_lMK^|}=4igN` zuV)30ZL>N6Ir#L4fky|fGqZ>jnzMckE}hKbHWn;7v`%Rq%BX{H9mKbe%u0xGJu%pJ z{|u^?$K(m1Th~nQsvKqH!6*N^oS$9LiKu>ah92bl{at+0<^D_zu>I!W7j_49O?xsJ zeaa5Bf1#eT-Jim-mH(;ho?VzXeI(^#XEMxch=wVNj36&U7&^R$>mLV^1vf;udIrCo z4`IMp0l?+g=h5^VTU4GQJpQR~`elWqx}tcm1Ver6fvH1Vs{Fie$v;E5EIwaQO^Lu}|rq}3BA zoNQ=4h>`K|dElG|LUlg@w^?3u)m54-A$&ACg1BuxY#x1Kgg%SG%@Q;S*QGDsRU`M| z$=fGTTE}KZ&qMUtJGgm_>Hj~{cb@Vy-yg(L49SH8Ukc)&R768MY_zN=n5m*d^ z9Twl%V=?+>(Li3UOXLRT2 zgz9OqPVV+8pAOj!)7lvmXvEST@@n2{BTq=so6e>;hE57M_Hp?UEh&ynT9tc4 z8|0qcY=&J4h>zpgn)M}JwmFP`N)%%Jl%(6>8mlc+Oi^q4q(Ku|dj9+4GxBX)&1q*# z5sRMGO1Er=R@cY2GpJo+*Ug*0K}G9heg0u)nnF&4}B)zm%cz#K$ z?@v1%b#iKCsfcLC4yGUXr(I8)PSY8OfTe?PQex3*2AX;4{d8ifWpk>81_2tFE?uBl zay?7O_a@a6E3A_9yz$g;&IUI=YPcjOgoc^vlCI)gCRQ7Yw#Xe&nFYBZzD?goLgU_n z`{F}Y4ryn92ICOZ>PB;66?j<*!X;0ixOp2dSXA0T1^%%@V`&xKnSjbV;8$PCz?=O9HH;VnJ+wx`M6@;V?|I_5Fe0_>RN^|=H0T=;eg zPlm7^f7=0rDPI{=^@Il}_z&u~;QORr$Hj}YatD%(%1LClT+b?;lW3Ub>alr88`K$Z z)%E#qKST8!dU+;854TU@A3PV&C_h~C)4yD0xs5OxXa;rvS@?J`>}{xQS{6O9II5wE z$M$h$3%K>mUK1<6X;yt?+r7}3X*zWs)+w|M%{`cpG`;eKNDYugZ`%*_z;N&tJ9|s4 zjK7t(0JjI1StlNV{pwm2&FxdRZ$IEahsM5_qHB5$tb`2VZ~+62ZjR3y_ZTqKQ>E}a=#!`IK|f7@P(0~D0eLtB9MMTW>M>U1 z?4(Pi0`$B z5<_(|W?&}SLH;&xX&;ur5x%!Ae}7&B>4ts!&@^4I8FsVHRIg>!dL4pDP7o zc$#kOf;Oq89zczJsz^D!Fx)=xW&W-qX~kj62Y0NwQ%pm1d4wGbnqW(TXjDXv0KP*aM%p%gvitNv-Pk; zE+4#e*(xMh^-ky!?7zU9`n^t0sGKz*d|K9V=tg$(#OsB?>o!xjH>`^^+J8u!Y%A$kHQ7`$^4Cd= zeFR@2ibzRl6m1zRF_-M0Y0p+fLj6yz9Kk zsrgd0Yhpmlw_bmJ5tdxrFD~BoKjiXU)ss>b0KtvCSlUb zrQnUhJuck80r5xiz{O*$^IJX$vsq^91q_*f_f zkHSm!$au1JY_J4uxH_gv<>~_1{8SzY~co-!;3vq=$M2;=3QoH`?H;9@_QoaRg0l=4K{8)nl8sa@p8>TWa+K)pa$W#_b?gAh=ip5bFDr-f~LT&8ST&o zZ@@DfA+pj%Z9$lT&>c0(Cjh za2&@ja1Y$iV7TA}`8xabg+qFNK-)w={{i8hWyCr-S11gqwqCcb{{#nwHdu$#Ks+!3 zQq%H8rBQyL*^0c9X*u|?{{YS)kL66~ahJHwkZAYq^Lxdu^=htrYBm$P8jDws(0%7z|I_X@6%#1Z-8_OSm_ba7U0BynyT zA3c);PZte4h#Q#(Cb`w}vxHGN57gc+9%Y(5Sw9Vj?xZHc6oh~IubH3_-A%>G&jE^t z3H5O-ul)h4{LEMuZzmad1VG;%m_vHc=Ob_g=eqaUvyxl;>vS9Ix?g?4@t?@N^|M|* zXvvz@H#D97Z^*+pJf~@J?tRO}$^w{4n2;do`=#Rw=#znU4yXK7l7Tui1?Fektzktp zKSIU>G4~?aE-7;OW?Sm&!Gy-Z@9|)brv)05B=yFR3AYVqVUuMemY{Kc9~4WjDU)WJ zhUkAIAEQC-!fpuF$Nkoprp6zDzSdUIE_zaYfe2|UMl(fdJMEP|{nFlX;1H_dzB4dG zUy5FC3cvpbmc9u>y`m=6rzZ9}cMxCQ{dEVcA$rI*RA&=cJox+j)3}VLz$__VnEbs| zizQAJa9}B=p;8703$hYR$GuJZgX3>Sa-gM!!wcOy7jzmegH)svu2=^@vTe~=34lF? zO@C>`3QlEPseJo@38vO5mtQDugG#zheXr$Ak4{ znXK`W2*McDr)M7)$(s4q1svo2ad+Y!{9NT!$ z5A0=j4@iNnZkYT$C!QY$TEH=~bvn+NAYAV%@e>r#;5-LX3XOiCCa$2oZ6}1o?hfG2YP zYxPDyf7bo1fH|r|3z3)Fo^BWG|DMvN4hX+8&MIR*@H2tiIdcWhXrw1QN||P5MJVrb zC7S}_j{RDxFmGk)8CYPpUW{Idu4sV!46V1^51K0b!buK8``!<^h6j^}w$CK3$m1>Z zYGZgF9?UIYIrSrLMFUKxj(1F-mh3Z{O^@sQ=~q}!gYqX5J889pcKe+<{nT4<-{qU9 zgG2K)MHft0K-*Ox1Ja4=v*_DcZoY#uNa?4^A1|NF=M4Tju91D(tp|ZHAESN+^E;-F zC8$Lf8Z09vSqb`xm=eO1)NzE4FGewp-;`xHn5Mgi_nM^P=mHoYyz0`&NmNtt zjYkSlGHSK?5}Hr4Gp24@8yJ7Eb3ZJla?#w2+l!jwOG{0@}fLlE~itZaRM+j$m@Ture5Y_P=p+-RSAd`7_y{T7_M-F~)d z99qTU*!2r7q4gxqukE>ZInB~er~?43U%PY=ix<-w$n|BIxjSLQ{S~Ir^B-MYuZdl- z{qsh=Jo`TXL!s2L@};UVKNr|l?;n-dKjWD42KOiPf9q{W+=H8`pCfDSPEsqaOtrTE zRh4!Ql5p6|80i!wWX^Z_s_b`u`Mon~Fj+|z&x$t3tA6F8B-&Cycso_#j2c){CBQQe;bKoH` z6?RCSIouNg-IM%X88Lin*g(iqKuu-_ZawBRFbKBxWnj|*C&KWvATP+{6CAh9bIyfO zX-p6=it&IUJrh^qe9D~qhKtf(O%b=^kI~327T+1v!GEnRDD(hLSilDK@j{PTQq8^} zI?G}*r=IHqeQW=oHkV#1U-&vyfP(=UOeo*W=9&n_<3KFjMt5Y}O)Q*^&y9x%L8yAy z>YEVx#j?BN<0Ivm#QKoO@%0F3$I7!Bnop{8OD2d}9r0ugf3^)UF(LLp-fsok*7m!s zD6^M);MSVPcM><%vFNL6hqsDz+uZ1ze4`Wj3B1_69WttThbDU{8{*2oa0hK%jYJ$C zf)Sfu{)M6|8NguZRIw&2vY^iNS zwo7%rZwNZMr-XzlL?HT0>||zAZp%D9U}7>~+4KVBf*(w3^rX@og9eg)lMcSgtF&hU z!8s+FFt;jks%;3I8KYI^U{;$HzSY{fJAF}LnHpjLKK|tJs3D%;4_*%^&E|>nJL^^_ z?0C=Y|8iF`e8rM8v65{)NeW@INp@IJPKS(Lxh)d;$nZb4b38sG+CPMqbNwErfX(d9 zeZfcgV0HIL%ULt3tGWLAw(ut2p5ty?W8T?LB5k}Rbdre99d3^oxzqfdFNTklpO3!E zwea`|O(}Y%+gr+~Tf0IrlX|=}4;N2kcmv#W4u^c{(M$Oh9dlt^>O?&jy~@1t1~kFp zIBgv5hUwvAg2JB+b>MEJ1r(Pqy29cnu|cC@p5ucK?-`Wf^<(O~bSM5Od=KDOAc-LW-JR~e)}e`^sx#+h zC?1K+q}W1rP*Gbf=1JHu^=HqEIe86$)Ci4BC&QSMT&AB1I}8&o?LH^q2tx;(L&<-V z4;edfc#%W3`a}%2lwm?6=n#b4vEKL-*QpoUji2itwDwyBxJAGd77c5HfWRx?+LtJu zU!LorrB-U3L_*o}D}Q7#9L-Ok1wG5&mF|>s3P-;|8iV{8{JTuJ(Q8m)=MIDfouXNf z(knDJoV_JOx6NokJI`y`hRz-{Nw9fHspu9JU1>!3mVAA$)lb7W1phAE#;n@|02mzN zl=26=@4+a2x22@@TSKaEfV6N2|vzkQtE6=R_>ffi<=hB^)*w9)1TZHP7 z2Hqbq2^hmmU!{|VgT4g_HD1thgKnRlelmr};cy?4Sb=N(KkRY^ zRO{(jsZsuGdY#72la{BAC#f7qMq%v_cGgX3U(&(0^HBr?RuhSmT zQChAr?nJqg!kHsa7EQpHgvP!d2EL>8x>{DaxSgp%o4b7_%45*W@^?u210d`_B zT)Vo4w$a;F31`{o(j$F)#!S2l?0DsF>1+8eUlAS)KW)7JNx%|p7Hh?>0Mn5-T&{Mq zI|!+}iKN7K@3*WF8T?ZKE`(#FsyuWZoHiS$ z0jta@-6`G6jYG>gfnG%=l62gZ4zqXR$qax}_>imq+cTjdmOYHGVn5zo{r8j$hvkBD zc=$`H`&lZIT3|hUt^am2Z)JTc{AOk&dgGf5n28fLTp+Yus41uGAi68ecLQozHTW3$ zFFl@RPHcssq^#Owf`gE7)JRJb;u*k{<1O;e_v@U%!FS|J93d-ShF{jGUgosdS!YaJ zx>#<}*!nE8X~}ammT- zLVWKzW8>(d4YIraY_wk1roxjUE|caVS9ZY5R)6`#($AIfYrah)4C;qDfV>hj=`ywN zNl^9k&-4*{l|$4&THnS6qW|-%=-~zbg~>^fG+jNv^ZLGFLFtix7=XR9Ho)HV%X67Y zZNJT-Z`625dVAHAFN_fWI$xa*et%n(Zp3++azBRZ4q!ZakV5+1hWft#Ccl3B+7Gzo z1d}WqT@ky}!PpnC(EI9bmQhG@rawK2)q3YB=6pG%ZaSc!x^xCElN** z&jqtB*NL}};!D=Fq|S{a-&-~QW4FwUh7f^v>2` zFWs~mqG}-0&0n*T_W&jAE5#l@%b<0p!d}m`9Px2ST@J9Blq}>UjIo{c;=lSl{#4my zziS=YqlE^q)uo5JUPUIf4;vL0M$Mq8Z_ zgUZje*6kemc7r<*tBxl;Dbl*EZz*XSjIV;PCNogM=HO;HW6q#(xw-ZAN)inkbwEyD zp>$S~Wr(5s%U{t4&Um-%KkylT2J)RinpgNj{fqjIFgl}oZSDGjkPy7+2=%Z@2CQ91 z&*C`$evDuJ?0Y{x5+IWHwzH=7>leO7KEvk@3M>f|F))5wZ-fVqxGr^s0?E2k4 z<)nIVa!1OWRY=>jeC{cK%C_%PSi}c2D;-ki5qa(v7KsIKl0e#iP8;1PJyP}=JAF&? zIB#ildGY<1z7tedxkuK_;eqTfKJw2s*>9W3KwOJ887-hnAzA!WYZSsLpdC{13 zw#dCSz>QbnYU-`cO@9as&_A_b`ToxT43UeA?!ku!t%FF!=)=Ry&=lj_R zDDa-O^0JyxID5n#m#>|D1m1<4sbs9GZuS>jz4VZb{2J449jK~iWlGeAFpRBvuIubkd*3iS1Bsq&=&%xy)>E%sN9kh7XO;cfV@u zeJM@C2aliXq}yp`;rKga_K9PEpOO}r)y2?%W|w02#(spMsu8U!P2(KJRri}WpYk~$ z5zeP&7HM?rz_20Sda5bAG+qD5YtJ~)ESioc2)_$ns6FS)GvY=&O(_ex!vP&-k_s7$ z8PIm*&lDnQC;d_OnPUYv{4ebBwF$Rm<+W;T+x87>0*&Z8IXZZ5eMXmpngg+3Z$Cc< ztDnV44GZstp0H1R9A9fEi&v9a`Kzsb!IQt^4K`9>QwFvgV&1{Xghcka3f4y9mMKY< zf|s~xyo2`jy!jfWvy)>_;~d0s5|+}o(bIfac_V!#gYgxWz&O0oGanka=q4LSfqh~y zeRIeu!-SV6UHQxp-xa*$!v%T{0i^C*v8Nk^!^!|bO1kA>noW)pq%UWgM2t^?}HXEvoRsLZegB$1i zyhRF@Y_OGvLE1N;AiPGw)(ioEhtM5hLbc1l619-zdM?;Xiz-j!J$_etIuLRM{QcFd z)|6-A^pVJQ52WS5d(LwLEk2F@+xb+HRME)u%=ia`EyJsA-L{E!@JT!Q1EC zA3pJoiDrdk6+Od}II%s<7&fAYhvUDBHT>`A0c~krzrqN)rF=NgvUHSO4zC|9YuEeP zb^peJ<)6D=?37~+F2|K>8;{7Q>8sv3z5SE?Y)c4vwywuWgh%$AcrnSf>%Nq)HyFmx z^Z(@v4%6DYp<}6ebQShznoux!Z`a=3dzBQ}AQ69n40Q^bSnPx!#1r0r5?F}}J&5gR zGL{-)a3KW;k^I%Li#Lc#SWIh0o6Qasj?as|cN?S!o+#+{$J2&AF}w_JN-)Z7c~seN zyRY&s{z{*)RkW|n1e1JYiS#kBWXY!&X=zbAgsT#s0@#o4$Wc)haV_i)lVdj&_2Lp$^I z6(+qryJs4Q$BRZHWFf z4#~e~@kUoTL1dy^d|J-)b`|hdx$&}cz!M8O_}g}xD4K&ZY9qJt zk`US&e(NFwe_u(Y{N%R=$(s1V(%=26;b-KYqCep}J$6?zOMnMaiq6T*m%qv8ujGah zkIh>t73sED*E4>nxfV1#56CUv8^-Ql7#6CgvMV&g}66MCQ>r zRhib65Z?g?#$V`Z9Y1mXws!!f;LIL85Vm4i>o$L5XybT+1aa zf*WQ>eIv1$D?d}^JZiIP*!EbBD}SarHHL%;2(G-rufl<%4=!A2{BzZxHnnfYOFQ+? z1a(S_*cIS#Oox`dFeWv2gt4a}UaA5HYvG&!t8zzA9iYmi+1VDNn5XEC+#9;n=!@2^ z1*4N2>TO&l8|LqikD8f(zv+T0yWSopM@~P0|MqXZ^?(^SV4XJ3S1$V}6<*!gM!3uC z{Wsb!oZi0k6+gcJ`o)k;7t)mTP4m?CO{YAk9xG@nT}tiguuUdtR5`)NITX@%C#ztNbC}yFQU(QpB*fI-`Zn|KG=-547Vy@{H<7tJ_~jH7gF59d#f% z2T#^AOvQzeI@`1FM}xX9s{oo!2Y1czfhi-9uQ!9CEyL-XhaMl5TGpcap2 z`$s>ET19}woDVXc5T>)!0skZTj4UEXaTL$NwP#l1e%^mGj}Y2U4E(3C*96Ak)IoH_ zf?GD7O;?y5b-mwbeXVa)aK5MAAK97xh1VICRyZ+1HMb$b5?6=kp4iX?1o^If?qEEv zYyh4hX&j?rfxM}tAhY$$x0Ec4sgq2A>Kw4}tK`EAEzkOW{LBaYJPOr8$i1CB)zve4 z|KO4)d+NFJQ*^)Ol>9ylxBZZRcA_${UfC)5I}WWoG4L;+my}um%R~btxXq;(?IWqB z{1h*v6G6%+^5*o3!hWdVa(pAH&ppndd|WPo%a1T0d%hDO{Y-Vm`AhOl_SGlk=sJW( z@uw+UTeG`lUrjeSPrDaeOSBCqrEgyLr1z3K*!T5&=-TaxUs5$Y0sDp`wP$r-=}4^p zS@33C0!8qRtrOOdh13sA#JR4NFhAidWEwu-O zPu3W`lRadWuq76cm~hz1tTTC-95=-yoFFdJO#M-jLYoV=x!FU!Wa=t8Ci>zjF=Z(| zYv%=!dZ!ARhi@Z|-$V~plM}3P_+(iaqyzY z^&Lvk`ZIl=gPab|o$(Cg*DN3sMwNl4ORATMzxjiqQ2F@1QP_@cW;sJT(3Eh4QEjvSn;eKP8wCO?hZ2x>UFaX2bQw8m&3LsRKPp zhy|c~`$A}vt%~RQl9$8r*A+HiVe~YuVQ@H*NbE!d9TEvueSaHZa)LJ>auP zJq+3Jy`N4pG}Ef{>oW>^7W1s4IMjy9;c^ru^QaXhs!#Pj!CmVM!Uop5oP78%_N06I zzqmELP+7*{y^{{;ftU>BxC%xC&mbPCM9y~=#~p;XZFbOj$!qxLfy=ZH4|<2sA~UTs z*THh!I-rS`;saoE>cG9*IlS6cUP1@7H;^Ha`3fG1#@-jFhSW=$u3;Vs%a67b154X~`}A0F#)LxCJcr66eSD`EDue7XVYIT0 zymYHMC(^?B_r3b~7^;Ex*b~xDl6dslC=I&b2=;v(EW1Z{Oc6#5N#1%(Dn8QQq(m?6><5Ci3tRBA;yUZ_eiHj=j6#xLcFgLASnY!$6yQppJ7 zm@*8@`A$tnRJG(LWQRG#D?NGkpKm%eM%;Cq7&GvT0*u}^#VIh_4kgK;)6f?0bj6SG z@=X_JtK;Xct2mF-_a1I*?zLJicRP|8E%4_yw^q;g@*v+e(2YGw-+LtkI?spkxOao-m&eTsrn7dg}*ZZpzeK-vXZ5n+HS1B?QtCP9)K`l z`Th#UwaUfYV8es8aTIw5^)4HAQdsxH27;{%-B6UFr%=;)&8))02@*^^OV(ZCTPN67 z2e*g{cFO^_olKxJSj52HJfG#@@$7CBM8ks;KnJ`{OTlSe!NGImHW-aQRkGs))8{@A z^_!fKfG&*2#vgoTUlg_JuaiCY8PGQ^*pk&0-p5JKeak(v6{r+3#Iiil^JlbO4SprC z2oIp5;PZ8;9T+9s4fO-Uiw-DXf|&{a0t|*n5})DIkJ??x3W~tAy94>(^16+u8`dob z&TC0(l)f>DKQJ`ep<5)hU0p%)^q@<5S$c7j2lN@5FmXODeyvgGH4GgZ`G^;F6+?=mgT%tGx7f zWYXmlSF%Bql$0;OjbA0*i1)2ir;hsc4|y{8 zL#_s-WXgl-nR6wNl0H!De{v-X8nbCrZMn537<4Nip*AA8HAAOM-W&_5)5xm6l3}v} zIF-l171#m{SiAaHSLBU>b1#Q7VI}53wU@_w<9h}}rs;VKPOT;9);^y~L8bMH)UO?1 zl&$mx*H}*294JlwvMixRD#*_fh%Qr)1$<=Vu&-oKl}qDUc-wmiMLVXZ?aFwD$URAmH?TjG->R3B4q?pjY9x^|{OCr$-8vCH(13)7|yDuI`o2=Yz`;!(ou znHzmugvn6qO<<6RwlgR{vzJZFSU@4(-19;Box%&HY%wg>J$wCG@VjOENJleo^B_aM zofi23SO6^;H#O8D>V^#@BV{%e44SJzZ}o_&AYMWYm%rnM2f_BBdi=<5!H0$^{K=Z_ zVes1qOg&Ey5@Xp*Y+2>vcMsYN;|S=%Zvm|zfOwzg-GjXkn*qC)J2c(FD5h*qndg;n zT8D6YtH})5Ao?$V`#g#cs*MlLqw4(o&LpS;wUQ@CKN9)c7G)TVmnnKD=RdTpMDJ#m z%sj)aB;s3R!rDA~5R`q>S@{37UDWSM)P=6-$l1b2Th5WwgPXsTs8U-Cd1FVa?j-yi z7Wzs(FjCt*6%$-Bf|V3h`bo!066pl>F z=+M#Snn{ms6G9`@CwW_HD~*To3Zf@C`rNaG$M<{|42Kg7mM1$f0sY7`u@!3yZyxNx z7~PjifAUCK@*CDS5_SNoG7(u-VV(I@zF3kCumBVdTj~u@O#IXv=cj+hey(JS(-Ijs zjC|Lr9(z49K}H)3;}x|1vi-F2Tp%pqS#-~sMs(4(4S2bcS&e(C&Uqa`er$pu8gEVZ zYtrHO^Qr8{V3{8mKOtQoUFq{3i+^%J_hbk*m}KMKe>eYIcg7xjH8j*8R-ab9$$8~y zqn%egI;)}^fz6|8_q=iE;e#Lyq}o4jJ25?0$dGVNbp{nDh4I7?@5(Q?`+_ShNJog{ z%GpYaWpCTg8)l4;OO@4mV&$8L9_wqeDiqmG-vrgmPC}j|*Y|BxZ=d1wm#?8lj?u_W zvr(PebXEVr&$|(a3AyL90`^FdGFhhZa@eu>L>ApTb$FcM`HeYlAvc->ckAmf-ns&% zXudvT2&zOMI}!6=x}sG88Y<`BM;M|G?NXGg+t1%VJ6rRIvof4i`SK6LQ`F0eQ2sfF zb>XrzK;rD=CRE{bw@0ShDuF4ScfufE?wJFtZ|Y=P!z$MhWXACG^50MslB@_U06vXD z-NV$67@aa5)vCY*w(1Z9Yehn?TFM){mzQI29K+p~Ul&79e8Uo_!%yV|AdY5LCmvf( z3|9zkYIsL6FOK@$o+D7C3E&;T)bGU4v{kqZ zu@iJ8uQ7FXAP~?kB_SPA|D*K}|8rK;G|{6w!C;n$iGl|}wjAo;@9at+LMZ*r9l#uX z4otp;RkkCW;uX)Jh*E`(d*L>GZCvF(66P1c!3ALj z_8BfstJ2O@A)*h#AeCE1xJqNg{PGB%^n0U8I-0@x5dp>UENx~HqW?Ne*$Ib9kZCf) zbU}lSSp1N`Ab&Jyog|##a+IYyUs-7a(?!8maack7Syfc{B=w8Bu=%KP(&ZkM$qxFM z)H$mh-V!BmJeefP*gWkd#GgkcKyhP-Lx7eUMFu`%&0uV=ap zMa2g%PyAxaHdL*5o-rsv**_8vqxoW!s2g_~Ka}j1mJjl>2Z9d)OM0`*YK4H|-)~UU zt?arzM&Hz?_^Q912^tYopY!#)tY5g-bWgd~NwGKdSOtyy9`DDc+ul~J@AW*jTn_Fx zsvQJZERc8s5;`cfL_wR4L-}!+Ch&}&7+KIR-Qs(Npy8$R zw|l|%@^hEhWbX5z>qw7Zv2~oPHrgN#$lX=RKY6ureAV@ z8(4@F`SUXh+J+RauH*6QXOdMqs7d)vCmSrMyoPpmr_B~?2;GXuR3Mkhb^ ztj4HPb|-TO{m50;j3u-Mfl5R=C|tMiEI-&m>pg2m;6DW;E*nWjbm)!?eoPW1Z1w}! z-y=AOAnoO{?)gCFd4bQ4NbAR1r52?IIVN-9x^P3l%>Z_SacakDHyLCpAG(7Sy`BzK z5;H?5L{E)RI?xJx=7BK-PE@DFL0;Tv1qi?OwSAA9yDa;bw-f|B^1Zdg-$YRD|L5XI z1i|epSizxgl?crKa?y)E$gpkwz{t@lmECV=xR;XuK+X~ABvYoUkDMV9mb{vS8b=-u zTlJt57#*xk8KehR&^n4dKh1-E)`C5MTJJE)hu_Z+9_WFokosK8e%k**NJ1rD2O&CV zc<73tgU?BTgvsu~{uY>`r(2F4TKE`(? zxXmO)mePsJM_0d`&u5Ypz4{`gwDF`mL_M2BWw>f(o*}STXkhUJpiVb^ zdL4^Ov*7@A1w|*+F!ES^Ns`|>9$*>W(o@e<_ye`cFdFt28!el)@`XB{M&BfsiZ)#- zbM8r-NqxzlJzww+t})|*!NcUxi3Zxr*zycOo%?zy^K21agZECHkU~CxcOrnvi=43n6Dh7k z*8i7mIw7R1A7)ILv@Kg%1(gSzo@X+-ar&Z|3ZYyneC| zqmb8-HB;?X#>L9rKSRK@rc&H)Ok! z)`|sNbWZ7LJpL?CJ)8Ru1V}B@JivnIT*ykqV05o_h^v86zGm7O68N=JjNh*Ct|7rNUe%Z$)=VE;N@S|znfuAM`^%MI-Xf?g#>XHBW(tkhr;GMR8 zZ+}!7QtyQb_^*0zjlEFwzbdB8ZTrSc9Wkyi^k!t<;HLFC6L2XQvd*bfDF6 zh|qfD$`@)9B*a(PrT?|Ag+PgUBd>!QXrI{ zH8T8t{G`*hP}g7p8W4z{bHIM= z?5up?P=O&V6Co|%N80YgOh=Ai{(TW$v#x?;P#${Limf^b@=@D^;MT!5gUSPYCo?oK z>))fRV(cvcOgmw4p23+jr4lTIS@Y2uJhYEe;22&7Uf)VmpH2W+&@X}P4}4&E$|Qqo z3EIY2Vr^^5zE2$b+=~>W_dxR$oWtOxO?@?|Cq^I^BAxAePF&mevfUQ2XWJ)1m6!ee zhz7S@lt$I%d7IDgvq#HxvoCxL2+f$S8X5O$3rzrbn@7GeG7q);&~o1PkxyDcx%E)t zwf(jYDg4p5(HGphnCZ9#R|o-VHcNe_{HfD9<<0)3t*Jl#2<>%zUEcg-GWFJ{ZU4VM z(YKwIUZv<~P(PruL4Wvr4h5aILdpnz1C~B)KkL49#xN0f)(&;C+KQOLs;&S-D((=B zwC&Q3mvId7R6i#ClrhElyMeRD7wPwYgNcvy&6QiY{QikAr0=>eG@%3Qqpav9J4j-* ze|NtZ^PK#P8UI|e4dOiGM{sOMY`xEp)dx2Y5L&uyk9h`$!4({*9E5UNMFa9$%aD$c zz$eB<*GL&Up6MTV(zW!#R!|IT2UppCGZRHc%%RV;2RTXRu;fXOPYc<}vuNjSYtWZsghXDuh)(y|Uxop>WfS4)8y z%zyr%6X>`p1(#%&g!cy)fkdHcnf*ac`hSZ9;}wSyj0SmK?uust8i{zlbo|ca;!6_e zmV^4~*1~fsvh75M;a@x*9F`m>Mz6YJX9E|Drpds|t*7Z~TyXJ#eEt}Y+4`>8MF<_r zQ+>9bPd^ub&}}zDkKY8Y%*iwo7wp%MGU~N_c)5J3oB0lS*ID1pI)fQRHLfoHNz82V zZYtB8A0<+ONW1Bmk?la*x5VItabo2zGgtHNJc-Mz@uUs{1dWwR8@)_cRUNr?G6r@l zR9}ZW$z<&|+&);0dlW%Nbd#}ui+o%UXv~){9~?SqM6hPc&G-ICwpeXGIA|F-NfKvx zrnV;S-LKZ748Aa9*I=nhTBHtwLa+&+5O|ZR)_Qvu9M1N>&F@v18~*+qqF>#yk9@17 z2M9;z-#3*c?{(njxcJ*a6mJ`>NI$O007$vkd>!O<2O1I>f8j)TAhk!m20;A^!9A0! zw1+56({=EQX|L;?^ItwDh=W@eO);76(6$1jBYcf(fZHfISUO9%>s6yeGu!L7xl}$G z+*ZJ%{MA)PItUs3lDrt2;?!#y{GfmDpprmTuF$fb1PQ`Z*>fuk{Xrt@Fw>8`LOM-m z-*S_XI6BcfIeH!B&n%<4Wp9`y#=IsZ0BW!!`JpQJh3ndhQd`>th8JwS)_ZK z6Qdt0UkL1WnzT7jmS_?rivJT>$zUhocD?25$&>o1{}ugs3*g`2EB}4Tw|r-sZpNzn zrCoTo{f^?{D}`t$uE(9kA-v|5>gxe7I;Zr=@WO5L{jYV7eJK0F#z|Lve8EP%B(E0l zI?S|s${r4D1;%_8V;<9*YQ)D1K`C=(SeW+8&2jpogdj;}Gc;7|LNTB@J zOZ$A%Z5MDO`Ge-ydo@1PF?j21mK{4Wil5>rW%5tufcl$L`~xPIb~5AzPPZdtYMori zveyZcggM<$e9z~L_FXI1&X2=@@>h~1`Ek0Wl~a`WeR|4t~^3qRsJ=6sbT;5bRgb!zhLnkX}AE^m4sW;a)atSfD z9Eqy^bj`<5_p;4vof)GZrpy+Rtlrk}$g|!K(|q9@ER+Y;?l`}Xm73t8ZagB}5Znir z$pWXWbe5x|I{tnJaAi_dPzN?tSY(F>K7l;cbHsb_~=P2fV_mX|J~{n zs^8^@J2`}v=$Su=tn_}#SMdXk7U!`h5+DrS9S=m zI)MUDS}`%i>#XgiE{kfZ^(dzjm`q?fW4&NJ2P}fg1j-bmPbHa&Q_}F6WJC&nGEk z?{-oj^lFp`7h@Ek8WTA^{rpYxS*t*_-O_b@s@{i9e97P%dCVcb>hUhYNz-x<`9kNu z-T(#(Df?Fb4Yb>NZa!(59HZS1U2u@^-1KY&)Jw&}r?jPf5w%y_PqS-rUTkV6w-ao& z^=8Q=@A~sw`sEW__1R{@=lG7Z{>MLPFNEN~f3kYG3|{4u?*QI(Cs(6(Ukx!{@b!d5 zT+bm+7p?5EQ={?VOriI`eh0p|J(kc&jYkX9m9mIwVw8}O# z*>NR3n#b9KSu%t10D|iy2a0~{#Tozypn=}N7C9dpsUN!hpSU%Iertx{Q#|R}Q(t=A z?Ndg0vxAqvnE{n;6TU28@g(#!%tw38QfbTVb;6S?|I)i`n-9<}h}t&HX19L2e~3xMG+sB30QC{MWrx850oZDk zP<;D!u&QUCwE4CkUDxS9D=(BEL?8sO?`1SDA^ZgTTo6s@8=nF^#8d|keMX6j9OBm- zf#yM9PX8!&Her!u483i>*Ck8MY)!z04uC5wPFW4f| zq6>>pI#y_%e~fRNA2yz@?~}Yx8HDhr6VuK6p!gaeN$jjv2G)!RR?(wZQQe}HHGE*# z6U3o?V9OoE5nM6Hm0IE8%&0Vtmdx!~`2PF# zd8xd0OYfy$OW+zctJ?h^?EI7@Z2~w4eo9$Cl$JCKk2DEXeaIwMffxMq?IxB&N!h&7 zEg$ojY+Mjk=(Bx0zyn_cT&)l+?F?pO{hQA232?CH%$l`QyPNF14A^Da`os z#)vkJBZ*E>Er1pbs_rGAiSzUjwuno}?Hy6v#?FF+W4 z4Ibe7_(vOtMk!USXKJi(G|B3iKw?F_cVnrJ6SHJ3+6bGsBZ4FP96F=}H8ywRL~vNP zw%$)PK}T7XTT6# z;bL{OI|lygz@%r58vUU$tAq|7;Esty1fdf-{*r+Xm|y@b=>T=gf#GfQB!e>30a){` zzZo=iAv&_*N0c1op6cfLS7wsxHwP-b+dTZ@8=age9~GW7iBT9*s|Sj1DTmFb?tr%1 ze`2aOo&?9haZdcM#?A_dhjK#MIwUB81YMaX`%wKC7*H5fUY))KU0`SY`!_2iIw258 zeoTa%fOlvvT)5VQIxs1K9KSlYp*fndC{q z=m2oH`76Jl#!l@r#=`M+WRT9&1lLPjnke z`&T}gZrpsGb16at<2QL>z6kpi*O~OOw=ei?@ zUU&Z;b+2q=_(kpMRkhT?8(E zr|POG9Ve4_3C6b$ca9erD_A(0?kzcW{3v6+;inZn`u`sbjsK2y-`Z2av2W_n+t|EJ zyg$=I&4h5Lf8nzYJJ$VX+^oKU$lM*AC4I&zBwj{%-WDps@Gt4^tfuX0Ykb zOp0ssT_yyfyikyD=Sv75ZTVvU4z7|#bD=$Ai7|4=yY(z7I~dF66WdWwpq_9#F$R^Z z!^>%p<)+1~0g$k#4}AS*A#-(17Yxv82!Dnj(`mc>ZAHua#Lya(2nZR`nUhdnN!R^k zxKHm{WV!bf_w41g4G+e55K$G_jIR zM!$|;ZvMbz-Msc>h^`K!Up)NyDf==#yksG7Wm>e%w#LqkEFXX4ohA!?rsexNeOV0O z$!F5l+jq?m0GF=`>9ZfWO!%#{^}tP2!ILq?b{oy>hV|_!KJ2GLamxi;0j4LzHoo6& zJNY0qsEZf6hF|*RFvBMTg7zZ#OYRLG2>T} z4idilqQ{o(=3=ggW@{_PoiyHQc!Y?bJlE|g`=f#SB(SorRCS9hzL!aWy*qPC8W=un8jdP)?b^vyq+I-BvoRP4OBE^m%d{89=v(ARwAS0Q*Ok>rQ zkHfF8PnN`0F8n)`1>7MtjuBYB5%C>Z+OvIwku=d-^*_e1ec0Fb&uvAv(2Dil@%f} zO<-gN?;mgwr#3zZw>Co}g&!po)P0m24@^BF>*!$lnjwC$O6pM|qJ!;$XF^LRZwf`~ zgV?U{KQD<<&(Qpx{jxc5@u~|_&tTHtM~wZf{RsHUp|Rwnm8!(h81&Hx^L4^Ii=ww! z&8%CNZ3Z2VntSs*grBCbb5E_7KIKVF-Fe>0p~iV!O9j-%2=+x-ydCq*VWH@=5n*yM z9RYoUnmaCerqMWjQJ%+3QetWYOwz>I=zH5^Rt#`JUWL*D@fB5veOOExbh)w!`uFTM@!ZxkQpRW6>4ILFtbq>JXX^ui9Tg?C=!UzSF|fAndN&FjY1=0YT|gkFTcs3;u3(Y}iO@ zL>>yQksY{z4REn}t^Dm@qI|M-XPOs!klJqJq@e3fI=l1R_$_k%hBY8#qZrW5kAT39 zaDhElu5tOIzx8(afc$OJQQcC0jDr!n;%npo{V}Arj=#~W%6t`A0&k%os@8Mh$~xi& z2d(#pPXgP??C0@h=Qnl+BXDP;h1RilT3=P*Hl=8tEG{iWT@1A?OUWOSk#!=|36LBzY z!5&ccGoJxd9_7Mc_nLRd5bT5sMt9URb0--8{`pFhn4oJG=?3>pPp~*Nq_oXvJ>cbF z=RF`Ip8_*TRi2GpLf!y#2M!0;`~7|uDBJIHzWwL$A||NW2MbQ;tFx^|-^|ztUoT7j z;|wc=&kBogWucr~sb7P`DE$bYy#T@cS~~wN?}t!s`lfvAFQ^0L0bna{;6Yz&$+z3< z0jL<WqzEczzJC`hBh%C!PmWWr@m~6?(T%=iyA#A`>#6~ci9e1w3lrjZ!1+Ki zPJM=yi9*^R6P{Af0&bxl%8f95oe2IMkCMBek?REYh!t^G3W(glLe>t>E$&{ECf6E^ z<)-V@RU7EzGhr&|hh61nmZS$&xJx}?_agp#+}AK7k_iK}?yZ4OIlWrtklE&%e3 zI3N4{9e>i7eoHp5$5p8u!|@XPAKws*|Lu5`XLD``aM7uru~lSzV);nbD-#&Y`33#j zNjoHZHPdX(>2}TU?#ZSP{B0`zmE=>*cFiT|x2V|*+?R=4U-F-;4g+87C9X`>Tbowi z@6VpT^|21eK&0!5wm0;-!RNxmbVtbO6#+*vN|>c^bjl6CE5>wIUBWu540DO0VpH0b zuDtJ!NhaQ1zze)_yP2lr({bvI&j33z3TrzBuQe;(baesoXnTgYzj^Rq!t|>R^K0OF z$+$b8c+=USQGWj&0mNjFUc6w3t#?m#qw8Oqz`F!c@pmYT*)vft=kghP69A0+7 zaFP!~rDaw(AADeWaO5$db<5$AoWqJ>*VwIaxqLv+#5f%Q+K?uQ(Y?^411W>l=)kQ0 z0yBs_XKb+D9wa>@CqNCPbxS?Q$zJ!D=p@^mg5^70*KGj8>8yx@lvHbAAVI zI#PKDOwtOhGrTWYz3r+4yq41pn8RhF^nEIc(5txJ7E^dvJP1fInnODorw6B2J)yJv zjX4)a<$?B=wRI!j>}%Og!DM1J##Va(s`x`-=-DMqsx*J9 z=EgrSdfEql?J2|c@E|7o669x1{?|QqVaUQ?FZBaj)w#*P|j^L<@c?hin*6_ zNMZScJpQU7s=v1FN|jt_ov^b`lHcTDP6>O(eR86zapb|NYuqH`!oW&OV8l5*;?qNC z*w%;QYn8vwwv52uc65@WK1La?XOF3p3F+`M{oP5O1M{hNLQtlxDEh>#NEG;*xajt^ zEu@YLWekvobCMTl*m@Gb>d!E|Iz9@{0;Dlc+YizCga+U_|CF(`w(l71`+H@IuH;4F z3ML{1cIkWtw+HOe+`}TA1L)D6{ zuQ|E5)`=Y6DuRJ~n-b`Fl3PD-KHWDqy-Vr;y0;mj<(w!-G+x?n0^A|%@98K321)=@ zgxV&bQ-jW4v-mJrAmb=K7Ms9+nlV;24N79RV@&BJge5&A1bsemMe#0~kg~2TSkFCW z;g)um(rV|VBI^JMA;Z_N&kb8C@t0F_l*zET$sj)>JUJqMhnYgmHjYpjb1;wuIDmIt z+Fr{&^DQ4jT+3*ou%^yIaLUEf>@6z*T-w-r$pl!j8yreVVnqp2z0~j0-`}qpoXX7X z4!HGt5AbZj8?3#TxO!laOfVE9W<@|~yN7R2G6C}~9?zPE)Hjcu?=!O)uo*kocKB+E z7&u=XgEaPe7YDy*W+(f3fvEa*D5>lb*#j!$XW7klR>~|Z>{lUEhi2eC+zy8yFnMaQ z)_+fB7ltd6i14Hc;IBX}o*;0YX%gkDI`K4olkaImnW6#nfuTWD<3svks~mjxyaT?# zR?RRT3Z0Y4Nkn>pH~KWb!UJjj+vixop2>9`RL0j(rl-fO(?l`s<| zhtk>gV-7rKA_ONHQup-y8I_0npGk^UQdP?^!J442**c^=qnyyX+4>mmv1%(%xEG)v zt+QH0hFE;&c8(NY9==VYvEkG>jCx17ISJ(;Z$Z0i`M~%hzmvaH_+;abfhFI;Hw=A; z5|OZ1bmAbMGiJezU$j4A0SvQoqzo>z}EX)UNPfOqLI_yKs9_rNwlDm!Fr9a;G={P9KZ6)r(_&L8}%+^LTX^t z*%UJ-3MRs5eE;#byEj46n?lp4V12+bUaC$8ur35w_*VBk0bVC5bj)T|buhWcX+35+ z0bS`!^vadR$<|6TwM8d(d`k^H01G(f2;2q3=~9xP#}b&N#@rpBuJ*!}CH0DeF8_ z#U*cCI~FZDn%pd?+c=HKh8P7*<|#fz_~gAoir&y>+2rzbP%5ha?qAS;I2Q|3aNf{V z9>tGu0xkaao38vfu20WyrW&_VfMpI#JDcIwktAmDs55i3eD76=4%4&i2gAlGv`Xk@b%0uJ*w+jSp&1u1 zdKq|%5e1Zm`P~Ae=dtv_a1M?N+IuXg7)d3jb0-eONoh?}o&M5n-x>FD5CBe@6;2^M z3bShm9deK&75BkEe`eqmfOYZV`p_SR7jU{Qhy;gq+s&L=s~58zV}}Lq)YF0*Hx7W( zEjUX%hHniv_TUSz~v{x9ZoFpiT zfb#^fts_lC3tZ*G<&!0wSTgy#1UX-1$+zvoW~rmEOE(h|gu`eaoRm*>{rz3RtR8?l ziK&v`Y?)B}3r2Ukon+val&;(D=lHNG3r))HzZ^Qp9zzam3@O((mU+QZp3aJr*Y;Xy zwVfea?rN^y+k%v732UQuwf(~s(@MdJ{aeA#w%6VXx1nUa7r`KN%ejFwvv9C~oA(te*PvgaLf}lxt;D)tw}X z*nIn3v**^Y^c6V3O89j7D$uK2{7np1Cu4kT`v;{_`>a{%HNLa(?u1jJtlOPt{8AnF zQ?%`^5|i-Q{9X3k?UPOp26~0TK+3f;0xm=L+0uv9_>*`XD#rIW&GMZ3(|Ex6mv%oD zLq(;APCjM|YscGXKj_dx>c-1G3?9#5zk@fFZZvM+b3#J5C@AWI33Lw;!=hudJ)X}Q zzm5J>6A^-!=yCJ%llr>i#!LI%SiZp!oP*ff7FE~naB>-69=>oqeF<%n4kDMoX76bb zxZG8JP5J$mv+@==11Q6qlu3D`Dt{}AB#>%BCy~_SRO&klkYc9p&AOZB6|Ye-S(@>xG3Dxc%8!zC2&`q4E;^kCO*I?tz=* zdXLX^8&}#}cNKqi;)3Ut*?Qi6L;q@ALd;x@XbL73q%Qpt(!Y%*6x!TZ!k4^_fBM%t>Ie<`;bLZ4IKZ4)J>8oVqO%^_FXcPR2 z;^d$7lD?4Hin*8kR$rt}y$vP`UTku!*~dX67QDux2g|)3rCp5D%Bn7(-$X-RvOk}v z?PEB_zgTzx?kl8kgz9E=ee(y2h`8jQ^8Db*&XFCew>|gRSK6oB@1VI?qcl#j3dbLI z5v6q3phk>7_VtVX8854ST}gq$RhPd{7nC|XThC2il01yOX7C?rMB-?|uNxgMao|ui zW!pg8^QrgM8-2|PIOq=zcz<;~7#i&WTk%p4pfk+mN8wrl$L||Tbk@?!{bx}3Jj8is zh@tXNr%U<;@>_Tn;;90X1gRuK^qWxXz6LW2y9a2Y2^;ov-R1{HI@C+b61xX96-v-O|rU z3+i=bt9mj?i^QC9p^4AoIri!qZ*TN)Y=dts(Kocb=~&aaWqM{)spqqDpz6$n6xNO0R7b?GIU+x_t;qR6YyYd^d}{;lwzli3=~H;vXg0tkDrUznt1A@ zmGYorm|lNUDsTtl&VwJDOY_S`>kWNzq{1+oyojbGWRLa$;(&hWuBgIz7K%p?kPCLf z$Qb~4hrNQ|;B_^v>=yYKAD-|arzrFpv$GYX4Ky@SqS!W^r2IqdRtH8SI+;mi!1qj2 zhGjcB;P-x=YL@OkOI{e<13oyT7FvK?|5<=rz_?_(%loW$-_v%#^=hEHmjps!$Kp)~ ze!eXtN|s4{GmMuxNsLZ5z=Ch?ktddWmVN3J{IfFR)cBG1X7;0a^ApPB!%vKJ?j!>kSc~id-uoF{5&g`a+(+UqxwN#8Fs0a;0KtDHLjWKr697^n+-X4=YGQtsi#D$Zq;v9RW?Byk6E&fljPv` z$ggLMpuJhEA$Y-Y+@BdQid^(z7EK|Fr1UTScxxl;Z71B8UN}nP#@FHJjby$(PrJP6 z9NIQmuhj8P%r!>k!nVz9xbX^414ioQNk|?Zx-NecmC?TQ{4x2Ot6gB{8@k`SKReOz zQh7e+JRvmwp)^}a`C8~zmQ)tS>jlmmOwGP_HHG5 zII@hn$z7qk=?wG1pG8mnp_-ao=UOY zKn&cyeEIs797MOzK(ju)3I*(*0d1e*%3D z!sS1(X6Y8U&@g5|i5YW0J=mR~IR-`#dS`2Z!1}IsprIG`$C3X8kI@U^A*LOkYw*QA zTozBScId>+;K70L1WuhqnztY{KV%jwHE4q+hg7~3&{n&8&|ZwLh3N2s@zbq_(9^d3 zG_2z1vuv$ko&YgG`_K8^gDZVQ$j|}W)DD8%$%U3Lf5Lm|I;Qu7vib2nJhM$lm&cQy z^Uo}OmxsCnqIs_Nbq)dzJBYOHhVsza>DKEsJB*7*ty_X4R)D+iY4UMzv)~p7($j;9 zmOqf9=O>_Nd3Ye)`jVofU?NBPY&g#foVaMxVE!4MVlqkfz|Ibt{y#>48qXe3YQWzs zQo3xfN@8CKOFBa2)I73n6T(x(G58{EcDT;MgSp@AL7#)AEl*uVOLuG?~B z@-8p=v>yEky{!vA!wyL-==buWYuqt71Xn$%-~CA7%QhB{)9*?@xonzmXi+-J1C+c) zAg68*T_mXj`3A|M_!@37k;LR+j(q+pGcY@RqE zr`+#0mh*-|Ok(9U5%e7gJFzY5LW*8t#y&>|>Kl~W5Z(DG(^3&u1#2SfnGL>{{+OJ@ zVGaRZ|8e-kB*j)gg_Ght=C!HpBDrYdcXN@&xw2*wg8=;Ccj|U1Od8xmLG2$7r@_7^ z5bF2LK*#-9%l%1bP)4y=E&%;jF~W8_J9Z)1g}_b(816zR;zkXvxsLx#e#Z-KL!!Km zX7IpLU)7%wUbp8;*3E-UCps=#njVc|ieHcXT12MY7Gb==zLOcH9m@_cIQHzNb5I;s z0Cs);u(!F!#^a?tFoU>PV5yD8tq965p>bor<$YuuNO3>YN^(F!-I77p0ASl+Y(D@8 zC~55qmY{o(f79``0C9dj#$tz3cM_{iW#B&PZ7)N-#dZMctQoY7bvEQnyvctm%EQc= zKceg037kOe9y)!1t_)7WLpwcKS!w{cKg5#%`Q|L2Ki5y}J}wGwx|BNbhv<8ioAE6Gzolep zIb^mJTn-t+N5ebYK3w+l{Ng)ediqQbWUo0R3?CRY4Sb`<`<$&iq;P&~%~OV<`1!w-=U3hpDq@qjAHGsGpo znJrJ4O(@@+mf1=ZUA~ecSh^9wUbzw$y`^%5%72q>P>bK0U=HqR0MVGS_f~^rOK9 zim&+5vQ69S4=(zhmQGyd=20?f(Dg<(D!!J#b&}rpumAZ7ttkHrNb*Jcs4(5wd}q={ zdE909)`BoNarK31Neb7IPQbFXxf72_SG)#CGYS+!U?{TY&IyI$bubz0rZ{2Tva-0Y#<6c1_^->uyh6?)B zMTgxEzmIsYqbrlr;ZnOhHcEuGXUYrYI*9eR@aMM={N%sJ$^7F-7<1{i8XPWU{{*)Y z&VMMY$qsXh3tr-_fx2Z{`+|cPrGt~~aU12mbX8PNT$flKS=*Xc;) zPOLJ??`}H{o(zbrgMh8RoxwrL{j%?Y^>*DwN3*8PzH&E_Gk`w0Db>xx^We-Z#_)Tg zh47jOzaqNf&x~A(kFE0D^Uh9sR%D3mGdw6xr3Eodj-%QQ#W87vCYxoS{qHObZygOC z+>$p)(%W#EZ~!`a^M(ASJ)v(i_}c8~*q!`{Vh!uCz#PV@4t)hgrhj#FJXf9R&VH`jx=2A|0G2^p%T=?6I2!dMCqQXpB}gu?q8h^26iWb(=v%A z`aaL&~X)Y6RYRHjLpr_TjEUJ|}rIbPcr{#EOokCL)yYstc5*CVQSg z;0_&vBTDZPc;u{pCt%_UaZr-$Qj>lT()T zSn^bRp0eTmZd_vpFec~WN!!lpdvv>!%5>xgAVlY^Y*NOoxA-u45Z1^<5~Qj#%2#YU z(XLL*b$jhMINN4?C?`!FB%ZyhV%iOW{*C>C*_-hUXTl}|Z(DuF_ocM={d^=@7v{U6 z+twnCP72^o3Us*{d&Onm+1QQkAk9~)bAEALf`&9Wu$=S*|Cc6H||AO zuRLiQ#k06{W82$eW03kxT)Gi^J(X;kI=>TKVO03RlV5}t6I*tb_t)X$OLWfCtHKC%bWNC#8H2#q)Cy9DC4#zuJP>(fK}czy~4q4(Rx! zeZRI?Bv*U?m4WzOeacynZ>Wqxh&>ShR&P9=~aInGw%_{kQ)R{4dXN{Xx&05)M!` zsJ|2i;8LZ)Wl*p6v>g5c?*Gm+Z?ltbFufBecsvlrnXMlws0s}U=?c>R^^9!UNrb>z zUFyzGr%>>Zv>u}7m9=O$;2+cF!h2@nSGktf*F{=VrvDM1iGlH*K{VqlJTmBAgY!Y8|9kp!e|dh>SK6g6a3) z!u12!37vV+`+X7X{$lCrFtYF{g@_(NEImNuftXn}rM_W3@+71u*Lu{+l13R;?~DIb zhcP-D95kf1CqCmhi20~|s)bpV)4|psF0A`6WDj?oZ!MFEZZ*(8cIFsAuvbtNbYSm!^_IB{_Pq8RdymMp(aXKHpR8KlCG=94X?7=lMK& zOy@VK_+5_toP#4uM(yo5b2j!hx{)GpWB2gfZHHw}BCl zV-k67|Kz9Rs`5WRB@O404nmh6^C1&v&6BnXTkhEjryK`%+8diXPK+lNFafe{A1laK zLLT_a2c`GBXFq!Re?1cbCZ?pGjh$!CfV1DGF}^N7iw>23ioFvLa5EEZFQ2f>)1I+c1@g{O>I|KIW^X4H(!Eu zrGa-Rc^EHkN6jz?x7$ooGQ$073eQTe8F$;pZ>8~~rRv1yzqiXaA;}=xbo*A~D7vbo zO48((gJ0)5;Ct#eegm`HZMcgzV(aClMcRw-AL4kH3`kc>GP3d1GU_1jR{OjOkL9XP zjWLxEJ87eEI$_-BY23|n)x_6lME?%+9awFk;bzJ`qI#Z5nFuQ)s!;xgzIG(KM8e4d zh&AT-b+O#~7G%}1O?r_;jUi*n1mcz2cLdZS{U%&8cK;;h(0y1V`JXz!hn|b*s55De zPMh}mt@PX1Kfr#Lo0Zwk${a?tR|I4jI1Ue8QlqvQxvCI@D+#Ha;h?Xa|0c&)rl7(j(^L!f9f6GEI#x$ znN(+_bUqF@9G17Y`PDt^(eXoyc$`>mZ1Lgy7L^x`8-XR6GS;yRH*rFQH*z;&36;QW z)Shn@{{mRI^6jzW&u4dXg96v2)7$hj*6 zO@A?Z5kiv;hZbLQ;n;Y-`LN&5N818?IqplHoYsqfqWj~A0W%2Cb~^%XKby_wR!cUX zoDKM?=BuqsFIUMG@c1hu&vVvD)8px$L+=r+ns|&2G|yI@a_(ZBU;`l=7M!(MW3%&;`N3)~es^Mh$D0dJXCi9>KwU^QS6K``T87@AIz)`8$keo@v5{o9yrNnU#!dHhJV4Dw8mN z^#n~@zUn}~0Yv3GGqpGavnO0nP-V_Q6~kAXF>m>`AA!p`im%N}>apu3Qs^yz(dbgH zpK0gtBFNXIZJxUN+D^>29InJbC4viP0)7B%5=PIS_Y9ue(#SC=AFO@yb1$)H!znY2 zKcOv9S7{?K9{((U-sgc3&v?-@g@0r#uT?JG=6nnE>KfN?G=Hj7eOgaOhMzew@);Z{ z>prW63A>gz3f^PwyS<6L*8NU^#AHfIy@mjIk#-uuVHBUQJX^A zcPKCF$(QeetDO4B<1<3^q`wuL?1Bh`mtYbm#{ZbEp#0#sTa$ncv`+ zf^u@c%eF0H@#Y!&z-J+ex$;?OKp;WoeA+*-{=k?1i~Y5HdzWuIrrQJ|zRBCI_VS@j zQ{|h}XO0ZQ+k2BW3(|*tC2iwG;x`skgALjQz=JrC47-6`eKM@?dg9P=dPw;P*xOd-`%HNJ@{;#svm4pdKdFz{zK&;l5_xDJ9bu`D&@yE{G4-|a z({HLyh+U2C7VmJOZXeCv->?ebD+!+@>{~dXnV7uBuy1YCR*2;38;f|{$nLiFPe35v ziG3?K)Qh7j+>YD?kIWZPf8fyw4~?6DiA#a34T1M3E!%O(cA6``-Fy;0_T-q!E$`}V zXyLvEnJkl1XB^nlAF1d5Q{xZn*94BCbj3}pwXL{e$^YQuW1xrkt3n#wwLPVQe#i4~ zythW<{kdL`zj`UVWuJcmTXp_YsBJX2T<|W`zpl4{1(f0u{%qGFowqPQg-e4AY2Y}u zv}SrH_WL{OaOW%oS)qZ%1Svf*n?pPS3+A_dhu|pcCC{Xu3`A1eTW^nUhMO=s2S zae9L-iV)39Ooya-WDd}X=ow$-v==tZ#%AdMZ<(vccMu3*4K$>H$ZjbILb#)kv=2I} zp$F>KO{t*wQ(>l zp5g7!NDB-sC3}7Eb=TnYIN*p|z7u#u6CbA?J$K-|y#o`V&l?s5=To=u$JNgHKc>6| zX?>9`kKe+dfhogr!cH2n>FdzUHXcZ@1+2xupMk5g{@x1)uM_ZoeU0*4tUO|LVV}`K z{3?R5u16EIHujV~}U3osR_Ib-(By9SOj;DnSBP zX>-ap-xmKLfe%PxAxL-gX|}b@stLl&^_#Lw1}asCZ%8S*iEVt_$mZX&aq#~5s$$F} z%1oY=-}lTF#K;tq92ouo+ViJi`RBkpD~28{{6tUewbAiLhw#(%N|FhAcs$#b8g}zh z?P~h7G}`I6;E4hd-ki%)?dWpc;YYc+Z-P=z>szu=d>`E1gvs9R{G#0&jI#Dht97j2;uqqc-XR--ebw4 zbLj1R!6fBqR;}=xF^=)B@dNg`C%SS?QHa+6a9L|{(^grXmrlxo*R08dgNSU#sE^u6 zmTtF>epk63J)hoxV6<*Ezxw(km;-zrb>X>Uj~oUB&bAzVV;yjB4VVfuj_{APo;Odd zzWr7_SNYvU#;P~Syw_>ocbVbWU5Dg6INO4N*hb|SFP{R`_MiE`C@(N65NtbVy!Xd_ z8LP2e+_;s3=_JhylaZT06Wqt*gR~QCD~KkfQrcO%lQjVZK;kz|GJS+>rK@lXIQ>y| zu1~J}zDpt@Z*1y*NDXRiAEc}J_h=jTF$TLM(A)g|qR5xd?=pcq6Q@c7|NPVMt~NO3 zONBQ$3kOL3tYzOBlve}z1GFkyNMo~#Y@Gi2@kKekSt)j|tNf=5ytxwo3QwBE5)<4M z_1WlSD{MMHysaMm7+2;>+#`%PFL3&mvmwX~H6&|rJi{mN?11XQ zhtBm=0dxr5qbH#<=s;~C_+awJyQm6qAX7T1bOW;eAt5vBc;(ZVrlv7qwlI!9SblM; z25C9Y`wZNfsygX5#m zSv)=hW4j>!$)wRv4$WbOgKH->#4h_eIBULV{D)7)8wRW~_hDRjr_TpuNsLI5kg?9GEuk*8lgMi$N!>RLSu@_}_gxq&Og`X2jM`U(zIC1D?c zu8cyp*Q-OO-it2NCwF6?(Jyv4dG!iuly-tk$y*|Y z>J_O;1KslBY;tL7kH3o-3CDSo6;K_D8N&wdPraEF96Kib+zeB$@2B6|b7JGX#wJdQ z*im9}xN%jBtT9UJa|rM9@M9-BCQ%n+Uoqn|h_8s^>3EbhENMrvAFAvQ-loO|L-cqG z#GCk8F78|YyJ;!BhBrC63jR*`fur#bIw+&uNe(+gq4EE~qv_(PCUj!MfR}H+#)XZv zm&;dF%#dky4hXJjXm9b=oNWKw$%5WS0@y*Xp?DJNT#DVM(eog&d7+m}fXd49ZRdKe z#QCz+r>{4>FQ{m)h>l7>Y3oUYIV?t_z7GO|MSJ>H~exa1Cr0<4QBwoueM#DI$F#7L_!rZR{>3aPG=N`f3qZ*lB5%H&uOAzjoF&APL$@o+U5x5!irzrvc7^ z+#O~PUZH)4;o(>0WeVc4R80NL5v^~fIecY%tyeUyT&!-ztF}UMApYN9t7A@+gz7Lk zytSg2oaz$g*5MhpSEcVc4k6MC=S9j@4|F&H3gc&py#LE&8j#V%fttSJXWLAG18thm z7;IH4el!=vT|{+S!tU=szXRTnIdIqjq${*6&aoB;{--)|2JKb0i0MIi&zfe@sWWsf z^G*bOYOf>*kf|=N$m|3`$-M{1V;~>b*`lUt?OFZrc^$&qM1Xdk}=)pOyq|Y76NjRx30Gx5>K7Ky!i99?!Ef6|@E#||#V3Fh7cg5&x*yT~uH6ng=J~Nn`n?c9(#&bA z{I;elX`7Hcx1N2esxhu6I@A}k|BvD4i9LgXVGzmTzywf2ywDy|rxMlUEG7;O!IeXE zu8=x;2xGF~RhwKQna%N%}@pI*X<~%=JbH*`G(a}lm5L;;YA+2}4kuHo&WR@tT^7K+dKs-&#xZqVE62P0@Dqpn& zj4fjb&)c>V>R@7QH0VEK(P4wHb9rx3=>o)%_Y${ouis)MxeIP(&vzJCIV|OPVW!qg zW#nIF;YGh-fsxe98@?iasYNmrA3NUUEqJNINzN9Ij~X~TpjXLYY*dFQ ze42K*>vsL;GKfGA5N1|4?djEa^H4EOs2-toQyel}S4;qs(d+>m!6bZ@N`NzbVe-{k zM9w#qZZgskzB!!@gNDQU{jB-)%u_ne*&-pFY3^{K?iM?fFZh2Mdz-Y`bsT9dpwmNd z#QPt50p3P=0e)QH%ma7Al_CNWfRyL9?tM>YN+gJX0uV*nbFqfgxw&zIDVKx)U4}=m zq6olO7l^(XHge8?9ts?-W11*}e9UPtToKUw4rKA7eaENT%O3Y50{+O!c(Vvr+Zx;N zbP@`USxaVYZXZA zAbHq4D&7I}HNH>$)0#v(T%Hs`cWaw6%tW0k?xDeDIfXC#y@gAt|L7^on~RxZP|EN zaJpbK#!Kmy;|sG>${cFrdOQ9M$D|BfALVnYyYyPF1F>}W)~(@xTNwtP&KVBYdh|!+y91i)Q!c<>r+bOAhrfqfO{u$*$6Y0D68|IYH92>1q6n969LHoCx zQXQ`@#$>dP=D^DcPSNd;NDH~(u}?Pc_V$#-l(ik?cds(&$7!gavi~9d z(mApr+_BvsYtg>1L~y?4#HMwbI5dQV&6#b@(>30uKI-vY^-{GcDn zU}1I*<>NV00rThE(jeisgco4?jr<$ot`nc(Cj^(&0uNwa$QmaX9r^4>f4A%ukan?u zl{@D6`Cy>I&4=73Err(@M~~dZ=yN6=?wdBo=fN?3tiOK!7=5nu%>IeBJ+Z|yh!g~+$$fZ>Lc&fx+AI-edWt#AGC zEaBo&@E~0jhL88)+qPfg*GcEOu5nr$D*@7Vj=lNgL8+EwPWnfY#rcyJz(;9n7gch> z$PVV4-vJA*vhO5+|NlP1;A4!W8^zB~;wMf_Tz%Bpq|*lp|080YYl`qX<6WMc0_8Y1&jUJx*Ec3oHw}c z|3s^e6?z;9n6mEAzzd%wv;K5`-nvyQmL6@7?Q$hX+jC5N^?if1r$-98E6n$6ZliAq zo3!2DovzcAKE3W7w=N4_<6m&j-R|@NrO%IoR03iWua71i9>S?*YOlc^H3xwcw9-GVo@6VlmgIrvME^eKX(W zJm-F*^=%UQfPI549`Pnu%j?nFL>Y_E5D(I0z*M+r(4wxLSRv-`WkslIG>jp>qOZ@H zovHQ~WoOrta~MJuOALEJv#)(-x{okzhzFMrz1it^>-Iw?l=}$D5_?{jnI^pGs?|gJ z7+(tn0+TL#%pn&7#?KZU|Ey>~UQM~jFC7>S%r5AU*!Jk2>r{X%_!&Ruzy;>hV)DmY zYv5{-gl!!bnqy@|zUzL=Fki;t_xfPrjB-jL?`aoCK{VK7NuYUL+82(;_sfrcF~GS4 zXuZOV&Nh$MIQQ3I{K$P`9+B;@1LVV6yXJiL^Cs9In~bIz240ReEsVCYU;(3&^9pal zj<-f8vZb>oZR7D&mVL;pmn3Ha~Bkz_r{~45y#!!a(W7^zr3^EkgY(}{o_5Lbz%-4m+{^7 zFO`7HCiMEyKiv8H5=hs&-rK?W;2T|X@|gu5h)%nUrZ<+%1od7`z^t=Sxf4W0!}elA zufjmgf_6Jkv8%N4?z{DupG*5cP$072p7RgEDx+zrM zBunGT#KYw&a9FqkrUzZEP&=+}(p+tL!1;^8NY?{jNu=>yezdJ?=@0NIvfQc}b>0$d zOJ1B$=(9QLH9XIaH`7yJ-764+`NH!PlQOFL7?mDtWaCfVEWNe1^|)lkjdybX;aii! z@USQ<-z@jw(#d@S`6FjwV(T~i-eQ+5W&GGp#@XCffaK)0Q>r(8dE4pD7lI{@wR$^a zkTTPpFkOyfzsE0OB-**4U7zcnZlt{NDEeTI(ZP?!&L$}6#}>k(I~SZj>9Fkl&cSw{ zZij(G#0$T>*YSVky@lQwR$jX0vLUadfqkGd)6=%zw`4GWHOsR7a2c?!zwxzoUNXL+ z(w)F>e2>gwSv+1u-!p~oA;vKhme8E2!RC2dT%<7;Nrh~dnQ0@vbigx7H3yX3&oE!~u3{5qMkE3N7 zm@6!Z=e|3W&F@$~Vc9E215M)Mj~Hye9UD;VOC^jUyO^3`3Y7C% zRL9{4@Hxq76&dz&=*BB~r#EI{!07qZK#*VZkw;U$APuRQ_ zN<F839^fhA??MH}+Y-+;nrjOQki(qhVmt5Hs}tmLJOAlPr}nRGXgAUg_3 zb|y?HVXR^Y+uQe+SMl#MAF9V7U`e|r!@!XJD7qH!|Ijv9;bQh7jv6;rc{sL`rVmXY zOeU5{x_1n8!vFR-#VyBbLqOyM7R_`b54z!h(J(XgXb6xqndbK(EzzH%Ax=WfF|PV6 z1)lP!p4!S7oJT0MGRf!8MYw#(lS-%pN+Cu;5i$7UZx-Q(yL?Q<>6PrJ z4j;dVvFao+6aBC;9P3L*ErRL@RQyO$|HFFG0waHK^Ka;V;AO%=1lnf_Jq6ixZt--%h`?t zYxMxfGn&A%V44m)q4Jeca&g4oaeTk7LvyM2lfejZ29BQDEuJf0E5A^Mu~U@13S=O9 zc|pQhGx;^(N6&d6#B5F}hBZA>&{{SN&5cNVs}$xDM(5k6ph}8P!Q~WSPK%LW0*Xh| zLKW+4VJAGEIK{MR{)|{J7i_!~SiCKDEsVk-{1C5_e3yQ5Zk&Z02*-$b8F8#nA<>!R zXDZ9i_a1pw4w1epaBLYZp)R%9z_>rl89vw8y0O{nT7e>M^bE}#u2!UnatQL!hHXBk zUnBp^U*o|W*}wScI{)}Gm>{2<@FF4$dOeqg`gtLy&&TuDdAfolCaxfl&8dLCFl9S^ zj2U5)(O*7hJa#c$#Y#psskA&^Z2#au4`rx6^e^vK&)?J63kRlxKM-F`aHhSsUq}As z;;*7azENWE2F#ptWB=Fhc(%1eN#xh=^EbX5mj~P&@ViF8*zGVppznzxFi$6gmXY4yETTEEM=OYc~)JLmg#y9MX0PEv7f=mYYBJC(AFN$LDOZTk@q z7CJ(0X5olQRodP^c;F73VEcE@LY=Sh*u0cXqU6%TJ4Y(Wjm=EN?R z>r#&EEF6y&DQWW4i3csNKZrH&B!(Vu-d$!3o8Q3JA-vEMR;)E9XzP@HFn;ge9~clwfmuM38D7WcR5C`6`lQVoGwRcH7bVZ@jk1 zi{nTiE^wuRJg*gooX&2OqZZJQ0@>pMK4<&)Y@H*jr|l=5PC#!~ISo5~OvP6cI@SvR z$sNYJ6SiaT8V=VWx9C4rHHXjO!6B&XprVzD;hMjSs6lT&wf_BA-s-l=Z)`+%|W zp=}i#7Fx_tbb;*>zH%&m9}D<+w4-5ovK?XiCaEVoJc;ITj(k4noyOAT7XoKegq#8C ztvRCF+smBo^Oruhr2vo7`&#s=(HR@m@xCIf!H zbcpAW&kLOVeFGFgGsiSkIdeM6gGB$kjCd>N{SlLkG~%uQnePtLC)|ih`be~qgM>q8 z=zI5JO*E;oGnmTh3!<1YgM}A-OFm)x@0Y^xI%Sqd@OTqU4XfElOersE=jirc(;0PvUhAwTijS4bE|-qYgXU7sB{A_HP;T zp)Z&Pu0v}+=)sZ$Fm?at?{$r~Xdjt0G~+8z*;r(Y(*!YY7M10j0G~T_t?_W5H~2_@ z^??dtmlYo{{3LM@&%)#q@SxY_J?t268v!paeV?=My)iss$f-Nxn`u%`-2j}{m?zzK zEuNviHEq;)Xr)CMj|B%KhziosbOKxyVj&ep8KJx!A-~n9Y_Onhu(8WI) zSH66IaUg1wW-#6`pRlH#wZOuSHLR^n&hpk+4$voZ{sYs&8O)%a82v=3Xs{d~yLkX} z^rZs(X+cZO*%N>;r$Y&Y<*Jh1-$R_Ekm9Yg=g<)v*8-)!8xc=q3;VK0DwJuoM`%kV zO7weRSnnrOq2 z6y3ChY-gLxpSiAiF@xOi;3W>-DqwJu(M#r(%<8-*@oatNj^aaZ-K$WGY+5eUxgpaK z-s4e@ums8IxZ7V-)?v)(LWhlWzVi_r4BPc$!JoolZfsX_4Rz~{CJz%kz`Suayj5H( zl2ROc;+G>)r!LZdc-Q}oFTG%!epCmRdO!_T|@MiR0XKGUb)5jju8}vJCWU zfo#HCmahM;v)y;n?uq++6k&O^D(u|JI@>hAJ!y;iS%MloTktQ;A_}~qWwP>>H?l>5 zE3@byxF^Q7aU)EtIy33+l~rFb^{QLv*%c}hT_&$)wSD$#h!B5}82pq?#MGH^UbvjL z9?{nw*cWN(La(*WsRQJx?Ek{HcTdP#H*IxH3?9sVSkkgR6?F41x?aQ9myN;vWjKxT z!V8S=eoe)?Xxsur?9aY;@h^0(WSu|8?1T|#?$||>p>IZq09d6dJA`eOzlirEyxF zaKZcW=2Y5{rU*EUavo|`NKTwE=~8eI!TXNT%~nw%JtboY*mSZ&>YU zpHsh@kT8Ya*zI#M;q^IJ+Grh|eb-wtSoArzJ(=FX0B01106vNoyaM{Q^)Mr}1p*uN#&kw_z`kHA&F9+iI7w)G3hvt`flAs?v@V)<% zdFy7{#|6y^VOo)9{}utYOdQumyA5+}wl(G-4wuuaf_DEcV}hH2gyR9}^HP$sf0~C#=@} z#jCI}S+D{1YvFhJsWjF1$vFBQ7(NGcynduBcCoHS1Z+7&gI^}|{xou#SdL;{P=B&TnuZ6#nC?0ai<3lH zA-Pt)M5Q>rq6KrVIj>#!h3p6Kk0p1Mc>+V*4hc%3cyr-+w~u%X*@Nn4Ej3YL$=k>I zwsa-SKJMf^bI3${vXP4~3hEusz<4C$vmxe%d=w1(~p}SOaAFJ)3ag065?v+&ZpH|Z5f!;sJuejyf49xPWRW8GiW+E z#wGMj4n2vz(&TLfUrW(MlXN82^Z_fu=eELTJ$KG@sx)+wpV+T7bF^+<3nzWHy*NVn zB+Pc2sE9}R#q@QPoZPX&IDXp28sk;RBYP5~{Z8=f&Jr-{TZN!avh`n|ql25e;O)Q1 zbH{%OKdN4Xup%9iuI_)r5`Y_znWj54=sexG_YyJ|Hmu0ikji!@9pc9|2ZHYUWjo=! zeJa7{xr=RmqDNxCj&c-mkb@1k9+F{pN4b-^)RO&doUaNpvY!R#stqN`>yzUZlzsz- z6;keGFr{0~yYCoj32!Z5MsSSmJwt3Rz<7IzG7flBqJmG3ajAU0VgpuifE8_mJetY$ zu@xndZj|KlA4r&bJ50bI5h89~Tni=4JwEXwj5tYruZFlt*GEMvWZx+VjQ+v<#C8LG ze8(ScIpig~9-E7$hsDp47>5dlQL-Qm@!Iu>u&7h1#J>|swYvttawJZz7tOmS{orYH zjIZVab)_qViO1VG%x~ROTuARVKOLWX*){sFs|&3f*NaKn_cLXW&rMnj(7EhLxYmqI4d^ok!l8KdY(haSm^w)IhPGdzwwa?W*> zr^DToW!dyiXZCE}8!3;uKc<{3%Z7s16zxUZ)rpwXX>(8b{6GI|{F<&D^f(BF`EHT+ zDE7Yq9A8*0W%w7k3=0i%Vp`@@ zIy(?)xmVHGa;FFGGnslhUbNE+4e3pGk%;YyVWTl+d(v07`_vFs*oh@)DsrDq!^HXW zL2SOz7;~b~qOC9Ch{D~%By{t^xCMlpnpjC zRp=Z$ez)5=4_^OvBG0z8mmJsLocsWt3*6&5u{y#XOthoFCnZU`K8`^7hL$K6H0K-+ zjw+1canl!tS1CvS;(;k2nmqAJuHHc7 z$-9LNs(RThlf#1a{rs>Zj&>nO=B6hXaS8Du$oE+lE8b?y?8uusGK)miKT(_Tx1X35 zPF;?)SHJT34BDFUE=d!W)Z@EhT({;Jq=GZY&v=@}o=ph{xLvN%&ArIT@9{X)7lbnskqwsA7EaSP%w#~+MPDaK@j;3XpQ*e4WUscJf zCT=&2x4n0a)9dmxzHL6;=i_BO=gG1OH;!IyRywv~z#b3OYOel@juG1X4n5CiLk{$n zi;&0Pn@*_W`D8樋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

    r`S{`dbQ{tGR|e>uanI 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

    l_|xbJQhj4mvSk;Xd&IJi6tX9 ze%Ib1H?m-dlCd2Ey7VK<_#g_VJOt~e+al1LveD&Loe+R@0LEL$uBW6KGOu5C8lFB$ zo@Gm)iw6wXjqMU#!4#f|cZQ$f7+;4^zPO`d9%OPq?pp;7KrD?p+Y?IL)}DmUTKP?{ zY{$v`bKEF4%)D@Zr(+n>IbV<;jjvsK^_5*GWYyP((;5$~L(9{mJwL0ufJmIOA)kCD!*cPH>}2GWubnTTviltVLVI0^Pr9U!=Ud>H6A> zjjchAf*jKZfXM`R_>7roO|cW?zxbD%uQ@ih}Z zL-4PNV|v5$y3%mp|60H~;^D@8qQl|P&!(WxGJSMwvxEtad+biX`{AEx9A32HSRDz$ zFPmt~ET^|l^k$genVQ?a2tTiJkW`^?+)3JdyJ69{x~g?wfdL=V4SB=?5(iPyu_1Ye zbZT{`L(nT?Z*r%p6KSo3zGxGxG>)}$A+=hI0d2mjw1m9KmgIkeT zmcZJ0wJ57C4xrr>2VI-(M!(>v3}CuKtF{VFe1x7Ld?IRqPK9i)jC{wDt7BYADlOtS zhs*{w9@<13yWT}V+Qct^hFRf;FWdW+JST?uP+BUGM}rNrpTgp8e0W%_7Swk@tf+f` zqJ~d2O-+zs)LXC@QvSN)5T6(xaa~NPuev;eR<+pDs|{lP4j(9aD-OxzHsWVPB|eYB zv6o@vhD)^N5iJ=oD=f6Yh|K|0}_Je(?kxU|Eeqx7z`I3PiXEV9g2s_6debZ zuvwj^?L>W|Z>oq^j(C$y(Vbm?E;We$m2+zq;O-b^98QF!Hj{1a?bp9xgq=sb^tx6h zp6RE5_ox5iNBaiSx3Plbkv{A{jUAKRHV0s^Dc~Afx>f6qeN!RmaT{#lg^_fp_RcDd zq>paI(8$qE{@VwVFqG?QbF%(k9exJ8m;1~1u%{x~afck-zS?92!~A=!&hTeCcT?sU z(X|JlncpY*crs5Eso7?B{?|Vs`@P~4I&_o+XX3GU!If9A@k~L&`MdH5BZn>eVq<`U z{C7WM5v}uz0b!iKz>;FS4=KuVpP(>)1#cm@JOK3ZzxN3slR*a(2X7Lfr>C3`Y0JG- zb-IV~8x2s2Xfw0P$304X5DhipJM21`F}U^Q;lg_~7oxB~V(982Do9ywDgF$o3wIYC zPBku#UUaIYZa870T z+KSTlBg>#R?HA1pfOz3+%L#@2?>q&*{DC)lblLP1=}Q-3vb}t)xi6%y}Aujm_ zKl_;wsEJIEYnr$jy$jke8sglSj;nB#qp^)Ya=t@- z*2|!fTi4t3cH6}{kuHR~%(XU>0X5@kWuLV}_zEUbZyL@41|vbk2pm9D1BuG30q``%JY_&#av0)+Ru|W zi5t=E9D`iUWIJa<69>N6;k=j-kGMI_C;TYEpZgIT;TADw*5ZgS^8d4aBk9|j;5a`1 z`HO`AcHJ~9&0jXUR*n;3`y>Xzp+M;Mq(eA)$_gz7DL4kLoAunG>}w%Ve80PTl!1`Ll(OwvVUUH%M=o3}m_t<(B6$38ZJ(RmvQB2D_ zImKs2Yg!-&t>pS*IHPZA*V7ds#p)1opIH`Jhjq=V3@_^@^_2R2W`yWs#4RYDHo_Rq zd9^d-Ycyu6K@p7j_JsA_gmw-*s&y*dyY!`KcGGP559Bc9^Ao*XjZ_k^5&!PI92w$zGr17W{J9!^(vq~=ab+P}$ zjP({q)EB%2a)2bae$(Z+aZHkfijy7Dnd|Xs-tH1e$Pb$f#WwEcK)Y>NGQQ<(DmJu8FI%)h;BMu%3WH2@DI%UBdLj!9 zdELhC2F9`1nZPlC{CWx%cDDb9>wFZpKG5ja>I}LQzd1>_?#X9V9p6aio2i}Mrk3Ov zLat|;P}GuUqf zoqCddMq#XGEO_8Lx5}3irQr_6wy8>PfoU7ZrfSf(8xI=x_KWggJjvgFu#X?@8%f{H z1jlvQsQt^j`$WYlGdh^TsYo#@W4@QWt0#yDN10y5wTw8LS3EWY0B#>;9-;bF+9rc0 zOa2VJH_LGhF!<^j_Ki$l;`)SOUX^_Z)@LUwzRIeRu7thw1L3*}3N|ENk;4;mw+yQ(-9p$!^W&sl2c%_cp{dnbXqp4d9` z(c}?>?4YyRRZddCYSg|44yzOAj-0=W0+Ime%MNGvkAi=F?lN%F!BMOd)zdCs%wqck z4=#Cb^`Z}hTvUEourB$4N@2B8bkaIWgx={IY5?y#d^T%AjvGw?fy7>pF>AXCp5nLk zhh<=m+iq9+=~&_PTG^sHKsrbI1vy*9wr;~3T)CrII`obY%KW$*j%*?TE473@XR)(JjGoL#%4tr>?-ZFuh>JX05>gEo~0Z*%;2X}7a}VP%vd>wmQZh0j$C4d?lkEGHq2Thohz@6ukyqYw8G|JJ0s+P|8f+jMfUR9jYRy3NV8UOCtXbkeiv zPkeyKf}?6ueQI9<;{!Qu(wxaoAI1aW36Gb3+t_}b(A3b|@AIm8;nM@y;BX0kWYVNo zZw9G%wBNh<$5cK0CFIt4@f$4R(Hl>J73fm1Xh&hOh0FGQ44dpdRBliy)Ob`WS-j}lYx_0WP%DrEcAFFF1IICm$GTFmtghU5b{a#mo7Z@%^ zwf<;Qr_O$;FT6PM%e+SY`sAk+7Iy{08X240XctLqehwDWeD&PwdGdiBcDe^J^p2dg zCIUj@2N&-jc`%*~fyoo$8hp2vFn!3FVl%fxXc!#q1FtoiZ7KA`ECPhX_)xRO)gty< z8PHo2q_;>th-jw-BAG8)TMHD82I*Ej#dF@yaiW{vbT!!+ z(NJORVLA|xKy+Q_5|}JC>xb(R#I4`!Y0!~u^E(Q;yqWITU-u+;BOBe5 zo87c87r}s={ZizHPF7o&kEJQgRnK>PqnOwRZ)mhB8v{Jtz_r$NQ@hwqABJ)w6%)Om z>mRn^&dH0V2OF*Im_T%}@3Fd;2@>M(HlB6c+65E&Z?B-23(%hRLB@kE| z=(RFHrZ7{Up8d74Z4+Kty(EY)SGhc2|2k24XA3uHzpN8f1jjiCY zN8|lj@B2+RP%4!Af#wt&FmX(1u=e5`-q}91qBo$^V6v>1C#nY82e>I1 zm-P&&O6LjY+2_?V?5(f9Dz7-fX({ei=wnScU)2r@5h3bV-KDn7+bU)VV<~$t98^&eMkGu~HDa9(9^p{rKM%drw zDgg^wqwRrTog{eWfC-GFzeOWISA!SY11ykj$vqX|drh(cg z^4v%V=xvl6)9P9-WmXmwm)FlbX_Q@eC?fahFJg-=SR+AjRzDxQzQwvUkY^n|!E{?$ZM=;MuB{y0OQrwD zBwbf?*bv&!~6NhP=zm);?Gmx7eGL3F_yEpL3{h4=bO`80TGI&-Gts{q3RD*k?ev`bX ziTi+8a3|+K!h9i+XK?N&PVhCDeUUmHpH6ojJHvu@n*IvZ2X)rnAgNANW!>Z>@@=6t>Zj`k%~!Vq z9XJ;)L;W^L%8qblZn4HfbPaY6ok(IB)YnNg3#8wcAtj{7`op_{;}ml zXmIhjysChE6%KONmD6O0wFwE<;U0A5ZL9)lUEg}%Kgd{&qVZ6=!-3e9cu=|ghP?46 zxw6iBO2TrIK=*YKb$dHDsu#bTVw|D@#3A9Ojj-}!pBAKW+qZpx3@uBkCnR4Ia zHl7O-*TDnsok4|S+&)xpo9u(3^|xP&{Pf@c>Hqn!_Kl@)Zw1FAx&O#iJS z;LhnnjSo}(PMf_>Vpy&;j5DT6l0KYxd_v?a`tjtRmJF|vS>?aO_s>Zo^A7)Ad_Q;9 z#I`Et4LJU538CTmSraL(6P$EC1^rHYa;LWH@f*NyL_Rw2WefUNu@3F>%|0i&UbE@fU|QQp zJ59RsB3tUn7M?1OqUw@?e;B6Df9pI~eej^zjNg@lWC($?h**OL#_MhOL2kY# zvUGxo0;3F_;$H~Pg948_MHIv**T3w_L2tVnh6-p%{~NEW&CtLKL7CE#6LBj-MA}+t zfswtkKACNOviLoQ6UA2^7QED*D!yr=Ai^_1hQ&{Lq zAtlv^&onj%9X{;5L^+`JL+p848%;V(dQs21UupKA13WU`l-VFxRu2raNVRD?xfP&u zKjgdzzL;caZ{%6pLEo|vkDkNvz2KzcTRpRRRd3mM_f1|wlWE&1h+3CsWb>YNeIvPW zJI4yKJ*H1wPVE`EohCAtbLaRo=u4GJK2{&`!F^o!gxK{GT;EJ4xv~z?=uC7=sEP0P z;HtPCrffCwZYkwI+c%iL%?Xaf{`%$Lzs*+K6t}l|^L<tSCB za_3CE-{2mW4e0$Q-)^1@8Uivo@w;>*hPTtR*kml_f0wrx7$yE-k44`-jiR{KX zuFgP34do*O2Oh1gjslCnZLl}FTADdm8C<-wlw*gBZFL_pX z88mRUL(J~N&s}rxU3YqN1x>`O9^bByg9*7UjTmT<$e+s>RdS+Y)qr9*fdtW+-5+;u zR}Jxf6U=x_hi?utD1|D$kjahnkp?hod(xO8CkON(J4Ln;7*EK> z8D6_uZB+65VSU|CKa*oIQ$bsxXpDM1n0e)z)lj8dMhS^kGgu(m<|HCs3}f zT7A$L`VKmjxAP7g_kyzuni+eKZ#6GiPVfvxd+@>KS&r91d==C9 zt!(sbo`68O2wozi3~&6I4g8>yJhg+fW3f37YW5#l#x(Tu z@w@(Tv~n2Ao9c_`4s7QWtpOhNf9&OV!QZ6tL3d>)8ird8)w*tK*QhCVZPI0@rnv5T zHDme_;UmfwK|-RlZ*Dxw>W;>mtNoXHc0Hkf4cco)%)-@b{t>xg5M5v7B?SMAMxW2} zpUO{qp1RxXV7-s#J~QAiCRT?aU&xA*z)yep(|`V}eS_(noZvV=8EgKRTjTekBjUoZ z90Is{GXOSnAAqql<+ne#j%)H7X5(Pndp*0UYr8Gn6n!ftiEg(teXG9hu}M$QXndD` zG~+$%_6~mlCL`T9dHW^lvpBxm3K43*X%cRm*kEUBwoi)mIuxu-dXIq)bDL(=!^F;< zV+9^b26t}PZw|$z^FoVP`aMx0TPapq?yQqAat7%qY&Q)sjMdpl;ODjncGMBZ))JAa znQtpLZgfckkQF@G^`_gbEZWwSNFV+|w1o_zwzZ*B-*8RF92VO~jIYgv?<=p)ym0cn zmw3yGj2(5ti+a-+C7K=wA2eatgO3m&Fi#Pj)Pz2v6t+(Ufzc9E4V-mM4>;rpH_WBofsfW+iZ{-G)wqF!J`6 z=8yOqix3E;b%VrNbs|V*zUrBa{iA-)zw&G4omMOIk{Tm)TcWdRNYvTh;585TiQN~_ zWK4V8jjrl3aCen&}YK7(|sPHej91AJBi^38pUH2rgw+4Pm@HPhi^ zfIs+9X%l+Wf><@^43R3)Y&cQIHR<53duX~U{SK(TqR%MZEp?_z_qIjSedq5>#UJe( zP2c7Ujz>D|pY5@V<2G#;{QNOHG4Ex(?k9(_16$Rc9G5*$xa)K$e3WtL=bre#r{!={ zCLIVnqc@R^4%P1ap{cKbCBJ9s*+c@KwB0X(`%ay&HevAu$C&)hXYAo$)I;weS4V=O zL&<@P(;qwM_$B>r1JTrzEr{s6^gk1)Z`R)?oAomjvRm^#S5S?=P0=x(TY(*3cJ>E# ze$*+VI@i{H*&Sh7cF7;xY=2y>&y4XZ4%R75w0rBs3x6G^$*lmHH1Jjjd3AB=e$&RH zLPvX`34L#CKEP%(o4a!7F|qIwk&Sw9T{@p~w`euA;E!~#50V*AbBG(4X(DY42jRFT z&CJ-=+=v!e$Y|gb8k&7tU$L^UE&QI z{n@bWr*~ZZck6t0fz`Z(l-zTfd4lSFXy&Y^IWi#mAdgMI@ zvdfoLpBR%CO_!~=B((q83hev}#Y^tK?`2U~q=T_?HMc8nhmnHt()A{Ho=RlBBYC%j zn8hFH3^CR3dPJPZcH9$Q9F~ewMOE;NMnW0su>a=I_Kl`*c7o$v#o_*+W&>UZcP46h zzX3Kn*#69CM`+D>(dpo_!?k1%JkNt>!-z&pK!FET?Y&`-Tl}(`!7V2?e6<}mdRI=It+MLGbDxT1rwMJKusE=7H9-0%)t7kl zb8W{snyJ9}t$A%D?<+STH7<1Ox9cp9nDk+?db{#d*URAdyl-!@f+wSLiTk3?SBaS1 zssL=sVW6WQR=cm_q4Lqz`F0d3-y+;ng~c1>~!jl;UgVZ_75xk!5`D9yjzvI zGc~qj*k0(oJ%m=D=rPuCn102CZG&#*s~_DihtvafnpCr-b=j&fi^(P{8i>kOo_Ut1 z3lBZwwk)K{hpy>Zvbtx;L@trl-`3wcj=SWxpDW?5KKBc_ha=BE2o_XdHod}tvnSl( zXaCUc5(F`P1o5KKbBTLC_U>+je#LX2s2m2LCh<1sPxnlQ+W$;T!z+)P9`$Q3kLG`^ zwUtjaL>X>(LK5+mz`T*?CV!$y;I+EmXqWm~fXYMjTq>^YoBn@;Uv{T1lWn;C%lOh18ZG_SbLi)3BVr-4z^<_t`F|q;{sicv2_o-SRxu3+Hho&u=mPDl0v@b7nk# zUtaW$dW~(Xi`U=www&NiiRqXIqS;eLehVDLX0h|gs2l7Pin|OnH|1x3ftfab-CvN6 zdf)55otL4BiEAA@t_gw`xAqGPSeTCojR%R5SAqmxG|(lOSxSOZ3^+O`6snwT*NT$e z<7On1DsZ8MF(pB{v~}7&>w`jP878RMzit)WL{k-wbr_;ji#91{R+AaLs$u2Ftj(e! zwk;%mC+efoGw~d6+L5xl9!?zu0S{Y)ffHP@y zIyM0W8W)UwYdGlfMr-`W%9qB6&|wYUqB-;?CUl8TbC!Vm&~fsCWlSw0Zo;<;W;Kjh zn0zQhyl~q~zFGA@z4}0JPn%v2w4y&7`kyl$)%M1dT!Y^Gg!2YJ^DccbY>aPd@SFcR z4cu(s`X}9*56u=2SOiqx)T7uY8{F8{hKbvGT_-5Q6@BlkHint%B;jY$Z2;B3YQeGQ z)40%rEnCM0@SSTP7}pOE#uyxbwOXm~Tn=C)tP~rDD7SKC@@W+JSo0MoNp!>{5D7Q4(?mHH~C?cck#_#3Yqso_18#W z3(o(N>2?xrGLYT@Q2kR4);AHmla3CM2b|HCV|(8z`pO5x?N!|NAj*t8t1Za{N?fVF zWW1QYt2g|MFSnudU$B!t=Fc^t%1c-u02Qqev{61+3&fU#giCc!vfGkV9zuvZ#BlM@ zcJ6}DN>{nn6&8O(V2TVlqE39(qqVEGRR;NZ1sjGIgQ`QT$&u?$>0k^Ho_D)|)TzN{ z)heuoD^{iO&S9o6!%Vc#p;G+^nvd0gUZ?+G_m4-f)a=rrPc&ImhhMWCSf&|G@Ulu@U4A|J)&6swAeSTV)%A(nq^qHYo z+$N#lO$UN*>-fTUelUFiQazZ)8#nEm9Q%*o^6HI8`nFeaJd*pLuM6~iz3%PDMvWUs zC~q=`=b3>$Ys}-+luHKXljnR2YzI9Re+3p#%H(7X8<)$^(=^2t@1z0U>pC!*=yHCjnVp_GJqjWvz+ca#m@6D~Sf((yXWn3OK6aY9 zlarwLW2i^;8-#2~XA)InK+19q`lz!A5o{AaHt0Md*w`Lqk^vwYDwz6JPdaX^K%&8O z>a0sL>q|5_*+P^a>ue4(CpZrvA$TwvuG$c&ECvSz8R*#-M_{-MHHgCyH5RxAOru+A zgRh__CO~-LUT=6*pN=(gp<8Nv^1*T)=7fr1gc$8hP_?g)8z{bF{3P4K}s&6h$Kr7-Tidr6xYU20ZS>K~UTx`HT-xC*FF<{c+Yf)XZ#;eT6CAmUV^kWyx0|c>Dt6P0 za8Ss<6O3@W-ta$7tc0*}fQ@JMKAG_1{x0uRJUxNQZSff}{)zJ2N}A8$ar;#!F<#;P zn&s~5jPR#u&N zAE$Ksywhej9<(JvWd(?u(B#61{d!{nsuz4FA7(i)AW`K}mY@*SS-#x}DuC1ZuXr0y z&yBc0P2+-hjYH5`u-ZZr%S1yOH-@4Ym$;iv!ApZq2GBDe zJB)YAyUjeq-o%5Fqf_1q`(0w6!2V4BubE!H<#=0Q*U!S(wQ*jb-|pP;JNA-u6PRLAOO~y(j&80UPSzIjS)bLc#yJ*_Sw`ofxG1KAzyju zstoFjA7p+Cdec8&1I#!;?6ES$BOezWPq{5xX_D)j4}zGFZGn-mRryo`ed#c0P-P`x z=l1f2=hzk^pid@1exec9XG^^TT^`VvLQ*@&nFE$KR6%eMd6+6fPcRh_^l{KY{Hh=9 zxWZ<_{tGM?Uw|tr?}GynZZy4UTU!LbnGPylVbZ|JMXs?)%*uj%f-$5V2(XN(y*({7 zm8Yi6ra@5}D`hRkgRxQ#Z5H~%aC&MTh19pg{cLa_<-)yly=?QF`qH;OPZ#Wi?2LF% z)v9*9bpJGF>g_$7vn1ox9`#;3!YsBf;WyB2J_JNCv>qsMTU&(*# z*)8s831kNyclSud6tPTISX*JhgPl3yr%;rq|_9i;DKf&>4jKmO~NpPxo&F!)`4C_T^q{H+xM z*ukfhzDpR#8T=kt%oB%MgNJS(Hbn=sz#G`hcI$Nw(r;ab~zz0D~>^LTPD%1HCTIKsRJ0qgC3#IQsc;@?~)!Z;i5 zth3&{n-1DRlLPvakiUGO#>yCS1w;Ud!MoRr53}A%3&KYdke$gP{$}BoSqX6>tNx`>Vr(C zwN0p=hXOmbzc;(d6)3KJZn|J4Q$E+I#}TfdFP$bQ@+8Qb$l_^>%aerEmf zRvoRWy3ELLZaztnHBuNKv@V{0WvG+-{;t6oX7a7WKG{oR|sLMK@ z?OFHz_Dymw>g|{CvyH{X8RiyGXfH&*KSLt{N@R~4q#S1T!Q@ByncooJ^(brr13xUA zo`*rct!m~U>XL{|2yoZyK5<`+nEFiDg<$koeKkxc;#_5TKEir3_)VdcWJdlFJNE4R zx!jfCWQJi&i(Gn^Nq(3HCv-vsM=HuU7SG;!Jo9;y=P=rq^V1*x^q>D~-$D9LR&dxu znf{`RH5tE|I$xX1NQZCDkZ&sWH&0x*qZ*wu`okS%!ool>ZYtS5yy9dm?c!#Jb>DSzD^3_srj90V_$}6+t-axkiS09?mXoTQITjgVh zLq?QjlP*G?y`Ymygp27~xO~ySn=Gn-X-j`;c|gMlbtNm%V5y_il{^v;xgE!;gJzj) zo$F19t$?)XapD(Qe8HlDM+Ln;(&-r`*Wm10GWua5r}NExbeDzf!ky$^o$48CNUYH% zPeBC>&+BQuiC=XNEL_KVZbnC4CifA8k;x-TPvD+(e z&nX!?;ixt{+Q6VBQ_F;T1yBy$!?xt@YQVOgu4Jguzy0yEcIlTL)D|YQT!MYdbMXqN zi4F$Rx3E+l6J1>eI3JD2R9f;iOZIu_-ttM_^eE+qpowuo^?>t}cJ)JHqq6l*+L7~! zzvRnG4%=46!-)8zA?0E%O>Idi(dx5yv3RZe8BDNYw!JKI?kD-zcABGVuI4flxew$Q z@t4LO+9d0VPV{1_NA+(m{!Hbt2(mp+SQl(pojx?V^CZ~T98@OmoqrX7w3I>7DJWw8hlv9~fllsEeN7WrfE z+ouc^vuOgAubx;ZQ}RWJw5J(QOw|jmdtu`aiuPMDcLzf;M@PuXxlw`zYUo59+9L*4>$Q@2(oT*AEJwym$-V3vYZ% z6rx7kMw3ltKux~3ZM0BI2j#_2y@{`9I7kj=6z^)FvTH6RsAHHR6ItP~aQLDlO~ui@ zyY($JtW0@Nd|%6f148#Vp&u|Fyhj_>#7ayw@MPK5S4W)~E7co2JGVJyI$BUo?IipW zX+=k){~RErs!ze|W?uws^F5^JLWC=d*oJ~|b09msGWGrXP2Zn>kbQdRhY4N$X4|tr zTK6UPrjG=dwTXR1(<4$gR(g{`{-f>DJ%+dI2A|Iz0L!V@ZM55yB6nrSXUrqfwAoRE z=HxR{A=|l9Cvoin!_&`IyIotcKIm+t*2ZS?E}@<^J(Oz*pJ|WAe!>KfZT0xJ>7gi8 z=$$uNFd|0SF!E;_xW(UlhyU7_zx#{ONUm~g8;v+&78j*)MX-vD&%L$=#- zn%YFIVuRIc4VX!v-<6TzOnn1t;=3k2j^wr6%mv$<4qSE)6B)MHy0$i->8C&Z>HqOp z`%cn#Gr@s>`s0_$jmIhub^@k)c&DcuFdHf~r@PH2qrr1~KG6cUAbU#JEu4v=`|R8N zx5|*Ccv-e3zqx+54&!1UF(saWs#gm(PH4TG_X^it@6&=x zf#afqWwW_im~HZZP+BrBJt_Rcmxr#{7J{?>s5SLawr4Uv5?drjC#-FeXyPJ(cXWg|W>I z?0VF%tDnicMM6;m5`Wh#YqlS>QlHt+nGq67Rz`lJ92d*T?PKjB(rlpGsf6k^ZKGnx4oz$L+InJ!>l;4)+dU z6}$5v1)mT|Kh~8~JGiH~IM0VXdn0d@k>8i^^{8)pJ9SwR%TLp1CMdpUdS{a19on9i z5y$86)wu_D^V`d~>BJ<4%oNNM$csj{c&nX72MMS0m6Ls6%MD zIUYFgeGM)$^PX0;07}$9JEO^FQD0FR2i0aeq0E z(j6=u&H-Tjtvob;glOd8d=1>=%#wV9HTchfq#PX&PQZFib&XZPd2#?P#ETGzPoEFS zAtzcX5UAsZRxQRhnCopiznwEtbYJyx+hzg2*fiUV&8dKg--d;>emxYbHEr`2Sv$N8_*N;dXN{B0>~eaw~5 zb7kZjDs!yQ@`~qfbNdavaS~tL9!s1s*1qztwg&- zJmK3!vNai4*#A$k|K?xqJ4)Zx1V^soz~mgwBmnPyiIl%lOmFouPaXy`x z;kscB-S`KGYWt(xycd1xFPc0UNPL?7=6bppJkaZHs{UO9UZfn*1x>#|Ht(ii3x_vh zOW+IY{LJqqFngITa9#DJ6XN=4Jq`u)nLm8OFGtM8Qv}!n2kpFqtnNt}lfm?X zmLkd+V(o*@z{QC*r?0VtLatQ~Lcb|Lf!mE@A~auwBDI-=3oFms?8@KINHF8cCOtc% z@bfR26%HZ{qfUcq%qI4o4(2-q*E{ciW>h zVB$RwI7BvZ4Le}_nKA^Q-H0R4qloP`TU#$t?t}jRb`x3tY&E9?^8yZmE&gdh0Mhxy zvHmt1TBsTWLhk<8fCO%`oha!H74c}dr6)(T6Sf5q{%(izXC}TT+bvcGnaIM;Hvhxy zMSE@co0GbDuEm!zv@m;ajQv{eY|nqd<-Vdjr{H-#BiaPd(0_r-6*QNZ@==m`k28sM z2tJ^-E(hWM!}l<-3Ycx6PKLEXg57 zv+jV_-a=Z@Q+dZmzqVDC2W??XS)RC@=;;%aMQgr@gBh>eOw+XXqA&VkI{V4(_}72; zryqZ^?xqMT*a}@;^;|cM{nvo8;aY{Pbi#ejEpDBxYF0_qSuKFcCb#)&1T-- zVdYjPM)YE?^9-l&B)>&V^WV4h-KB_>WG4NWv}uF=EZt3{jI;AUGkpdI>%Me;Bp=!P zY*kkJdhQ&$a^BgE57(|8f^*OblZcSZOGi(NHMOyjN1a>*7=eFHjI8b@k;rNQ5HWm`fO^dfxeNYYRTO(GagkbRf;bgeqB_8&NgHjy?U{mExk&S2hk+e`)( zT>W~s3Zm2axbFMHTlfdMAX!J#8vT}D`w}f5ENabnQ9Fn}+K`ZwViyWniJ-~bnjDRB zN45`m4!c1o%G5yu4 zRxx^>_?YfaZ@q2ywRAJO>|tq#hztFQ&Hxsn^K3{oaJ$BER`@|6@a8TjWtMJKkHnved+Ph$R|2-5KX*qJ`|;A zWz?wYcy8Fn%9~f@&RDNfk{pZxzbuvIyU+Hd3 zVu3Hc2kG+WI|TQovwCl3BhK6F=r@}N8^owLHy+!If{bfc;Z4TADV5UB_9ppyJ0|Eu z*-}X`rS+Wa)H`uFZ;7yK35g?My8W!_B5c3jzSwcoWW#Z^Ml##V1Rw#wr`~UQl0aMWrV9fJ}l#nNk&F^wtmHL=u2yokOW)2MfAq1 zq%-@62G>m|Hx^CeH!N3R=+ycJo2jZt*NTi%|E7njtNob($ueIc{q=iWz41uj-wKXL z`nT&Wjz`+sl{D%$mGisvMO*n%f7p4=)dr7pQ*NSx44JL*X=m^R_Om(?%zDFVH*%r6 z-r+ncYYi^!{q)&E|A}Yl5PHIAh_KJm@k{W0l{DyJ8`SE=A6J{A5FR|>22Xn)dOPZg ztA2B*7lX81*KF$4qnuHm&7FS)G9Z!gd&l9J9pvpol@2^WwsO(U|E z*KM2iHha2bz-QHtNuOJfEtJ&W&H;y)-J7;SWai)^&fvJ7F=#oZf&JjpwQJQt?HN~Q zTEg%qn%^*HK**gwfqJ|pS!K$dUU~v>eb}})maosU3x_9nY9~=<!_6WVhTsDxt&&n5T2ND&E@u4?`Sj;{cICU zR?p?!=?cDSOCR&jekJ7S9bDK4w-9EW;T_N7ZEXZL;!IZuO?qy&zu9c|VFO&AIJDMo zzQ3Uk&j#8?#kRYxlyJ{2InMY*PK+B?zU+F-du7q8fr%$KnVZKAyZRy|a2=9Y_D}Xh z4t|i6 zJ}ZxL6;fjzJ#3sj;uu3{y3^~XTOj)TSCU%aFFJ7IJ(^q=z{!`(cAXH*W4+A}f41*1 zeU}p)>nx6cX}NYgc*IR+cf8$RIl%OrGWH~Yv@5@_=hplxOr2*Kgw1}(2b_49*v<3Z z&@`lbA2OHiDE&p9Ebn$7Xxn}Jw>R>)W&R%N?}g_=HsI?)2{eDZegb=J%(!)%XVtv| z<#@JrVn!X8s~z@<7*Sj9B^)I2EbugzCD$V_kYiFyd}aZq%e-!`JO9>=`?()XDX>-U$W=rm=5Xd1RQi zT-mpQ9m~eZ{<&S-pG-PVy1K5#9TGmV0p|Z&j_q7O{!(U8Tv0bCAxlQ`TB4x7q9QmSYoP6Qq07_Jc|IP~tb;C7TD+&*kp6 zlbKnbrvR!-{2TcV;#XJIaeEO0-_hpkpcFgX440hFYhr__C!GcUg4QJ@w^rdyrJhVeu)93~p2_JdpexIv1 z9_jmB!SP7{^*oDXPm^wTPcH#V>ulVH)XJnk+j?ic??F!Q^nIuU#z{fYNY{(h`>2Xy zhQin@r7WlN4Nt$n@evzJzkxB9AAoTi^uhcqy5CKof%93MUyH^q^$yJ}Ck?!Hu1{&` z9Wj?50-%+jeefED`2eOeND;ilqh~01LPMYUg3_YP;`_pDluV-I^Uhb!cnuE~@ls5djL>kb7CA|J-x%bL}) zbw1>;o|j6a+7bj~b=xr@cVd4rXwskDZebw$y*APooK|t$$eq zcfcThOpsb|15ZJ6a=o=Jr`j+2DHoE@$J4~vBm(}zMaq-;8QRT@+Pmb$!_`%hUNw4D zVyztneXGCGvE;q-YsDJ~cC^SUpJk~pWPRC*xXD7JZ#CQr%7we8O;+bl)$@dkuqQ&* z$qSz#wD?fatjk{S+5UY;xV>O#eJwe_d|)Cy$X_%%`Z%cf3F6zW^|>TF&Oe)o;+}1SE!xBO`Vs$`4fNQM-`YKkbN_OP z9&FkuF$L=gY>PKo{O9$t!S68REI9vC?t5Lm@krn81PA{8AAkDNdjGOJD6`EN#b>z9 z1DIE-8=KiSLGr48zQt`u--;O%EvpZ>^JxjazBRthG|+9dJd?qzRR@y@-vFC+`S)4k z^DSZk)BmROcmw#eGOzf5w=8x?^eNb%O5GWgd=O#54gM{_Zw>r%H4F#jt1c38fwjBN zs3qKWcD`S8XO#i}r7LhfeLdrQn6^pk)8pD34YhrMCr3Q0rqk56-}W zqLVD{qSOOB{H1F-hZT^6{Uu9J*uevVZ=WFDRke7lH-^aA30SHH{ zwXIfptar0)KY2}hYfw75JeR$MX7QO{H^{-KatLOm4+WF@gE+z$yIhQd&mQFZ25jXY z8;qDhi9AnPhWrVh7yN#(X|#Xf+IJd&?0?`VVMDL;nJI4rj~=q%c1)LsqR}s1$^bs- z<3UpTtgySFDd<0}DZ|xXZmm5^vc7)B7Wj>9IUSXW6xakySc1nR`Ms)A-@YX@eo4O? zW|ni{;bHM*k8U~<5PET>d^~9*o_rv!1z&FQRRj`OZwpw#>~F+ZJBJ?hNj*M9nh!5^ zV;Puf`wTRT4jxj=b3((Hzm(IKR17@%K|Vy!P#_w}ZV>!)Uq5a$s5(}Z?Yss(zyO2F zq1WkUy}^xV2mPAjkrjQdu1silxJEuc^1=#ZRZgvVbg!>&cuZ7VMJY8`(|I?d8R<*h z_z>N-tt$1S(c5FTZH1YetfXW=s7hmE(-J@teXKv(uKa}{+E!<65{uy*tp-d^P2ndz z&O2thH+|s}2T9Y&-?x4(VH_o+1cH)F`08AWdZ?W_Hu}E&``xbIc%<)l1;-U2i|x2f0v1dfsW7M!Y>tmIKyjH;u+{i5K*Nv1ABdcg`=%za$dU&)UwJg zpeF_3=3x57u}1+4f?=w!lhQsWArO3*4S9~zGc0JGF?G-<$PbIdqQrlo27|GDm)JMI zQ}m?Q2p_@bwIO$ zaC3gwN&_7$GBoD#y{&~tQ+-L1G#%9o(xvXF+4oP+j=sI3zqd&tid zDS9PLG~{;kfuj6&Y%HoRaS--TG&u`5DRsyvaZ4tJH+}+(@6X$3;Q@xxVv?W@WX4j!PCpBH z(-(B}B!rKD+N6_NB1pI-dN9^n?G#Ai)Xm;)Nk3x(RA4hRjzU@ zk8}>oy>wo-q4F=Lp(PZ@HYs4FgF#2L9Wb7LwPYS|RrpLQsOGz4fDnBv_W(#4+JKeq z|N7%?Vz7DJ%A!G-KMc9Wl*{$=IGps(jQiC&CNZVYbt3zFUcK>1-}MAXuHry{LPoq< zm_V>vRblL3=mIlrd!wumRnxHz!HMl4?%!gt!+nA?VNS%LaP*0n3GJ)ozp(6QaK1BH z@M>~ks{4y46uxqLXXzZLtqeQgrFn=qt+7Qz-^vU?4Gm5~Gn;G#)JdDMv-f3oHL$B{ zUT=&*`aQDk6~$ys0pn%on@)RCru|vy|8&ru3re+_LM1c-8H`==gAcg6>^N{T(d+ZTIkG*$yU`B__)zT!pdKC zgq+h3Wkt_5c~YY`kTj`$$d7a+COk<5)RyZF;j&kKOINrx&*|w!lTUqGTamP!g6d@0 z1GHSWTg1Bx+-m!nl^oB4Yk+Fu2O54OoaW7c1i-_jzXaDcGj4~V-Ie!Tg|X-e8vx~P zFoSd7I_((f&)`jfH z=#4(x3&Y|+HI$+u^^W}<%1+PRHqcM_*KeqM_N}ffOiC}T;QJ0quazGse}M)nUE7k4 zPLfC4JqjI6@hZRg29yx#!>nL5D)S!vyXy8BhiyeBOZfTar{EQpK0J{~FBx9aDSj;ncNdC>b;MXJ6*zWSRZ$z}>nc$Q?N6YKIsY zxl`x7CN}c@a0GDCv1bPoppG3GT4$8%?3Q~$f}WhXs7Z%S@sc(61^!$Yd=E81V$k`w zX4~G{B!YzqN|?@=JaEE={;tL<1n46b1Z%xLt=T?3-a6@PP7>|`?JT3@ek_>y*->KV%9+7k>^#u-V!ri z0sp8zSnR*)0(5&vQM$;O?l0e zL0-+iY(rMHS=HHi2>hYMGU-Ao;{ub(g!s)dO!lks$?x#VPzB-1=3O{Mr#?q74;rkj zz9Y7=FdrRKK_efsN@c6ZN*?$E6=ghix60ENp2&=p`WfZBUXf;!KY(>vET_PA-FAFd zTZXD1TQx-NG^yG2#aOpG9npqp#X#5*6ExE~4wlM#ZT|_GUIX=^m6z;}Y;UZu7?s-X z`XUp&tBoVRz#yx%F+*Mz%p>EDF?D(Q#(>?YP*V0otKlFWA^JqT zNX(Lc-*=f>^LN1ynC{Cyz<5bd*&pQ=XET+f^od>0N)F#}tbbYF_q}@Kk-qy0j&l`< z(JGGYkg#{QlRxtOXWe^?7V#PgE4(bDx7UeZO}vxP4a=HAG`hUkZTPNHDA6*&$olsD z`CXa6SGpUJzB768YfNn5X9@$qM2P8u*WJ4JTDQQH3g7@Hs;?Zg9&3qbwH|tC&gxd% zL6I`ya+0AW1hIXrh;6I##_t%YN27j02yo^XT;5^(<#~G~RU3im`6b!gX#$ zDTr8Y%xr>4{1c;L>ok;#LvdRB1Vi^t;GwoX@Yv8?IsChpkM>1s1Hve|3XpHS zGUI8R5k3QzMs+v9 z#Z>1B%#PoN`v^pFQvf%xC)(bjZ>l#MtlhNJkm8Nq^k$bQaC-TX9=wWisZ z&urgYV`SuJ1{?cuBYI*Y$6)HpJOk`18_k>6SE_wg5*@n!jx2v=Uu`Jk5x}-p0%2Rp zNAcwXf8vq$)(33qo3;vsmw)@yk`7GmKiXElER^!AZ4oUxvaK|B~rCcurfsZVw8)3wZ%O}cX&tM9(#&6Y1R@BtLPXjAUN zu1L99_7S$obgHf|IBWH1!Vyv+gGhdu(a%ITwW~fx6B#Scx*vT+Xe8P2>c63glh05w z=7lM$Vfe!7W&hTFT~6K`VXN2xsEHq6_|d2mzqEUBf*oz{2{QpjgA0rYZ418`N9k9r zs!>|5oP4E&&>zdT0Qoqbwm|V}Xfk%SJKJse;wSn%XLTIPcB(D6#^h73$E#M-Kw#Q0 z8qvu3pa4;%{_q=Ez41uDi3yHt6^H*z%U!==crVhk!Q(W`mi6rZnUT}kp4s3$7p|wY z40&D2(Vx9Y+p3itoVcOKhq5nmn);Hd?z^;inSm_*Zkx(fzUOxwza;$~>iY|UT_T6{ zK|Cn(rZ_vasi8piTNeSvoPm1=s%|x~GLsInA268D8*u4lT(8e|i{*k&;HZNTgOP}U z@HAh-Hk}|AU#Jc?Y49em1c!#pik>B(+ChZ1C!XK`t}DjjRzZoI{%-E+kwFJ!a*!HC zN&9TmLMo%PV?K-rOJz@o^-jA&w@VgCj(8C5N{h367S7GbYR6yyV*SrN9z8ywCcfZ= zD(c&wIv-;jjL1L>R@)=U#<!}y{_7t=dX_e{Zt-*J+BY(QH58QL0Lbelj5J7q3G1%VrMt=LEAY;f} zLcG4-f%ZoGgb`my;1DYGkjjNTm~V!b?F`}JY!f$iZy^4y)cuk@Vt0%6(EaoY6eyF$ z*le&td)dD)zHZNQK)V*AVQq%X?o(?k(>?LFu7ii=1+UWKU!*VWw$`yh?y}oSohLgE z+e+4BTZ|1jpnsxX}sZNz?WIilF&6p+I|HLe5io`$w%bY8u9;Ba<=S%+-^ z#)CfyKwFa%0Ujiy589r!%A2?=J6JA9;=3NJuI#+}UJhQk zwnXg&)`>N-V+Zv!MO&_%LC0S*wr&E^4*9$A@NcM-bM^9ly5)^ERbP4)?`E4G_*Aa^ zjMn2-e_V$r*@N(lKCDAeFA8B29yoN;-?*&{Ubd#!ip`{R(*f3R{@V|R)jFndlbU0Q zSNIa9+jv7h%ENVejP!oV`c16fc%PGwtvfeJSoco5T~bu$gapwVBa{q z8SDVJEA0!E;=S6X%E4#)VE6Lkp4y+__g3~*nsB~T_pZ%0o}hov>c2C&HO^!*xhwbuQ1&#^^B0vn=J-4SIBO}c)RD{(QjUG^DQk6hR>2H9Sl8U6c@W#m!ZdeZ^Wl5 z{tn2zCJHQ66{T9Bx5w67YUu!|GCdXF?u$wUl7rNjCJ_vBpET2Unv;Jg+j7%3i}JiZ zA$2lfJ!DT?SYl#|QibFJx85|?yK_n(R(j^7V}`Up?IJ)V7jGBKt^J&RNKM#igTN#h z1wVgW>%bXHr!U=}4s;6+DG={%Y_M(X$IW2ht#pZ|FiIYD5xRHkgomGD9Uz_E&Ju7- zJz%+5|1;w+5nS#$&Uom945&ypIX%ncq&?$c*@wAis+zh^nt>Y}6bL6fQmq1nYQ%jbjW^W=`b(GQ)mU1r8| zT-V;^Uiw-qw93X{JiSiTp5*p+A{sWkhdvWOxc5n(*QLuKtxWo)9`YAu4E1d5fPV67~}e?F6lL{?YM70OJ&D?0s6mDdpfkQaD?$8GL5+ zrj5aDn07`Nwb`AzDxEC5k8LiU^_vt@uJQw2SrWwlZY;jupvl|arKh~627Q$P`zS`s zt3ZiV3&5?biwV;D&f{vzr8}`aI$aj>m$Yl~?a5cJGLYbb z2-)s0xfi)5_bVT&pbG|izajxhwWaDIgdow7^Ck}BEH$zQu2#mdUe^i)B##V*p|MC*M2?vk@4RRxx44dc`iM{ii9)hXMp0rI9Cihxx7VhHV2~uW8#F&JwT8 zjx1|~($VP@w9xC2!}OJmQ7_uBo9z=lMUo85#r{|MqrEX4>_5JaE(=gP}!ra(iZJqpC;{y#Ws)?tG5$l)BM`WT&Q`OLfGks$B?A^R?RZVAXxdn2y z$EJcCU1mHX?8}Eh2K<(~uV2UUuJ{c;(VzF+Sc{MJ(>2iMFZY1;$GG+B5MRb+Rwh#y zrfo=EP=8dD!O`DoTj-P`sIQLffff+nnAn!oWYl6;o|>|lkT{zHo6kzGz5emm__!PM zAS@Y@&3>lHTz#D}Y@#n>J13s4%jH^a7qK{`UDl0Ha^)4SPS2mGadYNm80veV_Dkt_Ev@F0Nb0qr}YBIHdAXib$xewVnD5; z&uCvhvwM<9IAaI>BC*f@R6W;UU~VUFzjr1#BK;bZ8t>wMTj!|!N<1*kN3o*e$}v3z zEIOSED*JSY8c{(0xO}cx!|UEnlKHxIYi$*QEAO#(*N!VIcm2)^1dpNyRF9xzR;JO6 z2g`ZidFC=?<|zy50Ii5)IuhjWbn0yv!z~#_QH>?&+!1ciNBP5)m>j{kHZhg^bsZ}w zA`k$Q^(lnb|=C7VBJDM6h0`!usUQE^_k=A&{b=}2hkbN*snVALbj5colRZ1 zdsXrCy--uHs_YGZhsB6AfKjC*nK_q_r$=%nZEyyV(PpY`3j5j;Re^HTZSkSqW>^l~ zme+4t6;E=2bO(ETt-I=QjJvK;u7GUV7c zU8H6Fi(d5<1fzu0V7Q{7Y^Bi`K1d;qG~08Y;;pdt9`l_v+j#LYJ$scW3@`fJ_BdpH z)dw}`rPl&B+s4XAT=(+FKpWMjx9+Ot;VU5h0~D(?@0_suJ%ksieA550qD@u;=LwDl zCydI`lrF=QrU{rd47)CGx*hi)q~E1&SGVj95Bb+jeq+9%>#;!j=%+6N*#?pRXM4}u z&fuuByKm0P&nZ46`RX<&vuzSaCea@myt;z;kGPNHi7jcHs`n@zNdB@j>P{(m7s^Z4 zIceQj9sV}HoWkihHNk;@`s0_$jgP;)EGUMB_S?&nvkpa{s?QWP7`QD`_grTqc7bWm zLtxxE<_^E7=RL&x=`(OxEYJFtR|(A_C4AT4yLxx`9ZtV~1@D(6nUVhGjpNn3uD)i5 zS*tqrXh}NWNuZt`Qgk}Kqpn_M#Xa27nWYo=+H#Tkq37Fx!b}yOpF!x7=(1N^&-Ktn zm<-&xW64`+r$pDDJetCcYnKN^3i}|J!Az7FHgcdCrP#Ni$(Q^{bdW4-zY88r`N%)C zHYFG!yc}pmTcW`Pb>uQJXXR^`46A8D|T7O%bhQg)3-YK~_x)naNvt z1W!dws1C0NaluK4=H1x8Q+*>I)d!gIHl3>}bve7}Ci5;67iK)UCTFiCa>7S6#d!ng z0M2=JP$jUPi0xkRLN?WwA>+Z-7@egNvL*AE{+96VD4COQ* zTUpi&Z_gUMvpCc@%R{rhzaNTPTQOp+QxpA6(<5~rR8O@Jy@S`Evu*|?v;A%JkbHt? z&+DNy?oyeffod{w5+pio&;G$j{KyG8&Z}$c%S98qObT6HH~o+z(B})Uw|h?7b1f7=TmQy4F{TV!pjVLl$u2MFA~}f54@iF%=5lFgc%@g9PoBS-RJ=q{5oj@^@ez) zEC*m;JM}khebRted_>+aN&You>z~Vi28!yIDrhH>@2%xcNpv_8KHJuC@y6fRzFND& zYbW@7V{>P;f&y69M5Fu42wc9)BeG?0hZ}c}ao9h2v?Vez8-ruf4>uWnofTiXS+q-9 zYFOl%S*=Kj0y4FMD9)X;6R%MYBzEk42#-X-dfV&0sw96NH1kA;``~t(k3xsRvYvg} z`6NesYe3Q`suBj%vMT3Rk5x8lB!AHm%F1yvQ5ch*FGrSV$z26m0G(^(ROlVg@;vOt~ z%(;P0W1^-%nB*J0bbSc@TVmrg;g~jQlXcx?9Qh}neh6~tT3gi#{Pct2&-NQjzqtvH z`&Arn_mdMoUe&C*9r7-T7KygcQa14kzoy&jelXi(*eD0=2aioC?P=9U%+y2tV3dN z@Y`FiI1b>W5_fdf;i$Z>%GbcJA5dqutw`{O-&dKm(^h^{YW6P?w1ik57qP_j5NQw5 zMNQDipvSZ$jjC?Ve|dGz(#cmH(9&v+D`EOZhw6qLHgcPNIA3)9+jf(REGBQ4Y{1X5g2EAe%%`2Ym2dyd)%MEJtn)0A zK-e*IdqmRP2hld`f=N@a_MtO5s_wEUgANY3ew$2=6$ZuQ+P1-OAGsZHG@64I)iLME zh;^7;$f|rC%kr@$p}jTBfdt7S0Ugc$S$1A9Ol5qTsaJ3x?Jo8Y8<%#p*zG@H8u1i$7d2pL-TVFwtqgiS^2uo6(A%fe z!sXrO*v7T2mEIx;KxTCq;xU5}etI^^Sqk(Cfz4RgBcJhfamtOa?kQGnnz4PS{`r&o zRA@55O6|MR+Dhpb*m8+YY+(tVf{t}?u7IX0=N801@FTb_b z8;|tcTfy;2k5wG}MV08Jrsc$Fb#L#AgTAGj8*gSG)Ax)vZg{q>-r5ES3gfF^O6Sxu{W4Q@K= z{Woaie$*FXY^Uh(NHz&CI;syrl&8ddYzqi#Vfx+qX4AvI>g*^#KC}}JbwI#2i~Z2o z^-=8_6NLS(#P+5K)K0EJXFQKz8OYKEgiKVCp0x?AXxrO!UBSUlKfKMXHAMa8TlLij zw%TKx02+dmNCBeXdr+vXmPPvoigpTmW3ZcpR9yea_9?a{(VO+Pgfmb+ zjJKgwnT5yNl5?2VnJuPrOxd@0v2Ip_izQcH^@Bx|F`c0^Ys-i8+g055L03~yIWQVF zVzX`XkNpeVx0qn*MxQ|9)o~XDoP5<=z6w-DPjfXK%1-TSo0{Y#nIyAjyaGdE>%XTT z6#GXu8B(`+;;Q+#(5sY1@x4uSu+SHOTSML6WBv?rxYhMt zUf8InT-HHaI|G5grN^U;cfbV(SH6)5& z{s}GIFLqcGaJkxf(m1s(XLp=+u=eF+)@nXr&}c}Vlr>N4$O{K9-(Vmn>S4CMM5B82 zVx{Omvi|}3=gzLLe)BTps84d^m4RH-nMcku>zaT4o^XEpH;4VzeuL>ZIl*zR;`n&1 z;&79hnq!_T&jv-X@`Zx{UbX)65mjm2DLOfdC(W*YQ8 zOK31|3*kxSPoysMZNTjM`?XSECf}doXYle2-OYVA5pVZ6Qv}{sGu(P~{a5|oaqK0x zvK$aB=U)3#?HWXr?#lKUp|LR}Z-axT7I=g9@*9fp2v^Sg>rZ&=X3qK7Bo=6g#c+z{h=3c-uUkHSflwkgtj=(AY-e@TohcZBnlsxeh^=Y2O0-; zT39CpPLr8Y-ja2RENCJ5E!n2bdK-XYGJc{xdFy%yGov?{TeCBaDxZ10jYEdb#~EHvROeXJ&#G0MS;myjNBg+_FsI) zYKxp!?ZN7{{25k@@M>bigJ@|F`g=?Wc=35+JN13#kvvrt82)~+ZNTA8p5)V1mR4^r zVdV?iKZyOW>gxj1R!7n;bACyewV=CXammm1*|PsjX97knkET^G+#VpBcrX@32hAiZ zeUq#d>b17J=9{tG7eADFF-UCvd>PF1bmIe*&eex(vZ+Zqo+7BXyRjVv&3?=N=MLzG z)Z5G^Q&um^kN&@U9pTV;qonFA5^mo5AR`V6V_?ZTljVf?Dz}Js<2v+~d}HcCQ23c? z60J+-pjIlyGO1TIsw{@M zp_9cptjAMEbP#VzGxXk>FXiQO6=;19*C+UF$IZ7=gV?B7>|Ys|4Y+uViO3F%JeGUm z_0Vy`Q|=bpr%e-AC%%u(zQiWD{z=F2=ilP$jYs-zuHbm2|LJiS2mW^H1qYasNP**i zGw}HJx$X$pZ1AUA)u#YIAI`w~0DUMTNS^hHpB=;tjf!S`7C!M=a;C+5=8H;kJ;`f= z)$(uyl2e~};QOyNDIt?tZ+X8v( zq#v5ct3_7b(6NgSg6~D2t|Ty}5%R$Ft(99%BADeHynx;4hrF>r8eepcLum;Hxu}(% z$6!1spBgx-RJ5X5-y_JzvCFA%1M2Mo1z&Qa%oX|9HW9>xA~#(TS@%8=>wmA#F!Rh*clb<+K`uk81Ju1W zxt6Cn(%~_!M0-q7pP=}xt=@)5mfiL24pGy|^XJfe?hnMy?&OUfZUM7C>8foz4KK0Z zkF-!Z=V`#*l?dGG;2K=6a5Pr1%YUqAmJ|3Q6W?fY8d^K?6sw^4Ab52AAVy#&!AaN# z_m`<6Fp=jKcl`8+KmGVu`;DgG>;wn?!yo_lMKS)vlM+_eveKA}(2h9xw6J4!wpT30LB9_s9o0c4K3TuvEue#Wb+=sD^(IAw3(B(F+>zL?}UVuXf znbeqR8r!;@_VO>qlgI{L-y_eYZG}eAp~KeBo}oMe5i)QXA3mBYv0h%BF;5>@i-b+( zzYWA0UtGJrmBjuD$E_ZP0+22zAW+$(BO$o#)kqhe??Gf$+eAB-zhQkI&gOD|&WAM^ z-~ewbOXbG_?2s>H-OzI9554tl&&t00 z3`1G=H~yqPY;aosCXoJoAY|*MhIW|}?%Ly5PQL=)^D8IEvEE3B1T=iws zfmuT3{*ljQvc$dMpz>0!Y48cJ;6=(N(Vfl}&}NyTU2_G3uRtz3b5HZB!F)YS_^eh* z9X)G!WUwk~>CN6rhWxpUkj;nFJO+PNJq~94usG<<&qFkis|`Yb;Jbf0Y2arr_UGBx zdg3a&UHMq;l`Xd5R16d4NFL*a%E!$!mLu0EoJq%r(!0T7cs}Th@8v-FmhSp_D4x$W zZhUZCd^DT(9cLbd8aP8QFSx0(?pmMQ?<`xgIv-)dCVrC6Y){sS#RoqVda>l;wog{F zTxYq*c{{%KUso9{c{BdlrWH0(_7F6zvhdbE1wYUENu6AItFEW*x$1Sw%Th)c4Ie^( z&?P)Q%73ii^O`*)ZSG^Zp=%HOW*&mR&87lY`8Fq?%Q7(LKM7f!GX5;>%|;d(V3@Yr zO>?BY#gysN@y)02^|rho7HoB*0AJt1>TC zSVcpZpb7=zDT^Hg{f%B@y5gk-Y~BKtxPJP>fA@d?qy2`{Z+DAIB)5OEX;zfqT%{Mk zDr^aZ@#O1h6X(x}^Vf%Lp`!sA$elY{&R)tNhSsvvVMQej{9;7>ehM~vp4lz=_cO5_ zNO+OE=Uk5SS|^d>_M3KlLf<5xUn;YA@cxoS^dW*?EljM9?Xd`n9AiWP*Oc{++u>Kjf94{o;xqd~7r zsIK&7y-ehVq^=#*Vy&DYX?}mbagXf4&*>I!)`Y zFS7KvW0oL8R@Ls;gdSud7Un3cHeBgcyw`Q?`S!(M@4Da+4-oi4v_{<C1fRt z@nF$o%+ijDXPq5l{9I*?E`%-3J_UesBX%pT` zbnI-cRldnan2gbu-K4*-VC?cC8pRkK@n&(bfQ5czEVMqjDxB&Tq$Gf%!jc_dxpX{Lkl2-H)*VgL@BXjyM(uVSv{ z-RF)%X5@+V1zR7~+vsbI?Y4F3^fokji48ng{{@1-lcQ2{wMnN(60lM)*C!=pX>&1{ zcc8-+eZB3D9BD$>KIyWj{&kX`f|jBN;zGGxOmgHoT_=ewa|*~eVH)`%n7#!ZgpQDC zt>CFG9W*gxMSYRm-;N{)3upxXv0CPOmXj)HabBj(GPKecN!*@6=MVS%t;?LOK&TGl zLDi$lM7D6CO;#jrBtX_Z!40x4YjonI9VDZ)`3Ok4YzApDiL(Z3?aYCF(uZjRl_c4V z{Z~0-8w-G`Qe^3xAdzN?D96ASCDquAuf42=kF69@@1HWNx#xw$0oK5IP-y4c6t^R_qOPR zQ?u>BMn-&+hQYpx2i8L(yl2;B!uoOqf%JS{lxtsL%P&PiEVMT=IAQdg|9TaJ{-Ng6m3vXDei@wYhl^EksxJ9Zb7nuE!+C zK!XNc<;KGnxeiE%)^sc=HXGkw#etcj@78@**b&qTiGCj>>hMh{^GzO{^v0}29=3M1 zgA0A@8R^I%>+ zR}tpZ+MwyW;_@tAYyK1MU%t~m+)~C_E^I(1^BVUQo4F~AC)?abJDa-d)E1wLoZPCR z&K}Yb1nHMO z=_44a+lwBbGydqKCMc)kjC;L79KEd%w`zns6*c{zN8aq;-3v|B~FnQ3m zRfEZ!%6!&=S)=7H&lT4I=04przGvY{b?Nc!P1MlBvSnwiU^8LQp8M-!H%)t+@F@ZR zayY%*SHSNt8I56F*Qp*%-oU9D3X7naw}XRppAYK_`@w`GR(15iNZyRBGSX3?>2Z|< zE$t*K>i2+z;#O#81jg=Er3zkYEO^;QakdTgK?t{*hmgW zGB~dAg8WfY!7_@@mX~;1wwuSw5;uB*_mNP}{pR5-yE>m_t;XPQDToMh&on zo(>!Jn|P>Ht~7Adfwrx^=ZDE4hvXy-cpD7uge2U$FN?d*hCq^3yCI0~w3){;THfcq zVDYWsGNOy#e2Z5w{53#3)D1>>Arm~V^`p-tJWfT!Z@Kk@r>(&?dVcIep_dc#(u3%| zernRt#tF;N(LsPpqA@xLKFqPnNoM$0NAGtwr@FZMx$0jdsH=^b6#>dXksvrb z1_HV}8S0~>!zMgu2@aDx)zBb8nwN0*iPh-Tb#IH+J6lu#M?qqglPgpy1Row@LSHVu z^5tNyBwB+qqAXx0ZRC@S8lDWIA*(YVphgx4-u~(*SAviliY$%jVw(FBRO@1C9d6s@0g`IcJ3?aGqP!w zOUl9yx#mD~8_b-#&MRhY$=6n!FN}?D$zpdGEyIG_D>w=!Y)v?3ZPF+ zG*H_ut|x52PQ0Eq$^PA6=xWN5gaec3=YKI_5|913{36Wy`Vk&fvz$AJJB!a~h26;{ zx08hoM*WBKDt?;Ea8{DiaF1kAeQ5r5`yuKRfC|;}1Tk4@+GB@ZvVXgzeI&i{K7f5B zsQj7Z+78!*CHazuRTSOGg^)|W@OtUtHenxn<)(6k$U+nKMIN$($tsaFzJTMlfBEA` z8Z~4H8u<-B$2LvxF!U2n&$CLG-$(J0Y&Ct0a{MwUXzbtu@2*TXPgV@&tYn%=`nE}z zd!3^-FSH*rY(Br@f$}3RNWw-Nt;{e8|JGInW3qpy(V)C7|L!Y4T}k39UZuZI8DOA; zf0yp}_VtNwB)lJvk3ZY*=}f;*aIA!X|Hq%cXvkkaQ)lz9cZ093yqDpF>h&@sq4qNq zd+Gt-1b3WR;AaiS4axbe`=EDH_AtGU+s{iwJq$&f&wdZ|1RL+=z4Pqn;Qu*E1`-Rj z7PxYp4-M@N%#S_pZ@w76}98m@ZY9($Yj0aenp;Bz3&v>*<7 zgGr|t_Lu&lb$G-o5vD|ed7u>--T@U492DdWf(`tgoii<5Cf;0F*(m$8RTdP`>6do2 zQ+6vF+6NidbwuO=j@kptZ~v9KTzA#K^~TycaG_tB)8Igpd?SBpDCHqKGU*9Smb+(L zOv{!T#^NdAu^+y{nUCGF&5Z4^mEH8dktFvK$aDQpyX}K!tT&uspbO52QkT3r@$3^G zI(H`UqS|Jcwb8vE9xGd?*4t9?Ne(*KjrU>mK$7T-$s1C=YzxsnsBRli_;s40^{h=e zo0+wV$6DoMmT!^4<)#$Rcp{6=ZHe}vWkeTwv4wBRkR}OAHswe7-6vxeI-u>X&#dSh zCq6CZr(eS`8sGOev4*ofgiVB6^*MCUx@S9l^fo}(2cg)69`8~sUCpaO=dcd)_3(?l zgwkvn+tu?b(U?NB)dir>k=0`e&PuJ%$&QOFW4JE_Rl8P%HDVVkZBw4?j)@!yoyR~U zwN>|>7=9=JIu3f7F9yOBE%dhy_HBS+J4_zG@Z?JR30jppu4X}N*rk--hMCObi~deD zB7AczlT~}!&Ns&aLzX`en6LnEGIw+c?_IN$yrW3%}=2o2*H2$6x>5 zpMLzweotrmeS(A2|8)GvFaQ4SyzXy$BjK)ci^`wX157((e_jFDVcfwca`tlAAHr@) z&WQz|>i7Wn1%3X4KE}J1cl&As_z|bs78~@w8}|7$PIUR_%75+js=fH!lc=)yAhtW{ zJKA3{9$XgDO zy_KVPcen`*P7%-m11sRnAlhu397x&l|q(I87}!)H}lNFD4lcF&2JOC&@m*W=_>AGDRAG#TVS$ba{J*rAso`m-=>8p!%c z2exthKGr`W4NbwgdI7mPG1frFea(f`*t>AeDgMqf16($pE zsjJxR3iL0ps8Ci|=S^iPeGc<#)kcAu-{@}xCo^;boVPUzAtoRN1J9CIuH=B~F_(8} zbaJYnJii)_=Sg59>n@?mpa+wOfRwpHZ})v1db4Tmv}q&o)Hq252;_{YNAX>WQbu*m*Xrz5ZF3(M4qPNth}CSKHRde^T_ z)hRGg-=I1;#fk%OoBuJDXI5tg(G|&8pEdX!5YH^LyEfZ+KWv^1X<6wj?5E#XZ)o~` zf`bzN!yo_l#e)8l4sQt5#OHJ+dvd#Z+`GWJ*E1We`e&pVy!lOMGT8a(z`G-PH%Qd$t$Z^7XmukpCejR6%X<$8A%SOsqdwI>>H~jA3|#DB`B_Zq5E- z`=sEVoJd~Y+w#%GbWV*y2LU$GZHgNm_n@z6Fv-8=!k1_<$jqI2FAIBs;`E-N5oHf1e-NS6etoI!qhga2CM+B6(iUt)mVSqz;!$Shje+}mq?+K*(LzZ zwn+dp>xUt;KPlJf^wVWL4XId%$YbM)y`tweSe%@n-PDl*de`Y*w!sq~yKc3%2IhL9 z^IX=U{$eDD2KngGR`d<7`15=nDB!JMg^6sSalrnkpi2K)Cc%tpz0ROF*jRk9PQseb z5FT%S=JE4kfBAj&hNj;qIC}d39sm4AseYQR?O7^UI6j(EpVc4B4EOJl*2|4f4O(`h z)8n6T>bHfSr)PciSl(@)>FiGSS4cmHy?5yOd#>8}jC_FS_%~P_xl%_jZA9?4l@-%( zT;I`6%IPhjKo1laE%E2iP_RCczS&SOo_pgNBVZz#-#VM>G^mr!z|WdIgH$KFm4?oYbyp+?)AnV z&Ata%n@jwXaS(3l&&VFodFj_IQ-~g&0sN9l9$egcPW?u+|HD+LS-vi`Uqz}Ba9J-{Mu*wQw&d&-j7DIC&G2J8uCS zaHeij$0mM-_;c;UuSt_jcYFYu88F*pir8Ap-Swtarg~u7hAFUK4h=V&thmqW=|)G$ zZ`{^#yLr~HoBiiw!m-&f2Dq!CoMEo|d0x+cPk;E||M<`Ldy@3~1V>BPDvpo; z&~nF1y~ploaPxa6FXuC!EkKTjeeCG42KZw+zrSyOZHGy;{M-Tg&_|3o&*$W9x!18@ zfd8G;X&T$kw5`7eJ+I&a_ICOVJ+I2PJ-K5i6y>rbnvygi{WAWHrsn!GDl^rGZbRDu z#$&WRm_c+_UV-d}2fGM-eFbENQ$1dp<`OshoH~7mzctG-1Cv3F72Tk~kAhrQ=f2#T z-=}U9R!({0pE&Q#r$N95r};9LEe*g;f-D%6s)Fxy;`+&IKhvSMJnRXjtG?SE2ek-Z zWnxNMV7f#kGH`z4RIunzI$9amHayRNIKR^4wQ3vmmwH44pd2UEc_+@Rnwn;8gXBPh zp>5IoDw0u7QG6K`$t2x+=94T|+aqLJx*&K{9;R>{c`zbYdGS8{_UzPwBkS?oLY2v3 z+aw0#4FsD!`I_t_&YoeplKnfwIg7IWAHr)QPd!7mNd&_Q7mE_+5sh9m>jOJkDI*21 zvd6+1cHEj(8sL;AZ*8Ldq^1ssb*6)XhOs%zB4h>Ie2nxT{p&ov+X!Br>I5F68rE#A zuXbUl-t}%%no2&j3z)aVcA2>HEVTASIxX~?39l*Nnr`9)X*axQ7U{{-!)uFS`PU2N z(56gq_s^JUz2l8~4%hrbgH}EsP09<7ZD53==WTY|aBy1)4rqC! z@^?7K$)5F`{UV=dCdS2j(QH9%BcMWl&nwrqGT}LL+iExvKEBREMQG{E<0@7RPvtiP z==zEM=i~&*Dde%~X_wLB%{fl8;OEcwd)gB0_cSK|zy81f`!5do|43JO%+%`M^oI&%;tN z5KDJKrqP5)e=U^!HG|pc;0kmt^6qrpIEO^#i=_35zlHO9*QTz30Hk! zxJlQCKF>M}_qx6~s>53Yf8-@C**+gBX&q$Aby8=S zKKM=t*1Zh4Sk^@Q75jb=KC`E~18;V^>PO$6?M!+uZTc~^v6cLY|CB}gYd*X===&(S zr`(8M;ThK3?aU?nKHEWT>!Aw|`JmC;=t#cNcja8o;O*_4CMd*ol` zu1T*;AE8v*>rbM0+M{;B#|_=oCv9+;im6`DyGfX?T{F<=y%fTX{n#KCrm=Ey>5{GQ z-<)b&D<>2O(Q~qdonGOS%O9pXZPmuxq-xc3>;qu$G=Uz%ldqbjYa-$D`Q!SmzX0g* zkCbaNkL#%0VNUfn*)_Qw13e?Ht!^*Rdde$0lK;*p_WbSHr3KWhc>tSlAn`Qw21osQk#EcZrH z@|C-Tev!o4e&y8V$$UIRxlLsGe*J6F-0|Jv|7vOC!}mawpKU>LbBYPV&w+7IOI%lJCU(uqYT$mi+0IxCnx z1{57NwMR7CYKSB{cZy)^&#W0N7K+J`mVNj7X;#UzMrualpahp|sXFT2SJwjtxmD~`P~ zuJIj&{B~OXi9S&sgU#a+!cRKHeO>eA(y^R3+>L zru4A!^>$)k96D;I@$3!lMrV#>pVG>F$^QZVf3)Azn0}w&xJmf;fBextKK?}&_QqJm zkvuEc>b$ecV{@u2&s!1PR7C^+Y@jHtP6&K2H{pDh7~D%y5#2F(`g^4AyEy-?`rLW_ zLYn_xJinFhXuOoTvg7f*EJx$Ah?S?jNC3URM zbyqNjMql#8otafW%g^r&z2B4adj0a@l-$8zV}OCr?x!fIcc#^Cr_H_5)Ayzmj%d+hG!&@TSuUR9i>oJzzQ7M*%x6a2q?<^tSrn2s3lEFo% zRYwBjVeYDX$$195ec+156Vs?VU7`blfXdYPv&dzC*;akxA_fJgtY|w;z}Ren>hl(s zMF$qwNLtz?j}c7Lb1+SvKI4(&5Qy8*E(}BWlM`!4%F9_!LPl#B+zj4gi&2w_ZiV3r zQzF`LZJ_kt)_FGy_YHbVgSI8hAyQ1PB}+ zmS6g%=LKCWhmO`q-t@WEVcACiwrU4yE}_#duu1+YBP8o-N(439$C;i?ZPN3+?tGx} z!TG3L=8^jR%3l2>6%&~R@nG7pm+AJB2&>KZE(wix!X<4O@LRbo?^-vX?L*OgQ9yEG zyV>HT)WabL6>h*>k*>yuwZPRTMV+-E>VPN!(GY)!d2fSlGK1@w@WfjQ(cAorIez~v z?348S1jn=V|Nr6tV)5D7yTnGC#zju+W%4Iw$yg_2eg|}SO8mCEJz}S-v-bi>{rer+ zpG{KdCP0~dz}HAqzv}I8Dmx{RoPW)PPYMEGOK@GcpTNDH@M}TU9gbdSn{;y;PoW|( zFrH>#qW^R#9xv_8rS}+UAkaw(63&YMv<_WjEL0N@g&%uRH%(58td6StKeP8QyS5}r zmKZ2vH>11qL7+Z?0k8=4tO`{XP0lj^pz{kFKIDL41<>em`m{k*W;Oc*f-{0>fJ zl3>IiFlPjc3D7?w=1kwhd(2cs)>wImMN^2Bqh1eXqAkOT_F%p5jWLrArJX z9G#RfZ2R+Ua8JSj%5sdLAzR*be}@NUvG^!?cy@8j;G%Vt8V2CiRQ@sN9fQ;z>Vp(6 z%H0}&3|SL&y<^#|fZAu6(LghV?reMNPMYo`4C|o`l<~8w30p-U2*vLh8sx#m8{1jG zM*s$I%IiL#>ek(ImqpsYiw#g)6(;uPfYxoBs6G3}B|EkC(vkQXzVA{?TQ@`c3}C2S zntoaxz)Im#^(T+=llF zjwj)~aMWHt8~Y?|M*>#kazT*12z+XwFnxR2;XKPTCdHgpo#AKjZdj|hu(yTDr+~(S zfqn|$&j>!y)}gHY`kV4pNi*8&_&K{{bReMhrf3)T*|8wY#&UJy$8^cqe$!k z%(ekqIt4Vz;m}hBo0$#_^w}6h4IGOd{62aQm~er^m!lJm)V5EbDLt<8SQ&gUX2*AM ze8S3^Dd#hHFod&OwIaB&V^NHo&?e+e&a|2)T~_+?_kghxbnrmW`QOoLPUVfA3B+w? z${P>%tFY0aW19R*($P`#q}8cB{u>G#Wu9A?VbY6tm*8L-bm3s{xuPDvA6;MY0E&@Y z1-9JvDOiux2a+_bkC*I&ot@Xr5Z049>ENPs*%hcIxZL4@t@J1lkn?HVJ{-;Q1@Zj< z+Uaqy>i`;xd}r}s8-ZVXX_b*IiI4gP*~QHy7Cno6fY;8p>V?YPM8DWYX?sc&K;2jp ziZkk{3DEp=&S0v0j|~X%Vn9w$NB|tHv$oqT1$ku{*mPd-vM*z)K|LVd@DPJOPfh4h z&y!4K_g{%UFM?dyohOW3`0}kTIcW|1l%~sXWW+k7oo?la$Pg=cuf^mq`M5zd2mZ0% zs(+(CP3dtPeaJNtTY1tF$&N3$ZKL@<;MgX(yC(_m46bxI`iPLF=2*AvUOa2Lwo{jS z*tBRqmx&Ro-szuhwy~aHULIT@z4E2~i9Q_g7mntIq$Vi5f#DRJR$ZIzhoHtRKiENp<(^LLSQHOBMG6#kH2ad5WkIVuoKWU2(Ay> z!CH494s?Z-sk#!v%Ou|bn9=YY%bE2SgXki*R(%|cWfy%^C)kr7eRl&frGtJtBC^P? z-3W{3&2X1+Vi4+bh|iAl%n~rj^}Tr^hbU1l`FP8~u+xsAjM7%0o)ts^<<6hp224#Z z@O)L59Gn65KD3=iOx15JK;=@Xt)?vVaxkBc+^p^NeldbB5SgE?OjvEo?wl0>=l4S< zH`+1GJ0Hw=RUhG6$xtV8E;x7`peJR#j!2luBm)c-7p|HpSWX%4R0(T-$Y#tSZovUN z@C7+}bfnWdAHRDKGR>)ZilWp@Q{Ce<4Wye$y8726SMQ<;4XG=1JnJx=`0Rh(NdMNf zwrEuLKpVyr?O+HFE3`0S)iOglw$omh*1FeSDozHC<$;f>{$u>!$jDze5a{~H0Go!~ zRClcTE_p22TF15g)?RQuM(p`lU;T+3j0CGD#748EBaG%}JBC#?0c8mCQ2TKkUW8}V z1IomW@ZdyO0L*}aSvXH#_@Zt9DpKN8`46^)3W3XV={T8dd6dh|P$#Qw4kXL`TMo$Q zt;~oNn368RVSa^7gsmE%Gef3;A0nAp8w-`;>6!G-CP> z67G~c2&}SZ-N;oJvssbZ;fS2|h)RKg^y<@s@uPhgEd!0(3AxywcJ8rL-qk+`FF1s{ zGL#8R{i{pcuoFj_Rv{M}7ynsTwnj%_)kto2s)4Z9urDV)K+bNQk8zl7$6+w9qvK&W z^~a4SisSlnN??9mAy4cnuSf?Q^rYwei(CdmL$+$y4U~EmO|`mBd6w)_hs%+5lN}rm z(?|jO#$6GPupP*B(vgx{eM%Xai_JKcY+Fe3^MXBOYjapBIEeDb&g`=5PzQbE8_LFw z?L$2cY_HLGQ7u2%fJaP~#kHU>~9|LU)0=6l+z1k-pgr5}bWKXG? z=qwIwSM|XGYvMegkA@$^Wu%EiZI$Aijx8PHuF1DpN5G8II_H|WES8G_3+O)>hpj4- z`Y#AZ{+pZGP1%_*NkDnfu>iBp&j@T^%uFqU`Z;`&z8C+rzb`E#t>VjuK6($-1rLc2 z_^b&S?+Nu$2V(%*Tj($_X>$iqkiTKw z0)jrEt*CzZ)T?*h2bt%DUt0_I*Dkx4T$u%a5s!&l4$D64TF4ptA88Yt_N44+OwRJ+ zJBPCE=>>u-(rw#~N|$$M87n#)VAFQl;KJ<{_qDx;SHt@R#~XtG`~T>-A7>SR%Z;(^ z?aH+3zBxRY2EDXB$v1Tr68+|MZ3wd6s#Q;i^cWguyQfq8odEc+1?ZnULekx5p1xFw z;qN=c96Fu5_q#ZS_iSS2F3rCW!MXg}&HGD0x}BY;m2A3FRh?sIb%sTQ%k`kBr%4fa z+m5Md-CiB{X8$%hU5H!cKgBIN9C=y}Mt;Vy2c=VR#!q*KWSQwxll_b0r|rftYUqh4pZYfhkarMrhEAl9PU0C|s+lXX6_^!cS6;+!gPrJjy7#dsH6wH$Ff%g8OV+! zgZ#eAr_K3MagKD>a|lmRPY|cx3!rU8h<%ah(MGVJ!D&F8K)cHLFrfgcU~|(kq09(! zAvmc7ow#N_`}#yD4@%Q=qj`YI!Jae?q1kMcKTe#-beD=Xt&Th!@wD4y?sx0UpaW94 zOzH<0P?n6`Nm`5%r!0*0*9$U7(S??FS;2x|Z5`^N0GZ10y14V8q$=%`oEH3`ocx;$ z4&$9lIl<`Nhna)VdkWELHZU;*&UXb==Qv#?AAeYNgB*oZIYurX51E@6#nYZ z{^|epD|-*GhW81Mw+8pG&fl04t4G2D{o}VV=L#(#xC{dIJfd%Ft zp6w0s_9VXpB62nYI#~O3*q=p1lk(l+W`irh^gRdOcjdoJh%dp&2w0wZ2*885!I?|i zQooUKz#d(3WnDvO(rv%J+(dRa@;^a=qm$*f0aj&Rd4%_2CHk62ap}-wrvd3!2h@yU z_D|fTAGS?A0GU^`Z}m8mZ-N*!Ub~zoaCcG<@n|4r0x{4Q9PfyHmC=EM z{3pD$T|Kr!hUmnOgRP(cdb-)mhGPw8K!inWMYL|op5T|h)>Ero0A{m&39%ggl1r|( zMa8)|g;U?`GMF#8>#yj~OK$zb1XaO6c!mRlD;&1nQ-gL;)Hsr5yn{>RXUD(~IWTr6Hp2vX(!c>@=}~ZNfolQJ&T$P~KsJYOEL3k6mbk z+NQ3rEQgef&{;r_g2!dhPg%nzm`KF+-)vi4;rr3DT5+}d>;|$8fQ033YcDrBjJ%;d z9QqGHK(^IbajsZxA&2SR{J8L7w)F}03+<$VUpV#un}1*y)b6D>MU(PPPs(nU-OYMp`b^-z^x9L@ax|J_Wq; zI8Ur}pU~Fa5=J~pKkkU=g#}z`uZwl`d9B&N%@BRFnkA}vEH92_N zc*irStH-Ss*jEbZU~TGvr{XRTF0g{ZUVmHfEwF~Ncfsuw12_2n;%~$ExgiEJ+}@7U zZy0^+XxZ<@r<;abiXNsb)?A5 zPDtyrb6(AC_)zzWR zqu!kdRBpS>)6s^>gB;j;Tz74-Is_LPlN(MbIAza=SjE)dobpC)QOVs?B5EpUy*q-_ ztYwe9uR%=P3Ua9D`&T)K`nJ{oAV(VY2~#+yed6R{+O_8=K7Hxcu_Q7cEUUXgADs2a zvLwDr59=>rbXo*cPi2OkGxQwtd;a*47t8w&2mV6gQQ$8{C0i}OCIPqB`;x!f(mjm} z@D`_0Xwv~jA^vdb1DCyMo8XM=q&f0Qa21aH3xTl_3M{F9b~%)+kfuWChJ)kU15t5E z(<&Q)r}|9sO&omrsw82v&Ttn<;yHF3wo7`|&RN!uuE*I1ckaZ}_YdW6hVGi1_q?ab zfzSM^Sle97D4-oJ%~n@-$#A-3%onTP*sSU_$%gr#Y^#cz-PGNEQUdSYD1DFh6!C&> zt~lI@l`ce7In}iWJ_3aL+RB{vc;$aQ?CbZ7Mc*FYCpbPO{QdDaAC2vsdMCTZff;lt zegn&=#JkLhW`M1eDq9(Oh#NT6fIOqYhO$F|HlOOdy;26t(TFRaviY5Zwn=f5em)P3 zJUfo^rNftm|7-$f#PbYy%<0=ecKyPZ+;SSoUkGtNb%1q48aiTGC2yS#1K7d!1uryH zW@w)=-qxOS^pdIX_|f5U z>$Gy3FPMoZLcaD<)mA6Cs}**8i+Y*Z?ts$2Uogq5a1}& z#oNtf5bg?T-omz3xRfDoKhFB-Y-2ud!#6{RzxdrIdffOp2h&T(PYT*m1BT+Y%1!z- z*5OJ+yY0aRw0TIofsC*YdGlH_OP;p+zv5uhtx?VW7uWk$#79#LDjPvb)j+nx=EUr0bB1x+xcYZfqf6=bGVSvufZfWFXrU-G}ghk z5aTv6lfQigVjlns474q(rvsn3VorAs06owA6<54I%l)K5`2B!h{(l$S2-iF4&& z&5GgIq-p}g5iHw7Y%&pfR6l#ChhvY1-G-&vZ8sg@8z#}wcJpp3)pLZUs zAN1b6p_7q+5&GYxD}7XW?WAorjx3-^V1vGyZ6h5zlG(QoAm`1pL?J zqz(wJ!r$SUM&K~ACI=lKF~4-T>D=n10`&_%<0EI&j0XV9PxjDa&_2*x{*4cEyqpm( z<4sT6OF-IeRB5@NH~czn^(gY)~m zL_g{dd8#(YyXaQ`(I#NU)^BXBWCM8Ug3*L66KjTOvF;@ghzk|!gFQ;{>BS{!)!mqN z$K~C4mxoJ!3;&Bp{*>LJ~I15cM0j^|jh}+W=yV z+v|V9$IK-El>1PI$kjd?|3dIU!Q7@0C?kCLff>=e4(#z)j~K=zpqKn`WQ}OwY1k}z zlUKI+y^Bv<9c-5h?->z<+WEz7d~ft^GF?Bf-F+*|If1g;-*m64uotC4xDICV0@Upm z#%%$0O#pyiINIYrly%XY-~7T6pqh}h>R%kmxH)cjWx@$|NRMbZC+%>5lqWyO*Zxm_ z{X2UPZw_wn;gduB|NibbAFch*J7Q{F>!0ptu&u`qrVL!uhW8jEHU9_$h`7xkb6JJy zPx5Gf{|;rJWqb>a&k0Ji+pNF;(*+fV*{tB#!XQXpmBGm)I@)pv<1X!{+*F6MLoK%< zBOi8a1T+zod0z|6`}K)dt78(E6Z?R?&v+f+mP)|!!?=_u-ak_LkpE1Nh8|HxuB?rt zUjuNZOav#%@X>f(Xf~j^%1tng`H6?crssACNly;&*K<0J&2xyZqwutTV!Z?0EMIw1 zcX?;YMe8M=U_DhnfCaEmJBf?d>pcd3vFx23CmBcAyB8WG&tk`7DJ&*^ls+GIe}gal zZOvfcDgQ9gh3a^s9b_4I`b|EpXrX?E76vfw4%YfjT20`UOs?nV6>WrhJ3)Ewg0hWA zPfOfr4ZCd{l(xF(1m#@V2Y86fz=j80lrLqF_Mz>mi3~6M-|!M!VY`_o*&Zyu zJmI>~;+4vLk8}wAn?Ce8ga?H$GS<9>>$v)ZMC!uxIf#E;zpgs>T}B2pWE$drsl&8E z2X=6{!S0fW)g(iqlt~HUslU3_$3Z=D5Z_PUaaTyuk33zwPGafVVWQ{bPQ&K8avSmPTa$N znhzcOfDUHSqs|RFag*~_y8yJl3q8D?vL%&M>^QkG$(BkQ@m0|qebo$F){q!PC3J2O#RmdY7E*}UDlRPRF#86>#*M*8~#NfOMu#Q$_$EpQ{e}4ZZSPwl&rNWKd*V^n6%N>MncbrETG` zxqV-0xYJ5^m5l9>Z_hos0r6Gmmn@20)iJ^hrfrkKm3EQlLcy{F#6fZiun{;aY|LQl`FYhsWL}`YxmG%Vv>1-TL)OFG`Ewkbc$cT{pwgJHOkl zkaEs)CTWmALKC|b!j=>Tn)z2ZXWX`@XH@^%Xh6FkQC8pKyC816N9(GG*#es4g+oZ7Y+ki;et z7w08v8|UQ^lvylZb2w06CxF3!=q|ex6gW$T-IrJ#<|tC0K|Wdi>&Tpo9DT!~_XpHn zA%Pahd1@w1SAVEo<*o6pXW;pT!?BLJ@n90Z2qIf}_rW95aMvz$H*{TkcR*c2xq-c> zQmM~#yG1Sofz;jg#SaJ7tcQd1v!3KPCVW;hD|_&x?s9RQh>4?l(tAuI2Ps#6hx*U< z2RiC3Mn}!8X|ilj&NyhR(pg7a3bSp}itN`~H;d*nTG0vCTNnLXa+P{5ILVs~ityeb z#JwGZ1G)__0QACsO(Ma0{Q&rPdN;%+?N%UcpaJBR{}C_;fIXKSab5bL&U%DjuDqCMk39MI1;nm0LNg5}en{|boj*$&=DkMH6 zxsl&6mDTb-$=r-}3VNdnbsuoM)Lo>h^K$!>bxvTtI+>pI^o6crUF)}rv7&df1(V;d z<54u*ISEs3Sj79qqMsSwCpbPgsUbOiG60geFVKb*@UqoFb$ zas>>b=dlVo_e!(|$-(j8+$muwue61BVuE;r=Ri4PdC@+SR?gJ*+)!~qYTO3|tQMo? zxvnzefGSJi1$jtF*jUfOOdTD#fJr4CD6jZB2VLy|eA>0}XAuW^5K_AzbUDK*R@_jU z?Kld~GZEn&GMEOQ4(Gca$Z~cq^LC)!wrem`{DVGbZxMq zT=Ict7=UQ4PaxiPs-%0o=5XQ1J9d@2cPZd`oW!KPVN85Pu#vNx>j^>-E*uv z4y`jyboS?3n}lT(k!{=stMBN5`d@m5FFb9+#<-yVe*tfr0^pMGfi@(&C@SBv=cP7B z>*GWh@?ezLp>HWK!6zQ!eUpa|uyfKn;a_n<^$NY=2Kv80|QZN+!@9a zc3?ipTm89q46E!zD^V&>jaePQ6<4sWJJ0~!zITLIa-S&AtW~w^63Q^gS$@x0D;TiO zTU6%mhq{N5oS(_*z6r=1b*9*Uh}U@l+-=<80OsZS?jkrB+rfGXlLzD+`VCEj^Gxo+ zfD0}h%(uuc08!}<`f4ZhJl;We3@dCvW8K6a>2O>)yoyc@h&3-@*Pi@Lbtes=j>)v` z5iILGh^sDATV+`&w(QR;A67#vJOQ#touvL3?(iDCUE6i9T?dgeOZjA*V6UFPe; zRN3mh!z!GT4xbBKzG7v z8fQJo+3Pi#i&V;*?xckCSy!r<1G*>mwtAGtmA(PoyK| z*9-K8bzORBQyB=(m*ejFt!b(HpF=3AhpP^qSwqR~J}atS>kQotqyF2Da`&1KwB3JQ zCEtVfh&faoo;GZ3Cp4+4@Y((+JWNx7i|qApr(+$3qKFsjQP;BsdQ%6Q$sLc04Hhl> z>g_vFokrM39r|O~UNT-!b$pl5d#YNUS?d!HIO&@6mdz z-FpZ0`{zwoU)y{5?C?Ip@g0Ky`~T>-9}V%h5^Lc7bkq#NOdI8L!o!}1+d<@%H?swo z)v=<&(*dUKuiNu88sfG5IOu#0m~~_NsYg4sp+UN0$m=)dpQ+#tYI#%0j^;}pUwLh} z&*uS^U%Po~c~9%_kOF0fX-4$}V|Cz&GuskL5UQH(0dHBqY#4F^rDQ7|6sSPs(vqgM+z* zjrVxOL}S7Xc7iHd@SSQ-JpijfRKG0@i^u+)ns04a>Y*rFgNLgo zoX+5EXiImYbi&)_bs&gsZSJCWd!kZ7f|E7r^yWYd@q6^W6y%Hnoj?ho2*CE@n{nL> z`bF_I{tDhJVfE#aq6b&-tAMpFZIyxZ*JY>+&-vr#FyL&u@Cn-rv=eLETzH|KQHQxy zTG~LFwmQ+iXuZOMqpT+XH30A?L+cy~Wsq6bXUXgEjO}QkJiIHwDYB^azK6$GooRT9 z((?-h#81L>w)4#f@>h?i?EIFjOGZxrDNKa6TIB(D*Ujw?gvAfpz!~+z@6r5O^Xfu# z>bdVgb>l|Bs-A5jHcHnU-igC<-Zap)L50 zKDV~=dXE7=x0PvMxMKxri3P_kk2Y5Sd3CbC`m=xfKm5wx!)J&036Ad?KKNH3E%Ewv z4>ZIbe0-#!XXm%{DViI|5w>euR_G^r@r72{CH;ofEhuZZoh4-0=zanm9i+De9k5Mw zVO)D=+Aclk>8Vrj2_XlgcWGZL_@^jSLAXIJUq4oCX(0Z!k#r@?b&|H_nKJ-9IE9S{ab8G=@m%V~8mI_y+&)QBpGo4N@+ zYz|9_3=MZ^uaanQ#MfO0(W^%Bq!G~e#GCg@*E=GJp5S8E2Y;g8afgif7Uevww>W?- zu%FW}PMNDbe3i|q2{*cG1Z2xDRW}Z07gE3Oo5962uBM|y7TDhD-%B`ldh+;@gPh%K zQp62-v9wt%!+%b?2Rv&<($uL>y40Q>k9pYccose*JomhNo6Z_Uo;G``wpYoL1P6O` zS6dE}$z@yz7^D-QwHs>fzKGJnI;KJO-@1I+&`W_sWN|t39x^mXgP&wTvNGH1SlKSf zGDSh{YW~Ldcnt~;!sEGPD?korFc8a~a6MVb@-|ih@ng(G(hLPcz;)d;^Wm6L*AYB4 z$Sd4Vamx177ZzLi#$%1ppLp@I;$7t9Ffn6ont0e=YVtYtMbA~H~2P&?$it)dNw4do;#zAbOcYsJ+rPk@c(EGI;d zs;#EB&zt1KCrlJmXO?qpuY?jko^s(XfFPra6!-=;l^UQn`_Y5a=XhoZTF=WCw z*xdx1V4#z7V|-}e=m2WJ4&csy2RgZe2vhF?2sUaL-(H<20_Qx;RyqU|yqmIy9qLeq z>UVINA`9T3B&^kwB4sG2{LrKocIalC!+%S^14&snj3yGcy6ikb1nA!T6K!zhYwEf=}ok;ujRJ4hlnXr@xI7T>N9)l-ZvIVAK zX%zJcy1}OYGBqb#uU%oA?S$=iKhUXzVM88;zicO7eyfS}q9X_AwTWfXcBQoK5~pBy zCme^}ohgGm6E{$a`TiFSr^B#&PLUipHh?mTwyTEc13d;JUHvsoc)0I*um1Ep3QS+= zstMui-+-A&M|mtkh1kE=hh{H%13vtcm84yGpyK@BKEW7Rcw~ji8zh5l+1%lgq z_#z?xqrdyjM{)jn_Xy4&&(t#oJXGa}jw0;7ylxAp@>70^%*uX8995tVcV;77gZfC~A1*gZQ6 zADwyw`~b&+?~rooB-A}4>)$i)!?@6dcRdH>+2l2pcPJF@!iqw8jb@D^f+OtV=S-cuh{R%|40bfmbp z{Au^s?=^^MdIR8IWX8bn{ckMAI@l80nFStn8t6<~h#wO?4|w-eCqZqC$OPNLsorfe zGpKhCG%S2MlUTcwTAr(d>}_b-A=H&r$40ZzSF$j$D~VfqF4%|J^r`J~lVa!+P)1pg zS4!E48y_0uj&vnq zhsZ!-fUaQou0fqi8a^g{^QZspzyGz>g@H8?UgO|GMZ*n z-Wc)^@6{g-IN{k8T0lGX1C^6GJ&>o%!`OZGgp(?xW#WGP?Nmx@+2ys zQ9TVRyJwRdn0_m_PYB;>azkV}F-(s3EBdgZek6}EIO?0+R7pVB*mhmP0a3RK~j%!1+iZ*rYq`ia;o5zB~%^>>@xd zC-~O(_Jo5Tew1BUZG}xIhdm+MB-mroGq*ab@I3Lp}dAqi=#`%ywXhUn>7HLW~OfaVBz%sxW zB5O-`9 zF1T2a`KfXjDFOY{4-){lqXV@0aef24S81BP}Wpk2?3<~KeU92+bCe1oI@^m6_u28vEOc5^3xwBOY}n zaYHBH_OBh-UFR(?J(9V>4e%|;jOe)b@FcS)$SZj{hs#K!90D<>a+nb9(EuIu35~i# zrP5Gt;529_OkSmNwbOdHvezJB4VcTh%z?oMKWzMzr>f}`)*)m$WQXG*m?vZvn`}dH zf>RVoH;uZGx5M@cBbPQH%DDj-bL9*3O}9?DHrO>NvqqBqz~Chzc;IB4w@uKXSmbJa zWFw#-NT)If9!_-(WJ@x>`?bnP6H(>Jx>5bd$qlo$q2LK@b7R9bqoW*~ycX=U-{Fa= z;v3;D8Fm+?_~6|EKZgF4%*yjH)PHynWV`MhM%(dgV6fz*@eQp8O6O-;&m=hi?MipT zTE`|_+YLrXWdnX=kO#uAuK`^3DgtG$byoCQXhqfm_K0;@`>25Y3vb|(f6>%n5@z54 zF<>xdips4A>S@QpB58_%W;4`V4w;-XA}_}8qpWa9i}V|80^)jB`9TNuZ?GJ?wn7_< z@M>Upm2)YlbrM(Ji8qHM9V@Q!0sd?&tZS8Tytxozwh`u-;2>U+G3d<9Z64V7YYa}} zRn^jtdYDe~T(avn3Tz7a>-~#xBx5*s6=vL~5V=RgFLDLvIGN#Mrx0HgjAo|CpzxEm zIN{=Z8|={Mq+Y3wF7z;&VbDLWvU$(h)n&JhHa`SxmDS^RZZ(PQJ&972sn%^ngLSqo zlpUc1nI+%vM^nCNc%R_-lHu<^{MAQW{iYj^xX+6tqv}DpQMB8B%8MxwfD0IMz*aCu%gF~FsW{;L} zFV_tG2)$+QDu;ldVGwghYa2D|p!@1;H%nmo+lm?D7{2_;N>Q~fUS58iQrp24!m3Wdoew43 z-0^WVK9vjbL7%Tp*o~y~`cV^D0krE577GJEKkKX1x2oHVhoVcLlfQ##c2ZUAAh69K z-A%T=%WJQWAQzMwwqM)sA#dH7NgV-u8|@6Aqb3oq=SvPD^!rx!hF`LKYdVM~qzj)9 z7|8Fq90o}FL=#;3ix)7ubvu7M_)}bITo`BcOMQo%!1LjG$*_*5t=Kh*c9DDGrs%639)x z0$tG#Fwm8Yp0tjQe+ThMbgXjSLNyH`dSLpx9FcN9ABGbiS^s8!2Ocq>GyOX~!{S9f zE zV3Mg3p50c?$8Y}RkN&~m*n9Y5;eCSR3kLt?&wpqB_-egb|2o&xt+U38Mi8IAwo`mJ z$Pk>X;k(E88VOk*V7>;%r=nWPZT~HY<&AW1Ai%->l(5NI()=dxT{+x^@;Tv49#45K zOgL)b{EUHk<@rX(_k>svim~G|hzAsb&oQ8xj4*$%)zyIVX+ARaHonLVLm2JUaENp3 ziGW4hmAs(G!20AIWP5QD(vg8Om<$y7t-++UJ2==S_z446D{?SBt*RiMly=xQnUSlk zj%7%Z^<<-b6nEE?%f~t>E#2iyOb62n9%Bs_Lg0ts#{v2<_`2@7*mr}t*kr#>{D>i! zc+in`bJ$+%G3gF?){y!x+XVfbIy%~fiw8IQ`iXP|xdK@O5bPhnC-YVPe}R| z$F^hyGcTHr34S%tI7u2is%Ha1(9+d}=wwf}AIht3^j=40pzbJ^+TkTd178+Sw6kho z^7bEt6Fu5jfClUCr z`(A!QMZxZju;eiBbKyS5x>=d*z1k0+MC@Z!N~Z#c=hVs24%1(?V*&38W3K;K8}MQM z3cTVu^O>=oCf=Nk&NifFz?wiAVcl7Jb)A?u)+XX_+sIGg5wK^byVd)zFwemX&+nf;MBV`rmqbualqvh zF_NDmpTV{pU;+a{`5Vf+((;6c&)J!m19M+vfq4rOZ>7DZBEHiYn*)N?=!^^J@9;-8xfkt-Ph0+In!V@?> z)Dgm%T5!`S2TljOgjibpR~H$aC-G8b&3eZ9`Z41RC$1$0%2g@X-Abh zoM+r&eTLe~nXMfi2qGtW{4jJ@bz8IprNm<>t?Tp2N9y28^JSCQ$~wUIi3dopNg9(f zNXOCkR0Dd3USnCDww&~2 z{Xb?twr0nr5$L=)Ax2x>3*SVS?|fIZi}4{&`MteU;26q<-Rh}aGN3VOsUt6$_pp7{ zJD$*awNn}ANlIWn9DKrp5p2fzNNrBO-+)n@7`w@y%I+=tW_TxpubB@I+20EQ;6o?f18q0+k-BpdI*gBXfxgGxo(?#L9y;3OR9%R_tp9e{d?b!1 ze9UN1%k`dR!nltk9>rESIjXJrAa6{Qyf)yf{4aE^MI`CB+g6W}_pbk<8?1ZzM{-$Z z3l#41Q&|L;jqbBM#hVPkA)2t%cjE#-cJeonmcxJbXTSLGer50Bi-z|Jj_)J<{fB?? z@!vHQ=Wi&WoviQe5M|SW&J(Z*Q$3W;39=iU4)M-_H>YPPpAYdSLYX#Pk)P6UK}lmd z$@5vz@xWWlKFj}#x*CS_@Anm6gI}Eo=6?f&{+h6rzj%`E<)6n5oG|jpveT^z2JeCB z9Syd+GRbm{y+f*|*kbL@nY==&(@EP##z5P#>h^S$C*++F*p1ks9^g?38vH%(?bBh4 ztw9q+_-<&zv+p5w(tMCfzQ3%F9M)T-kEQ9@nxM9m6;F4F@CM*&3re@1P_HObr5o*R zF|%zzt!*sTUEn{_lgo5Hd5)xlS)qZ6PIwvK^rCXL&dUIeR{wD#qHIEp03Arbwn0Z< zDbWMK0D8}#wYr#&pF4;`bPu+XeFf<^0Ld|g<7Z+Ik=!n zC>QzKYi*3%?1)?ICns>!)(R{PuypIQH4n{y4%#%YgR^bdpxgmb2yV5j1Ldu<=g9*H zJIl*6UFrti!Qd#6E?Wbd?FiBxol`tIDT7Q9D2W#I;etoyq;=NtU2sqvaHWN#nYx({ zyfz;7j)lW^x{wE#x^c{O3H?FOShnNNzq+@kSIIroOZ;B^HHX-Lqdg$+ptsFF%{HIU z6aTU^v`5k-;(}dfG2qzV`!|>f%N8TMB1gQ?=8<-hw1LEoAXcp>ll*`qefmp)0f58A z!sdqvA-DZ>l)SeI6gt9p<;e-1{CskMU1-7D>=XW`x*sO_fM0Akh;)ax9Piv%GN~h_ zZ9kFa&R;%qn13$zi=VvhaG1*TBlK@Rs_$!i4_`dIPjGw>;X0}kUtMqLR6hwcpots6 z1{GQx1$&NTY(`tm`6yOA^6AgMcF zj=jvLce7Ckw|UmHsJr7ep94)cz;$i_`0pCw)=ihE+ru??Y#cTbw7hU1_ zz6S5Bo;Y@u?iK^2oEUY)SNR7Uzokj&OT=pT+fEGR+ize(exK}E^Cs>ry4#Z@ZMqvZ zxOQBwfkVBr)79LlrZl#d~9kbP!N+2|cu2n%i9#m8Fwx|m^585`gk8kzOP z1nAm;K6BeA#(k`ZRQ57#!waDEE-i;iestn4H66{%%IjpKup_bMl0=C*6hc^03~%ndt~8&uRyVvhzm1$Can(C=k)SMDywZ!8iI|iapkf%c22cof%SI zLU$;Ad7e6ep2Q1r4zi5o4E~DX*kG+sjWoXIV%bRw<01ACJN*^H%0`xKvo5@BKfh2v zmbn3qk6^hc0B7E6owFuMV%>icfG>FfofJVYX7i|16lV)kcKcN(0$_rT>aoqJEF|-Lt*CBbPe9#vHx)|ZF zOxf;5UL=`GFR)gf$+paIXiwb(%p!~OaCFW$6$kiEOc)GYgWx&gcg9(HU7ii(VL~U` z0Mh+3SbbOys*^^xw}pS;yJ=t@CfL&J|Zw~%O(wBgE1M|5>0djya&W1|5tk2 zbi(L~iWe92Ov;XERdk^1Bc;CVCeTKjP@YP4_ z|J_z;D}*#M&S@H`GOHuw8)%!*;!JZ5aGp5{0&{$EyXSGG6MX34rw%xv4DKR$LK>9~ zm5rq1?^xd0A9)MT{6%)2iR9Hur1<=@ZwYt$daB2Xj_lOIF0HR6+o3@xUHS7@jaDvz zqWt*0Y?^$?xWQ*ncv&Uf;qTaKccmj=gK4>d8Le(Qo{{w(c9ji*D>(79vRMC!Rgf_` z5!PjMkeT@cXc1O>J~Y3EAWjKZb8~TAlqTTaxzb!X@o0$`xeo6wofXCozuV}cX6N~O9*R_tW6l!_mok=@)>8^ zkAwb5USe}9w^AJ3J%TjQ@Ad3;*8=tkv3KdAHN~4v2b(k02k>Z98!vJgVE}IqHjU|_ z@bdK#ywDyPtn|i25AX=@;R9{-9DR{6UKs1PcG@|`VY|A4!WW#WutLSOd)8&+c66n6 zp;aRLt|G}7kHv{?0o&ZX-v`sifOMcfUvM1jSL=mA{`rsXG4Tf%Po5xueqy&i2V1lFI*E5ppllEh@`4zT)tp^4`Bvyo zH@4Gc!Xu_ldAxOy|Mhzo&vJ+L(G;_~CxvLt%TMz{Wj>}81UX3v%blAa^M7-EczkW| z;d=}36CB@T@L&G?n~!$Wa6F@5SiE*^q>pgG~Zvh%r z$1}U$p+h4)FYk}7oEV{zJ(X?;8w#ZZ$|JvPz?-Y<5dx>2eC_!058<^;R?of$B1nSp zgm!c&K9~G)FG7UBBkjimrIi7BS>W3aRvbhg_qZlH#@LHj9uTDsc{eHU){A6b zxd@Ki8fYyj=#Z>Iw6B%@T7ArRmh_y!q0*m^>&_5ZZ9cV*IEq3qQzJ?pYz2WN4RP_{ zpig(HO*lzFHVWJNOP*e6`%`z;4*Pn(RC|#88~=r~9Z2QJkh�u;=r)oqzmnXMm_{ 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 TAt7+UK>y^VlqE~W4gCHO+G?n0 diff --git a/packages/commonwealth/client/assets/img/avatars/default-avatar6.png b/packages/commonwealth/client/assets/img/avatars/default-avatar6.png deleted file mode 100644 index 123332c5e6174e08dc7dd0efd04aad9245613f3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165827 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

  • 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 P9{8xMJc8FKSw;L0dbB$) diff --git a/packages/commonwealth/client/scripts/utils/avatarUtils.ts b/packages/commonwealth/client/scripts/utils/avatarUtils.ts deleted file mode 100644 index 4b9200dd7cf..00000000000 --- a/packages/commonwealth/client/scripts/utils/avatarUtils.ts +++ /dev/null @@ -1,20 +0,0 @@ -import avatar1 from './../../assets/img/avatars/default-avatar1.png'; -import avatar2 from './../../assets/img/avatars/default-avatar2.png'; -import avatar3 from './../../assets/img/avatars/default-avatar3.png'; -import avatar4 from './../../assets/img/avatars/default-avatar4.png'; -import avatar5 from './../../assets/img/avatars/default-avatar5.png'; -import avatar6 from './../../assets/img/avatars/default-avatar6.png'; - -const defaultAvatars: string[] = [ - avatar1, - avatar2, - avatar3, - avatar4, - avatar5, - avatar6, -]; - -export const getRandomAvatar = (): string => { - const randomIndex: number = Math.floor(Math.random() * defaultAvatars.length); - return defaultAvatars[randomIndex]; -}; diff --git a/packages/commonwealth/client/scripts/views/components/Profile/ProfileHeader.tsx b/packages/commonwealth/client/scripts/views/components/Profile/ProfileHeader.tsx index aca3218423d..166817edd57 100644 --- a/packages/commonwealth/client/scripts/views/components/Profile/ProfileHeader.tsx +++ b/packages/commonwealth/client/scripts/views/components/Profile/ProfileHeader.tsx @@ -1,3 +1,4 @@ +import jdenticon from 'jdenticon'; import React from 'react'; import { useNavigate } from 'react-router-dom'; @@ -8,7 +9,6 @@ import { getDecodedString, renderQuillDeltaToText, } from '@hicommonwealth/shared'; -import { getRandomAvatar } from 'client/scripts/utils/avatarUtils'; import useUserStore from 'state/ui/user'; import { MarkdownViewerWithFallback } from 'views/components/MarkdownViewerWithFallback/MarkdownViewerWithFallback'; import { CWButton } from 'views/components/component_kit/new_designs/CWButton'; @@ -38,8 +38,6 @@ const ProfileHeader = ({ profile, isOwner }: ProfileHeaderProps) => { } }; - const avatarToUse = profile?.avatarUrl || getRandomAvatar(); - return (
      @@ -54,7 +52,15 @@ const ProfileHeader = ({ profile, isOwner }: ProfileHeaderProps) => { )}
      - + {profile?.avatarUrl ? ( + + ) : ( + + )}
      diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx index 7b88f60d974..792cb607189 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/cw_avatar.tsx @@ -1,4 +1,3 @@ -import { getRandomAvatar } from 'client/scripts/utils/avatarUtils'; import 'components/component_kit/cw_avatar.scss'; import React from 'react'; import Jdenticon from 'react-jdenticon'; @@ -26,15 +25,13 @@ export const CWAvatarSkeleton = ({ size }: BaseAvatarProps) => { export const CWAvatar = (props: AvatarProps) => { const { avatarUrl, size } = props; - const avatarToUse = avatarUrl || getRandomAvatar(); - return (
      ); diff --git a/packages/commonwealth/server/passport/magic.ts b/packages/commonwealth/server/passport/magic.ts index 744ce8c67fc..2e44bdb32d4 100644 --- a/packages/commonwealth/server/passport/magic.ts +++ b/packages/commonwealth/server/passport/magic.ts @@ -105,7 +105,6 @@ async function createNewMagicUser({ profileMetadata, }: MagicLoginContext): Promise { const default_avatar_url = getRandomAvatar(); - // completely new user: create user, profile, addresses return sequelize.transaction(async (transaction) => { const newUser = await models.User.create( From 92edf6e9daa8b11cb8c8eec8229286418b2fa42f Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 21 Oct 2024 04:14:16 -0700 Subject: [PATCH 318/425] fixed environment variable check --- packages/commonwealth/server/config.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/commonwealth/server/config.ts b/packages/commonwealth/server/config.ts index 733773d4a18..f4711ed8a3a 100644 --- a/packages/commonwealth/server/config.ts +++ b/packages/commonwealth/server/config.ts @@ -9,6 +9,7 @@ const { TELEGRAM_BOT_TOKEN, TELEGRAM_BOT_TOKEN_DEV, SESSION_SECRET, + SNAPSHOT_WEBHOOK_SECRET, NO_PRERENDER: _NO_PRERENDER, NO_GLOBAL_ACTIVITY_CACHE, PRERENDER_TOKEN, @@ -95,6 +96,7 @@ export const config = configure( ), }, PEER_ID, + SNAPSHOT_WEBHOOK_SECRET, }, z.object({ NO_PRERENDER: z.boolean(), From 035efc10b502ce1d53e479e1c924d367c7cc2c20 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 18:37:24 +0500 Subject: [PATCH 319/425] Fix lint error --- .../QuickTokenLaunchForm/QuickTokenLaunchForm.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index ae222302c2e..986f260fa17 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -322,7 +322,9 @@ export const QuickTokenLaunchForm = ({ isCreatingQuickToken || isMaxTokenIdeaLimitReached } - onClick={() => generateIdea().catch(console.error)} + onClick={() => { + generateIdea().catch(console.error); + }} onMouseEnter={handleInteraction} onMouseLeave={handleInteraction} /> @@ -339,7 +341,9 @@ export const QuickTokenLaunchForm = ({ isCreatingQuickToken || isMaxTokenIdeaLimitReached } - onClick={() => generateIdea().catch(console.error)} + onClick={() => { + generateIdea().catch(console.error); + }} /> )} From 981a2a0ac1c503a59add561d8c9297a3a476eb9a Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 21 Oct 2024 06:31:50 -0700 Subject: [PATCH 320/425] resolved merge conflicts --- .../client/scripts/views/components/feed.tsx | 4 ++-- .../AdminContestsPage/AdminContestsPage.tsx | 2 +- .../steps/DetailsFormStep/DetailsFormStep.tsx | 8 +++---- .../HeaderWithFilters/HeaderWithFilters.tsx | 4 +--- .../routes/threads/get_threads_handler.ts | 7 +++--- ....timestamp-1729518131370-74d6fe19037ca.mjs | 24 +++++++++++++++++++ ....timestamp-1729518131371-c6d00287b6e7d.mjs | 24 +++++++++++++++++++ 7 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 vite.config.ts.timestamp-1729518131370-74d6fe19037ca.mjs create mode 100644 vite.config.ts.timestamp-1729518131371-c6d00287b6e7d.mjs diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 2249bd5c598..97634674ce1 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -132,7 +132,7 @@ function mapThread(thread: z.infer): Thread { id: thread.id, created_at: thread.created_at ?? '', updated_at: thread.updated_at ?? thread.created_at ?? '', - topic: new Topic({ + topic: { community_id: thread.community_id, id: thread.topic.id, name: thread.topic.name, @@ -142,7 +142,7 @@ function mapThread(thread: z.infer): Thread { group_ids: [], active_contest_managers: [], total_threads: 0, - }), + } as Topic, kind: thread.kind as ThreadKind, stage: thread.stage as ThreadStage, ThreadVersionHistories: [], diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx index ab34085e0df..54ff4498b1a 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx @@ -62,7 +62,7 @@ const AdminContestsPage = () => { }); const hasAtLeastOneWeightedVotingTopic = topicData?.some( - (t) => t.weightedVoting, + (t) => t.weighted_voting, ); const { data: feeManagerBalance, isLoading: isFeeManagerBalanceLoading } = diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx index 996105e13c4..ea3d232e718 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx @@ -124,12 +124,12 @@ const DetailsFormStep = ({ const totalPayoutPercentageError = totalPayoutPercentage !== 100; const weightedTopics = (topicsData || []) - .filter((t) => t?.weightedVoting) + .filter((t) => t?.weighted_voting) .map((t) => ({ value: t.id, label: t.name, - weightedVoting: t.weightedVoting, - helpText: weightedVotingValueToLabel(t.weightedVoting!), + weightedVoting: t.weighted_voting, + helpText: weightedVotingValueToLabel(t.weighted_voting!), })); const getInitialValues = () => { @@ -313,7 +313,7 @@ const DetailsFormStep = ({ if (t?.weightedVoting === TopicWeightedVoting.ERC20) { const token = topicsData?.find( (topic) => topic.id === t.value, - )?.tokenAddress; + )?.token_address; setTokenValue(token || ''); } }} diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx index 60bf209bf01..d98d182bbd2 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx @@ -475,9 +475,7 @@ export const HeaderWithFilters = ({ {(activeContests || []).map((contest) => { if (!contest) return; - const { end_time } = - // @ts-expect-error - contest?.contests?.[0] || {}; + const { end_time } = contest?.contests?.[0] || {}; return ( Date: Mon, 21 Oct 2024 18:43:38 +0500 Subject: [PATCH 321/425] Updated cw_cover_image cleanup comment --- .../QuickTokenLaunchForm/QuickTokenLaunchForm.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index 986f260fa17..2e116dc0781 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -271,8 +271,9 @@ export const QuickTokenLaunchForm = ({ ) : ( Date: Mon, 21 Oct 2024 09:49:03 -0400 Subject: [PATCH 322/425] fix invalidate, move getTopics to community router --- .../commonwealth/client/scripts/state/api/config.ts | 1 - .../client/scripts/state/api/topics/createTopic.ts | 8 ++++---- .../client/scripts/state/api/topics/deleteTopic.ts | 8 ++++---- .../client/scripts/state/api/topics/editTopic.ts | 10 +++++----- .../client/scripts/state/api/topics/fetchTopics.ts | 2 +- .../state/api/topics/updateFeaturedTopicsOrder.ts | 11 ++++++----- packages/commonwealth/server/api/community.ts | 1 + packages/commonwealth/server/api/threads.ts | 3 +-- 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/commonwealth/client/scripts/state/api/config.ts b/packages/commonwealth/client/scripts/state/api/config.ts index 5a022eabb66..54b4c56dc9e 100644 --- a/packages/commonwealth/client/scripts/state/api/config.ts +++ b/packages/commonwealth/client/scripts/state/api/config.ts @@ -12,7 +12,6 @@ export const queryClient = new QueryClient({ export const ApiEndpoints = { // endpoint builder functions like getEndpoint(id) => /endpoint/:id should have camel cased keys // stand alone endpoints should be have upper snake case keys so we can easily tell them apart in code - BULK_TOPICS: '/topics', FETCH_ADMIN: '/roles', FETCH_COMMUNITY_STAKES: '/communityStakes', FETCH_COMMENTS: '/viewComments', diff --git a/packages/commonwealth/client/scripts/state/api/topics/createTopic.ts b/packages/commonwealth/client/scripts/state/api/topics/createTopic.ts index 67fb5eb06a9..967f9cf8bdc 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/createTopic.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/createTopic.ts @@ -1,11 +1,11 @@ -import { trpc } from 'client/scripts/utils/trpcClient'; -import { ApiEndpoints, queryClient } from 'state/api/config'; +import { trpc } from 'utils/trpcClient'; const useCreateTopicMutation = () => { + const utils = trpc.useUtils(); return trpc.community.createTopic.useMutation({ onSuccess: async (response) => { - await queryClient.invalidateQueries({ - queryKey: [ApiEndpoints.BULK_TOPICS, response.topic.community_id], + await utils.community.getTopics.invalidate({ + community_id: response.topic.community_id, }); }, }); diff --git a/packages/commonwealth/client/scripts/state/api/topics/deleteTopic.ts b/packages/commonwealth/client/scripts/state/api/topics/deleteTopic.ts index 034e5087ca3..ddc72a0918e 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/deleteTopic.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/deleteTopic.ts @@ -1,11 +1,11 @@ -import { trpc } from 'client/scripts/utils/trpcClient'; -import { ApiEndpoints, queryClient } from 'state/api/config'; +import { trpc } from 'utils/trpcClient'; const useDeleteTopicMutation = () => { + const utils = trpc.useUtils(); return trpc.community.deleteTopic.useMutation({ onSuccess: async (response) => { - await queryClient.invalidateQueries({ - queryKey: [ApiEndpoints.BULK_TOPICS, response.community_id], + await utils.community.getTopics.invalidate({ + community_id: response.community_id, }); // TODO: add a new method in thread cache to deal with this // await app.threads.listingStore.removeTopic(variables.topicName); diff --git a/packages/commonwealth/client/scripts/state/api/topics/editTopic.ts b/packages/commonwealth/client/scripts/state/api/topics/editTopic.ts index f3148beac09..858a5a0a930 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/editTopic.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/editTopic.ts @@ -1,11 +1,11 @@ -import { trpc } from 'client/scripts/utils/trpcClient'; -import { ApiEndpoints, queryClient } from 'state/api/config'; +import { trpc } from 'utils/trpcClient'; const useEditTopicMutation = () => { + const utils = trpc.useUtils(); return trpc.community.updateTopic.useMutation({ - onSuccess: async (data) => { - await queryClient.invalidateQueries({ - queryKey: [ApiEndpoints.BULK_TOPICS, data.topic.community_id], + onSuccess: async (response) => { + await utils.community.getTopics.invalidate({ + community_id: response.topic.community_id, }); }, }); diff --git a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts index 17840bf6a36..bdc91f4a6d0 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/fetchTopics.ts @@ -13,7 +13,7 @@ const useFetchTopicsQuery = ({ apiEnabled = true, includeContestData, }: FetchTopicsProps) => { - return trpc.thread.getTopics.useQuery( + return trpc.community.getTopics.useQuery( { community_id: communityId, with_contest_managers: includeContestData, diff --git a/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts b/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts index 7c516ffa104..fbe5ff3148c 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts @@ -2,7 +2,8 @@ import { useMutation } from '@tanstack/react-query'; import axios from 'axios'; import type { Topic } from 'models/Topic'; import app from 'state'; -import { ApiEndpoints, SERVER_URL, queryClient } from 'state/api/config'; +import { SERVER_URL } from 'state/api/config'; +import { trpc } from 'utils/trpcClient'; import { userStore } from '../../ui/user'; interface UpdateFeaturedTopicsOrderProps { @@ -25,12 +26,12 @@ const updateFeaturedTopicsOrder = async ({ }; const useUpdateFeaturedTopicsOrderMutation = () => { + const utils = trpc.useUtils(); return useMutation({ mutationFn: updateFeaturedTopicsOrder, - onSuccess: async (data, variables) => { - const communityId = variables.featuredTopics[0].community_id; - await queryClient.invalidateQueries({ - queryKey: [ApiEndpoints.BULK_TOPICS, communityId], + onSuccess: async (_, variables) => { + await utils.community.getTopics.invalidate({ + community_id: variables.featuredTopics[0].community_id, }); }, }); diff --git a/packages/commonwealth/server/api/community.ts b/packages/commonwealth/server/api/community.ts index fcb1a1f7529..01e7b4a93e9 100644 --- a/packages/commonwealth/server/api/community.ts +++ b/packages/commonwealth/server/api/community.ts @@ -99,6 +99,7 @@ export const trpcRouter = trpc.router({ Community.UpdateCustomDomain, trpc.Tag.Community, ), + getTopics: trpc.query(Community.GetTopics, trpc.Tag.Community), createTopic: trpc.command(Community.CreateTopic, trpc.Tag.Community, [ MixpanelCommunityInteractionEvent.CREATE_TOPIC, (result) => ({ diff --git a/packages/commonwealth/server/api/threads.ts b/packages/commonwealth/server/api/threads.ts index 2e41f7fce2f..cee71742a6a 100644 --- a/packages/commonwealth/server/api/threads.ts +++ b/packages/commonwealth/server/api/threads.ts @@ -1,11 +1,10 @@ import { trpc } from '@hicommonwealth/adapters'; import { CacheNamespaces, cache } from '@hicommonwealth/core'; -import { Community, Reaction, Thread } from '@hicommonwealth/model'; +import { Reaction, Thread } from '@hicommonwealth/model'; import { MixpanelCommunityInteractionEvent } from '../../shared/analytics/types'; import { applyCanvasSignedDataMiddleware } from '../federation'; export const trpcRouter = trpc.router({ - getTopics: trpc.query(Community.GetTopics, trpc.Tag.Community), createThread: trpc.command( Thread.CreateThread, trpc.Tag.Thread, From 80188ae0daeed2a7db287e9207db686decc6d105 Mon Sep 17 00:00:00 2001 From: israellund Date: Mon, 21 Oct 2024 10:01:44 -0400 Subject: [PATCH 323/425] added Home button functionality --- .../client/scripts/views/pages/404.tsx | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/404.tsx b/packages/commonwealth/client/scripts/views/pages/404.tsx index 50939e6bd7b..6dd88ffc867 100644 --- a/packages/commonwealth/client/scripts/views/pages/404.tsx +++ b/packages/commonwealth/client/scripts/views/pages/404.tsx @@ -1,3 +1,4 @@ +import { useCommonNavigate } from 'navigation/helpers'; import React from 'react'; import useUserStore from 'state/ui/user'; import { useAuthModalStore } from '../../state/ui/modals'; @@ -13,19 +14,19 @@ export const PageNotFound = (props: PageNotFoundProps) => { const user = useUserStore(); + const navigate = useCommonNavigate(); + + const default404Message = user.isLoggedIn + ? "This page doesn't exist. Please go to Home to view or join a conversation." + : "This page is private or doesn't exist. Please Sign in to view or join the conversation."; + const { authModalType, setAuthModalType } = useAuthModalStore(); return (
      {!user.isLoggedIn && ( { onClick={() => setAuthModalType(AuthModalType.SignIn)} /> )} + {user.isLoggedIn && ( + navigate('/dashboard/for-you')} + /> + )} setAuthModalType(undefined)} From f39505666f28b20d87eace3fa0457d7f21559c78 Mon Sep 17 00:00:00 2001 From: Marcin Date: Mon, 21 Oct 2024 16:00:19 +0200 Subject: [PATCH 324/425] Fix condition to check weightedTopicsEnabled instead of farcasterContestEnabled --- .../Contests/AdminContestsPage/AdminContestsPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx index 54ff4498b1a..fddb244a37e 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/AdminContestsPage/AdminContestsPage.tsx @@ -102,7 +102,7 @@ const AdminContestsPage = () => {
      Contests - {(farcasterContestEnabled + {(weightedTopicsEnabled ? hasAtLeastOneWeightedVotingTopic : stakeEnabled) && contestView !== ContestView.TypeSelection && ( From 1541e94a3c6c8fd394d3de98868ac7a28da1f75c Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 19:32:33 +0500 Subject: [PATCH 325/425] Added `` component --- .../client/scripts/state/api/config.ts | 1 + .../views/pages/Communities/Communities.tsx | 19 ++----------- .../IdeaLaunchpad/IdeaLaunchpad.tsx | 27 +++++++++++++++++++ .../QuickTokenLaunchForm.scss | 0 .../QuickTokenLaunchForm.tsx | 0 .../QuickTokenLaunchForm/index.tsx | 0 .../useGenerateTokenIdea.tsx | 24 ++++++++++------- .../TokenLaunchDrawer/TokenLaunchDrawer.scss | 2 +- .../TokenLaunchDrawer/TokenLaunchDrawer.tsx | 5 ++-- .../TokenLaunchDrawer/index.tsx | 0 .../pages/Communities/IdeaLaunchpad/index.ts | 3 +++ 11 files changed, 51 insertions(+), 30 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/IdeaLaunchpad.tsx rename packages/commonwealth/client/scripts/views/pages/Communities/{TokenLaunchDrawer => IdeaLaunchpad}/QuickTokenLaunchForm/QuickTokenLaunchForm.scss (100%) rename packages/commonwealth/client/scripts/views/pages/Communities/{TokenLaunchDrawer => IdeaLaunchpad}/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx (100%) rename packages/commonwealth/client/scripts/views/pages/Communities/{TokenLaunchDrawer => IdeaLaunchpad}/QuickTokenLaunchForm/index.tsx (100%) rename packages/commonwealth/client/scripts/views/pages/Communities/{TokenLaunchDrawer => IdeaLaunchpad}/QuickTokenLaunchForm/useGenerateTokenIdea.tsx (91%) rename packages/commonwealth/client/scripts/views/pages/Communities/{ => IdeaLaunchpad}/TokenLaunchDrawer/TokenLaunchDrawer.scss (94%) rename packages/commonwealth/client/scripts/views/pages/Communities/{ => IdeaLaunchpad}/TokenLaunchDrawer/TokenLaunchDrawer.tsx (88%) rename packages/commonwealth/client/scripts/views/pages/Communities/{ => IdeaLaunchpad}/TokenLaunchDrawer/index.tsx (100%) create mode 100644 packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/index.ts diff --git a/packages/commonwealth/client/scripts/state/api/config.ts b/packages/commonwealth/client/scripts/state/api/config.ts index 5a022eabb66..7f1db2f1c68 100644 --- a/packages/commonwealth/client/scripts/state/api/config.ts +++ b/packages/commonwealth/client/scripts/state/api/config.ts @@ -37,6 +37,7 @@ export const ApiEndpoints = { searchChains: (searchTerm: string) => `/communities?search=${searchTerm}`, VIEW_COUNT: '/viewCount', GENERATE_IMAGE: '/generateImage', + GENERATE_TOKEN_IDEA: '/generateTokenIdea', }; export const ContractMethods = { diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx index 34d290c2da4..d6256da5a40 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/Communities.tsx @@ -1,7 +1,6 @@ import { ExtendedCommunity } from '@hicommonwealth/schemas'; import { ChainBase, ChainNetwork } from '@hicommonwealth/shared'; import { findDenominationString } from 'helpers/findDenomination'; -import { useFlag } from 'hooks/useFlag'; import React, { Fragment, useMemo, useRef, useState } from 'react'; import { Link } from 'react-router-dom'; import { Virtuoso } from 'react-virtuoso'; @@ -14,7 +13,6 @@ import { z } from 'zod'; import { useFetchTokenUsdRateQuery } from '../../../state/api/communityStake/index'; import { trpc } from '../../../utils/trpcClient'; import { NewCommunityCard } from '../../components/CommunityCard'; -import LaunchIdeaCard from '../../components/LaunchIdeaCard'; import { CWText } from '../../components/component_kit/cw_text'; import { CWButton } from '../../components/component_kit/new_designs/CWButton'; import CWCircleMultiplySpinner from '../../components/component_kit/new_designs/CWCircleMultiplySpinner'; @@ -26,7 +24,7 @@ import ManageCommunityStakeModal from '../../modals/ManageCommunityStakeModal/Ma import './Communities.scss'; import { FiltersDrawer } from './FiltersDrawer/FiltersDrawer'; import { CommunityFilters } from './FiltersDrawer/types'; -import TokenLaunchDrawer from './TokenLaunchDrawer'; +import IdeaLaunchpad from './IdeaLaunchpad'; import { getCommunityCountsString } from './helpers'; type ExtendedCommunityType = z.infer; @@ -38,8 +36,6 @@ type ExtendedCommunitySliceType = [ const CommunitiesPage = () => { const containerRef = useRef(); - const tokenizedCommunityEnabled = useFlag('tokenizedCommunity'); - const { setModeOfManageCommunityStakeModal, modeOfManageCommunityStakeModal, @@ -89,7 +85,6 @@ const CommunitiesPage = () => { const ethUsdRate = ethUsdRateData?.data?.data?.amount; const [isFilterDrawerOpen, setIsFilterDrawerOpen] = useState(false); - const [isTokenLaunchDrawerOpen, setIsTokenLaunchDrawerOpen] = useState(false); const isLoading = isLoadingTags || @@ -203,17 +198,7 @@ const CommunitiesPage = () => { onFiltersChange={(newFilters) => setFilters(newFilters)} />
      - {tokenizedCommunityEnabled && ( - <> - setIsTokenLaunchDrawerOpen(true)} - /> - setIsTokenLaunchDrawerOpen(false)} - /> - - )} +
      {isLoading && communitiesList.length === 0 ? ( diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/IdeaLaunchpad.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/IdeaLaunchpad.tsx new file mode 100644 index 00000000000..021a330c000 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/IdeaLaunchpad.tsx @@ -0,0 +1,27 @@ +import { useFlag } from 'hooks/useFlag'; +import React, { useState } from 'react'; +import LaunchIdeaCard from '../../../components/LaunchIdeaCard'; +import TokenLaunchDrawer from './TokenLaunchDrawer'; + +const IdeaLaunchpad = () => { + const tokenizedCommunityEnabled = useFlag('tokenizedCommunity'); + + const [isTokenLaunchDrawerOpen, setIsTokenLaunchDrawerOpen] = useState(false); + + if (!tokenizedCommunityEnabled) return <>; + + return ( + <> + setIsTokenLaunchDrawerOpen(true)} + onTokenLaunchClick={() => setIsTokenLaunchDrawerOpen(true)} + /> + setIsTokenLaunchDrawerOpen(false)} + /> + + ); +}; + +export default IdeaLaunchpad; diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.scss similarity index 100% rename from packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.scss rename to packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.scss diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx similarity index 100% rename from packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx rename to packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/index.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/index.tsx similarity index 100% rename from packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/index.tsx rename to packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/index.tsx diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/useGenerateTokenIdea.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx similarity index 91% rename from packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/useGenerateTokenIdea.tsx rename to packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx index ffe904d88f8..a57d2d46178 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/useGenerateTokenIdea.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx @@ -1,5 +1,5 @@ import { useRef, useState } from 'react'; -import { SERVER_URL } from 'state/api/config'; +import { ApiEndpoints, SERVER_URL } from 'state/api/config'; import { userStore } from 'state/ui/user'; type TokenIdea = { @@ -51,16 +51,19 @@ export const useGenerateTokenIdea = ({ // Special case for `fetch` API usage: // streaming responses doesn't work with axios POST method: https://github.com/axios/axios/issues/5806 - const response = await fetch(`${SERVER_URL}/generateTokenIdea`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', + const response = await fetch( + `${SERVER_URL}/${ApiEndpoints.GENERATE_TOKEN_IDEA}`, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jwt: userStore.getState().jwt, + auth: true, + }), }, - body: JSON.stringify({ - jwt: userStore.getState().jwt, - auth: true, - }), - }); + ); const reader = response?.body?.getReader(); const decoder = new TextDecoder('utf-8'); @@ -142,6 +145,7 @@ export const useGenerateTokenIdea = ({ }; return temp; }); + // handle this case properly console.error('Error fetching token idea:', error); } finally { setTokenIdeas((ti) => { diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.scss similarity index 94% rename from packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss rename to packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.scss index ce9689d27f3..01566b39a7a 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.scss +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.scss @@ -1,4 +1,4 @@ -@import '../../../../../styles/shared.scss'; +@import '../../../../../../styles/shared.scss'; .TokenLaunchDrawer { .Drawer.filter-drawer { diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx similarity index 88% rename from packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx rename to packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx index d211dfbd91e..d45700423cf 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/TokenLaunchDrawer.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx @@ -9,8 +9,9 @@ import { import CWDrawer, { CWDrawerTopBar, } from 'views/components/component_kit/new_designs/CWDrawer'; -import { triggerTokenLaunchFormAbort } from '../../LaunchToken/steps/TokenInformationStep/TokenInformationForm/helpers'; -import QuickTokenLaunchForm from './QuickTokenLaunchForm'; +// eslint-disable-next-line max-len +import { triggerTokenLaunchFormAbort } from '../../../LaunchToken/steps/TokenInformationStep/TokenInformationForm/helpers'; +import QuickTokenLaunchForm from '../QuickTokenLaunchForm'; import './TokenLaunchDrawer.scss'; type TokenLaunchDrawerProps = { diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/index.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/index.tsx similarity index 100% rename from packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/index.tsx rename to packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/index.tsx diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/index.ts b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/index.ts new file mode 100644 index 00000000000..083bc7efa21 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/index.ts @@ -0,0 +1,3 @@ +import IdeaLaunchpad from './IdeaLaunchpad'; + +export default IdeaLaunchpad; From 74f321241e0207c9abce2943113b099dc1dd5164 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 19:35:13 +0500 Subject: [PATCH 326/425] Added logic to generate idea from`` randomize button --- .../pages/Communities/IdeaLaunchpad/IdeaLaunchpad.tsx | 8 +++++++- .../QuickTokenLaunchForm/QuickTokenLaunchForm.tsx | 11 +++++++++++ .../TokenLaunchDrawer/TokenLaunchDrawer.tsx | 3 +++ .../TokenInformationForm/TokenInformationForm.tsx | 3 ++- .../TokenInformationForm/types.ts | 1 + 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/IdeaLaunchpad.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/IdeaLaunchpad.tsx index 021a330c000..d10ab5bd9e7 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/IdeaLaunchpad.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/IdeaLaunchpad.tsx @@ -6,6 +6,8 @@ import TokenLaunchDrawer from './TokenLaunchDrawer'; const IdeaLaunchpad = () => { const tokenizedCommunityEnabled = useFlag('tokenizedCommunity'); + const [shouldGenerateIdeaOnDrawerOpen, setShouldGenerateIdeaOnDrawerOpen] = + useState(false); const [isTokenLaunchDrawerOpen, setIsTokenLaunchDrawerOpen] = useState(false); if (!tokenizedCommunityEnabled) return <>; @@ -13,12 +15,16 @@ const IdeaLaunchpad = () => { return ( <> setIsTokenLaunchDrawerOpen(true)} + onRandomizeClick={() => { + setShouldGenerateIdeaOnDrawerOpen(true); + setIsTokenLaunchDrawerOpen(true); + }} onTokenLaunchClick={() => setIsTokenLaunchDrawerOpen(true)} /> setIsTokenLaunchDrawerOpen(false)} + generateIdeaOnMount={shouldGenerateIdeaOnDrawerOpen} /> ); diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index 2e116dc0781..0c46b1784e8 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -2,6 +2,7 @@ import { ChainBase, commonProtocol } from '@hicommonwealth/shared'; import clsx from 'clsx'; import { notifyError } from 'controllers/app/notifications'; import useBeforeUnload from 'hooks/useBeforeUnload'; +import useRunOnceOnCondition from 'hooks/useRunOnceOnCondition'; import React, { useState } from 'react'; import { slugifyPreserveDashes } from 'shared/utils'; import { useUpdateCommunityMutation } from 'state/api/communities'; @@ -30,6 +31,7 @@ import { useGenerateTokenIdea } from './useGenerateTokenIdea'; type QuickTokenLaunchFormProps = { onCancel: () => void; onCommunityCreated: (communityId: string) => void; + generateIdeaOnMount?: boolean; }; const MAX_IDEAS_LIMIT = 5; @@ -37,6 +39,7 @@ const MAX_IDEAS_LIMIT = 5; export const QuickTokenLaunchForm = ({ onCancel, onCommunityCreated, + generateIdeaOnMount = false, }: QuickTokenLaunchFormProps) => { const { generateIdea, @@ -55,6 +58,13 @@ export const QuickTokenLaunchForm = ({ setCreatedCommunityIdsToTokenInfoMap, ] = useState({}); + useRunOnceOnCondition({ + callback: () => { + generateIdea().catch(console.error); + }, + shouldRun: generateIdeaOnMount, + }); + const { selectedAddress, setSelectedAddress, @@ -277,6 +287,7 @@ export const QuickTokenLaunchForm = ({ key={`${activeTokenIdeaIndex}-${generatedTokenIdea?.token?.imageURL}`} selectedAddress={selectedAddress} onAddressSelected={setSelectedAddress} + openAddressSelectorOnMount={!generateIdeaOnMount} onCancel={onCancel} onSubmit={handleSubmit} {...(generatedTokenIdea?.chunkingField && { diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx index d45700423cf..2bdf3ccf6ef 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx @@ -17,11 +17,13 @@ import './TokenLaunchDrawer.scss'; type TokenLaunchDrawerProps = { isOpen: boolean; onClose: () => void; + generateIdeaOnMount?: boolean; }; export const TokenLaunchDrawer = ({ isOpen, onClose, + generateIdeaOnMount = false, }: TokenLaunchDrawerProps) => { const { isAddedToHomeScreen } = useAppStatus(); @@ -64,6 +66,7 @@ export const TokenLaunchDrawer = ({ )}
      diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx index 3e255487ed9..5be22640204 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx @@ -46,6 +46,7 @@ const TokenInformationForm = ({ forceFormValues, focusField, formDisabled, + openAddressSelectorOnMount = true, }: TokenInformationFormProps) => { const user = useUserStore(); const [baseOption] = communityTypeOptions; @@ -99,7 +100,7 @@ const TokenInformationForm = ({ useRunOnceOnCondition({ callback: openAddressSelectionModal, - shouldRun: true, + shouldRun: openAddressSelectorOnMount, }); const handleSubmit = useCallback( diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts index 094bc872a91..3022e41c3bd 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts @@ -19,4 +19,5 @@ export type TokenInformationFormProps = { forceFormValues?: Partial; focusField?: keyof FormSubmitValues; formDisabled?: boolean; + openAddressSelectorOnMount?: boolean; }; From fe775d52239e1b4e4f2d6043d89bf9d225fec7b8 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 19:36:36 +0500 Subject: [PATCH 327/425] Allow user to provide initial prompt for idea generation --- .../LaunchIdeaCard/LaunchIdeaCard.tsx | 9 ++- .../IdeaLaunchpad/IdeaLaunchpad.tsx | 5 +- .../QuickTokenLaunchForm.tsx | 4 +- .../useGenerateTokenIdea.tsx | 3 +- .../TokenLaunchDrawer/TokenLaunchDrawer.tsx | 3 + .../server/routes/generateTokenIdea.ts | 59 ++++++++++++------- 6 files changed, 57 insertions(+), 26 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx index 3c8a8a5e440..bafd86f6d75 100644 --- a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx +++ b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState } from 'react'; import { CWText } from 'views/components/component_kit/cw_text'; import { CWButton } from '../component_kit/new_designs/CWButton'; import { CWTextInput } from '../component_kit/new_designs/CWTextInput'; @@ -7,13 +7,15 @@ import './LaunchIdeaCard.scss'; type LaunchIdeaCardProps = { onTokenLaunchClick?: () => void; - onRandomizeClick?: () => void; + onRandomizeClick?: (ideaPrompt?: string) => void; }; const LaunchIdeaCard = ({ onTokenLaunchClick, onRandomizeClick, }: LaunchIdeaCardProps) => { + const [ideaPrompt, setIdeaPrompt] = useState(); + return (
      @@ -21,6 +23,7 @@ const LaunchIdeaCard = ({ setIdeaPrompt(e.target.value.trim())} />
      @@ -31,7 +34,7 @@ const LaunchIdeaCard = ({ onRandomizeClick?.(ideaPrompt)} /> { const tokenizedCommunityEnabled = useFlag('tokenizedCommunity'); + const [initialIdeaPrompt, setInitialIdeaPrompt] = useState(); const [shouldGenerateIdeaOnDrawerOpen, setShouldGenerateIdeaOnDrawerOpen] = useState(false); const [isTokenLaunchDrawerOpen, setIsTokenLaunchDrawerOpen] = useState(false); @@ -15,7 +16,8 @@ const IdeaLaunchpad = () => { return ( <> { + onRandomizeClick={(ideaPrompt) => { + setInitialIdeaPrompt(ideaPrompt); setShouldGenerateIdeaOnDrawerOpen(true); setIsTokenLaunchDrawerOpen(true); }} @@ -24,6 +26,7 @@ const IdeaLaunchpad = () => { setIsTokenLaunchDrawerOpen(false)} + initialIdeaPrompt={initialIdeaPrompt} generateIdeaOnMount={shouldGenerateIdeaOnDrawerOpen} /> diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index 0c46b1784e8..784410f5603 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -31,6 +31,7 @@ import { useGenerateTokenIdea } from './useGenerateTokenIdea'; type QuickTokenLaunchFormProps = { onCancel: () => void; onCommunityCreated: (communityId: string) => void; + initialIdeaPrompt?: string; generateIdeaOnMount?: boolean; }; @@ -39,6 +40,7 @@ const MAX_IDEAS_LIMIT = 5; export const QuickTokenLaunchForm = ({ onCancel, onCommunityCreated, + initialIdeaPrompt, generateIdeaOnMount = false, }: QuickTokenLaunchFormProps) => { const { @@ -60,7 +62,7 @@ export const QuickTokenLaunchForm = ({ useRunOnceOnCondition({ callback: () => { - generateIdea().catch(console.error); + generateIdea(initialIdeaPrompt).catch(console.error); }, shouldRun: generateIdeaOnMount, }); diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx index a57d2d46178..5ee86525d36 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx @@ -32,7 +32,7 @@ export const useGenerateTokenIdea = ({ }[] >([]); - const generateIdea = async () => { + const generateIdea = async (ideaPrompt?: string) => { if (maxIdeasLimit === totalIdeasGenerated.current) return; const ideaIndex = totalIdeasGenerated.current; totalIdeasGenerated.current = totalIdeasGenerated.current + 1; @@ -60,6 +60,7 @@ export const useGenerateTokenIdea = ({ }, body: JSON.stringify({ jwt: userStore.getState().jwt, + ideaPrompt, auth: true, }), }, diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx index 2bdf3ccf6ef..e09a1c26b33 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/TokenLaunchDrawer/TokenLaunchDrawer.tsx @@ -17,12 +17,14 @@ import './TokenLaunchDrawer.scss'; type TokenLaunchDrawerProps = { isOpen: boolean; onClose: () => void; + initialIdeaPrompt?: string; generateIdeaOnMount?: boolean; }; export const TokenLaunchDrawer = ({ isOpen, onClose, + initialIdeaPrompt, generateIdeaOnMount = false, }: TokenLaunchDrawerProps) => { const { isAddedToHomeScreen } = useAppStatus(); @@ -66,6 +68,7 @@ export const TokenLaunchDrawer = ({ )} diff --git a/packages/commonwealth/server/routes/generateTokenIdea.ts b/packages/commonwealth/server/routes/generateTokenIdea.ts index 7f90db1906c..0d34718b002 100644 --- a/packages/commonwealth/server/routes/generateTokenIdea.ts +++ b/packages/commonwealth/server/routes/generateTokenIdea.ts @@ -10,8 +10,9 @@ import { import { type TypedRequestBody, type TypedResponse } from '../types'; const TOKEN_AI_PROMPTS_CONFIG = { - name: ` - Please create a random idea for a memecoin cryptocurrency, have the token name informed by current events, + name: (ideaPrompt?: string) => ` + Please ${ideaPrompt ? `use this prompt in quotation "${ideaPrompt}" to ` : ''} + create a random idea for a memecoin cryptocurrency, have the token name informed by current events, and historical internet based humor. Make it hyper opinionated and subversive or topical. Provide just the token name without any acronym or symbol. Make it either cringe or amazing. Restrict your answer to between 6 and 25 characters. @@ -33,6 +34,8 @@ const TokenErrors = { OpenAINotConfigured: 'OpenAI key not configured', OpenAIInitFailed: 'OpenAI initialization failed', RequestFailed: 'failed to generate complete token idea generation', + IdeaPromptVoilatesSecurityPolicy: + 'provide `ideaPrompt` voilates content security policy', ImageGenerationFailure: 'failed to generate image for token idea', }; @@ -55,16 +58,25 @@ const chatWithOpenAI = async (prompt = '', openai: OpenAI) => { ); }; -type generateTokenIdeaResp = { - tokenIdea: any; +type TokenIdea = { + name: string; + symbol: string; + description: string; + imageURL: string; }; -// TODO: add option to provide a prompt payload which can be used to generate an idea (optional) +type GenerateTokenIdeaReq = { + ideaPrompt?: string; +}; + +type GenerateTokenIdeaRes = { + tokenIdea: TokenIdea; +}; const generateTokenIdea = async ( models: DB, - req: TypedRequestBody<{}>, - res: TypedResponse, + req: TypedRequestBody, + res: TypedResponse, ) => { if (!process.env.OPENAI_API_KEY) { throw new AppError(TokenErrors.OpenAINotConfigured); @@ -80,28 +92,31 @@ const generateTokenIdea = async ( throw new ServerError(TokenErrors.OpenAIInitFailed); } + const ideaPrompt = + typeof req.body?.ideaPrompt === 'string' ? req.body?.ideaPrompt : undefined; + + const tokenIdea = { + name: '', + symbol: '', + description: '', + imageURL: '', + }; + try { // required for streaming res.setHeader('Content-Type', 'text/plain'); res.setHeader('Transfer-Encoding', 'chunked'); - const tokenIdea = { - name: '', - symbol: '', - description: '', - imageURL: '', - }; - // Note: name/symbol/description were generated very fast by OpenAI and streaming chunks of text for individual - // name/symbol/description wasn't proving to be ideal, the FE was receiving chunks way faster, sometimes all - // chunks in a single buffer. Adjusting buffer size was also not ideal, as the chunks from OpenAI response would + // chars of name/symbol/description wasn't proving to be ideal, the FE was receiving chunks way faster, sometimes + // all chunks in a single buffer. Adjusting buffer size was also not ideal, as the chunks from OpenAI response would // contain 2-5 chars max for name/symbol, so we stream full text for name/symbol/description as 3 seperate chunks - // and them stream the final image matching token info. + // and them stream the final image matching token info in 2 steps for the client to handle UI updates faster. // generate a unique token name while (true) { tokenIdea.name = await chatWithOpenAI( - TOKEN_AI_PROMPTS_CONFIG.name, + TOKEN_AI_PROMPTS_CONFIG.name(ideaPrompt), openai, ); @@ -159,9 +174,13 @@ const generateTokenIdea = async ( } catch (e) { let error = TokenErrors.RequestFailed; - // this usually happens in the image generation calls if (e?.code === 'content_policy_violation') { - error = TokenErrors.ImageGenerationFailure; + if (ideaPrompt && !tokenIdea.name) { + error = TokenErrors.IdeaPromptVoilatesSecurityPolicy; + } else { + // this usually happens in the image generation calls + error = TokenErrors.ImageGenerationFailure; + } } return res.end( From edc3a7c244d3703f140e9b9f0c18256a3f0aa4c4 Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 21 Oct 2024 07:30:25 -0700 Subject: [PATCH 328/425] resolved merge conflicts --- libs/adapters/src/trpc/middleware.ts | 1 - libs/model/src/index.ts | 1 - libs/model/src/topic/index.ts | 1 - libs/schemas/src/queries/index.ts | 1 - libs/schemas/src/queries/topic.schemas.ts | 23 ------------------ .../client/scripts/models/Thread.ts | 4 ++-- .../client/scripts/models/Topic.ts | 7 ++---- .../api/topics/updateFeaturedTopicsOrder.ts | 2 +- .../NewThreadFormLegacy/NewThreadForm.tsx | 4 ++-- .../NewThreadFormModern/NewThreadForm.tsx | 5 ++-- .../client/scripts/views/components/feed.tsx | 3 +-- .../Integrations/Discord/Discord.tsx | 1 + .../Discord/DiscordConnections.tsx | 2 +- .../HeaderWithFilters/HeaderWithFilters.tsx | 13 ++++++---- .../scripts/views/pages/overview/index.tsx | 2 +- .../server/api/external-router.ts | 10 ++++---- .../server/api/internal-router.ts | 2 -- packages/commonwealth/server/api/topic.ts | 6 ----- ....timestamp-1729518131370-74d6fe19037ca.mjs | 24 ------------------- ....timestamp-1729518131371-c6d00287b6e7d.mjs | 24 ------------------- 20 files changed, 25 insertions(+), 111 deletions(-) delete mode 100644 libs/model/src/topic/index.ts delete mode 100644 libs/schemas/src/queries/topic.schemas.ts delete mode 100644 packages/commonwealth/server/api/topic.ts delete mode 100644 vite.config.ts.timestamp-1729518131370-74d6fe19037ca.mjs delete mode 100644 vite.config.ts.timestamp-1729518131371-c6d00287b6e7d.mjs diff --git a/libs/adapters/src/trpc/middleware.ts b/libs/adapters/src/trpc/middleware.ts index 206c3da5b54..72622144444 100644 --- a/libs/adapters/src/trpc/middleware.ts +++ b/libs/adapters/src/trpc/middleware.ts @@ -40,7 +40,6 @@ export enum Tag { User = 'User', Community = 'Community', Thread = 'Thread', - Topic = 'Topic', Comment = 'Comment', Reaction = 'Reaction', Integration = 'Integration', diff --git a/libs/model/src/index.ts b/libs/model/src/index.ts index a3a8f8fde6e..c465e12e0f5 100644 --- a/libs/model/src/index.ts +++ b/libs/model/src/index.ts @@ -13,7 +13,6 @@ export * as Subscription from './subscription'; export * as SuperAdmin from './super-admin'; export * as Thread from './thread'; export * as Token from './token'; -export * as Topic from './topic'; export * as User from './user'; export * as Wallet from './wallet'; export * as Webhook from './webhook'; diff --git a/libs/model/src/topic/index.ts b/libs/model/src/topic/index.ts deleted file mode 100644 index 81e78d16eb2..00000000000 --- a/libs/model/src/topic/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './GetTopics.query'; diff --git a/libs/schemas/src/queries/index.ts b/libs/schemas/src/queries/index.ts index 9ba108ae253..1b12de97e31 100644 --- a/libs/schemas/src/queries/index.ts +++ b/libs/schemas/src/queries/index.ts @@ -7,5 +7,4 @@ export * from './pagination'; export * from './subscription.schemas'; export * from './thread.schemas'; export * from './token.schemas'; -export * from './topic.schemas'; export * from './user.schemas'; diff --git a/libs/schemas/src/queries/topic.schemas.ts b/libs/schemas/src/queries/topic.schemas.ts deleted file mode 100644 index 22465813a4e..00000000000 --- a/libs/schemas/src/queries/topic.schemas.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { z } from 'zod'; -import { Topic } from '../entities'; -import * as schemas from '../index'; -import { PG_INT, zBoolean } from '../utils'; - -export const GetTopics = { - input: z.object({ - community_id: z.string(), - topic_id: PG_INT.optional(), - include_threads: zBoolean.default(false), - include_contest_managers: zBoolean.default(false), - }), - output: Topic.extend({ - id: z.number(), - total_threads: z.number(), - active_contest_managers: z.array( - schemas.ContestManager.extend({ - content: z.array(schemas.ContestAction), - contest_manager: schemas.ContestManager, - }), - ), - }).array(), -}; diff --git a/packages/commonwealth/client/scripts/models/Thread.ts b/packages/commonwealth/client/scripts/models/Thread.ts index c079715e698..1a02c6f3028 100644 --- a/packages/commonwealth/client/scripts/models/Thread.ts +++ b/packages/commonwealth/client/scripts/models/Thread.ts @@ -10,7 +10,7 @@ import moment, { Moment } from 'moment'; import { z } from 'zod'; import Comment from './Comment'; import type { ReactionType } from './Reaction'; -import type Topic from './Topic'; +import type { Topic } from './Topic'; import type { IUniqueId } from './interfaces'; import type { ThreadKind, ThreadStage } from './types'; @@ -375,7 +375,7 @@ export class Thread implements IUniqueId { this.identifier = `${id}`; this.createdAt = moment(created_at); this.updatedAt = moment(updated_at); - this.topic = topic ?? null; + this.topic = { ...topic }; this.kind = kind; this.stage = stage; this.authorCommunity = Address?.community_id; diff --git a/packages/commonwealth/client/scripts/models/Topic.ts b/packages/commonwealth/client/scripts/models/Topic.ts index 78ce2829c86..15dc3022fd3 100644 --- a/packages/commonwealth/client/scripts/models/Topic.ts +++ b/packages/commonwealth/client/scripts/models/Topic.ts @@ -1,7 +1,4 @@ import * as schemas from '@hicommonwealth/schemas'; -import z from 'zod'; +import { z } from 'zod'; -// TODO: Inline these types (Current PR is getting too big) -export type TopicAttributes = z.infer[0]; -type Topic = TopicAttributes; -export default Topic; +export type Topic = z.infer; diff --git a/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts b/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts index d5bb5d8f90d..fbe5ff3148c 100644 --- a/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts +++ b/packages/commonwealth/client/scripts/state/api/topics/updateFeaturedTopicsOrder.ts @@ -1,6 +1,6 @@ import { useMutation } from '@tanstack/react-query'; import axios from 'axios'; -import Topic from 'models/Topic'; +import type { Topic } from 'models/Topic'; import app from 'state'; import { SERVER_URL } from 'state/api/config'; import { trpc } from 'utils/trpcClient'; diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index 0fa4c592bcb..9aaf244b0f1 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -86,7 +86,7 @@ export const NewThreadForm = () => { setCanShowGatingBanner, canShowTopicPermissionBanner, setCanShowTopicPermissionBanner, - } = useNewThreadForm(communityId, topicsForSelector as unknown as Topic[]); + } = useNewThreadForm(communityId, topicsForSelector); const hasTopicOngoingContest = threadTopic?.active_contest_managers?.length > 0; @@ -275,7 +275,7 @@ export const NewThreadForm = () => { originalProps, topic: topicsForSelector.find( (t) => String(t.id) === originalProps.data.value, - ) as unknown as Topic, + ), }), }} formatOptionLabel={(option) => ( diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index c8acc4872fd..7678c6e2b73 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -29,7 +29,6 @@ import { CWTextInput } from 'views/components/component_kit/new_designs/CWTextIn import { MessageRow } from 'views/components/component_kit/new_designs/CWTextInput/MessageRow'; import useCommunityContests from 'views/pages/CommunityManagement/Contests/useCommunityContests'; import useAppStatus from '../../../hooks/useAppStatus'; -import Topic from '../../../models/Topic'; import { ThreadKind, ThreadStage } from '../../../models/types'; import { CWText } from '../../components/component_kit/cw_text'; import { CWGatedTopicBanner } from '../component_kit/CWGatedTopicBanner'; @@ -81,7 +80,7 @@ export const NewThreadForm = () => { setCanShowGatingBanner, canShowTopicPermissionBanner, setCanShowTopicPermissionBanner, - } = useNewThreadForm(communityId, topicsForSelector as unknown as Topic[]); + } = useNewThreadForm(communityId, topicsForSelector); const hasTopicOngoingContest = threadTopic?.active_contest_managers?.length > 0; @@ -260,7 +259,7 @@ export const NewThreadForm = () => { originalProps, topic: topicsForSelector.find( (t) => String(t.id) === originalProps.data.value, - ) as unknown as Topic, + ), }), }} formatOptionLabel={(option) => ( diff --git a/packages/commonwealth/client/scripts/views/components/feed.tsx b/packages/commonwealth/client/scripts/views/components/feed.tsx index 4b4adfe7570..fceef35adca 100644 --- a/packages/commonwealth/client/scripts/views/components/feed.tsx +++ b/packages/commonwealth/client/scripts/views/components/feed.tsx @@ -16,7 +16,6 @@ import { getThreadActionTooltipText } from 'helpers/threads'; import useTopicGating from 'hooks/useTopicGating'; import { getProposalUrlPath } from 'identifiers'; import { Thread, type RecentComment } from 'models/Thread'; -import Topic from 'models/Topic'; import { ThreadKind, ThreadStage } from 'models/types'; import { useCommonNavigate } from 'navigation/helpers'; import { useGetCommunityByIdQuery } from 'state/api/communities'; @@ -143,7 +142,7 @@ function mapThread(thread: z.infer): Thread { group_ids: [], active_contest_managers: [], total_threads: 0, - } as Topic, + }, kind: thread.kind as ThreadKind, stage: thread.stage as ThreadStage, ThreadVersionHistories: [], diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx index 66f2194bf8d..6c2c5800712 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/Discord.tsx @@ -225,6 +225,7 @@ const Discord = () => { }; }, )} + // @ts-expect-error topics={topics.map((topic) => ({ name: topic.name, id: `${topic.id}`, diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/DiscordConnections.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/DiscordConnections.tsx index 71bdc9f52ff..878b552e321 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/DiscordConnections.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Integrations/Discord/DiscordConnections.tsx @@ -17,7 +17,7 @@ export const DiscordConnections = ({ refetchTopics, }: { channels: DiscordChannels[]; - topics: { id: string; name: string; channelId: string | null | undefined }[]; + topics: { id: string; name: string; channelId: string | null }[]; refetchTopics: () => Promise; }) => { const { mutateAsync: setForumChannelConnection } = diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx index 321005df53b..134623ea205 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/HeaderWithFilters/HeaderWithFilters.tsx @@ -351,7 +351,7 @@ export const HeaderWithFilters = ({ setTopicSelectedToEdit( [...featuredTopics, ...otherTopics].find( (x) => x.id === item.id, - ) as unknown as Topic, + ), ) } /> @@ -474,15 +474,18 @@ export const HeaderWithFilters = ({
      {(activeContests || []).map((contest) => { - if (!contest) return; - const { end_time } = contest?.contests?.[0] || {}; + const { end_time } = + // @ts-expect-error + contest?.contests[0] || {}; return ( + address={contest.contest_address} + // @ts-expect-error + name={contest.name} imageUrl={contest.image_url} // @ts-expect-error topics={contest.topics} diff --git a/packages/commonwealth/client/scripts/views/pages/overview/index.tsx b/packages/commonwealth/client/scripts/views/pages/overview/index.tsx index 94508797b76..b6035951ca4 100644 --- a/packages/commonwealth/client/scripts/views/pages/overview/index.tsx +++ b/packages/commonwealth/client/scripts/views/pages/overview/index.tsx @@ -63,7 +63,7 @@ const OverviewPage = () => { return { monthlyThreads, pinnedThreads: [], // TODO: ask for a pinned thread prop in /threads?active=true api to show pinned threads - topic: topic as unknown as Topic, + topic, }; }); diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 356e8651b37..550a48970d5 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -1,5 +1,5 @@ import { express, trpc } from '@hicommonwealth/adapters'; -import { Comment, Community, Feed } from '@hicommonwealth/model'; +import { Comment, Community, Feed, Thread } from '@hicommonwealth/model'; import cors from 'cors'; import { Router } from 'express'; import passport from 'passport'; @@ -11,7 +11,6 @@ import { apiKeyAuthMiddleware, } from './external-router-middleware'; import * as thread from './thread'; -import * as topic from './topic'; import * as user from './user'; const { @@ -27,7 +26,6 @@ const { banAddress, } = community.trpcRouter; const { - getThreads, createThread, updateThread, createThreadReaction, @@ -37,7 +35,6 @@ const { const { createComment, updateComment, deleteComment, createCommentReaction } = comment.trpcRouter; const { getNewContent } = user.trpcRouter; -const { getTopics } = topic.trpcRouter; const api = { getGlobalActivity: trpc.query(Feed.GetGlobalActivity, trpc.Tag.User, { @@ -63,6 +60,9 @@ const api = { getTopics: trpc.query(Community.GetTopics, trpc.Tag.Community, { forceSecure: true, }), + getThreads: trpc.query(Thread.GetThreads, trpc.Tag.Topic, { + forceSecure: true, + }), createCommunity, updateCommunity, createTopic, @@ -73,9 +73,7 @@ const api = { deleteGroup, createThread, updateThread, - getThreads, deleteThread, - getTopics, createComment, updateComment, deleteComment, diff --git a/packages/commonwealth/server/api/internal-router.ts b/packages/commonwealth/server/api/internal-router.ts index 3a8e528d84b..da983412804 100644 --- a/packages/commonwealth/server/api/internal-router.ts +++ b/packages/commonwealth/server/api/internal-router.ts @@ -14,7 +14,6 @@ import * as subscription from './subscription'; import * as superAdmin from './super-admin'; import * as thread from './thread'; import * as token from './token'; -import * as topic from './topic'; import * as user from './user'; import * as wallet from './wallet'; import * as webhook from './webhook'; @@ -23,7 +22,6 @@ const api = { user: user.trpcRouter, community: community.trpcRouter, thread: thread.trpcRouter, - topic: topic.trpcRouter, comment: comment.trpcRouter, integrations: integrations.trpcRouter, feed: feed.trpcRouter, diff --git a/packages/commonwealth/server/api/topic.ts b/packages/commonwealth/server/api/topic.ts deleted file mode 100644 index ce580945140..00000000000 --- a/packages/commonwealth/server/api/topic.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { trpc } from '@hicommonwealth/adapters'; -import { Topic } from '@hicommonwealth/model'; - -export const trpcRouter = trpc.router({ - getTopics: trpc.query(Topic.GetTopics, trpc.Tag.Topic), -}); diff --git a/vite.config.ts.timestamp-1729518131370-74d6fe19037ca.mjs b/vite.config.ts.timestamp-1729518131370-74d6fe19037ca.mjs deleted file mode 100644 index a7937920b3c..00000000000 --- a/vite.config.ts.timestamp-1729518131370-74d6fe19037ca.mjs +++ /dev/null @@ -1,24 +0,0 @@ -// ../../vite.config.ts -import tsconfigPaths from 'file:///Users/kurtis/commonwealth/node_modules/.pnpm/vite-tsconfig-paths@4.3.2_typescript@5.4.5_vite@5.2.12_@types+node@20.12.10_sass@1.77.0_terser@5.34.1_/node_modules/vite-tsconfig-paths/dist/index.mjs'; -import { defineConfig } from 'file:///Users/kurtis/commonwealth/node_modules/.pnpm/vite@5.2.12_@types+node@20.12.10_sass@1.77.0_terser@5.34.1/node_modules/vite/dist/node/index.js'; -import path from 'path'; -var __vite_injected_original_dirname = '/Users/kurtis/commonwealth'; -var vite_config_default = defineConfig({ - plugins: [tsconfigPaths()], - test: { - globalSetup: path.resolve( - __vite_injected_original_dirname, - './libs/model/src/tester/vitestDatabaseSetup.ts', - ), - coverage: { - provider: 'istanbul', - reporter: - process.env.CI === 'true' - ? ['lcovonly'] - : ['text', ['json', { file: 'coverage.json' }], 'html'], - reportsDirectory: './coverage', - }, - }, -}); -export { vite_config_default as default }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vdml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMva3VydGlzL2NvbW1vbndlYWx0aFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL2t1cnRpcy9jb21tb253ZWFsdGgvdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL2t1cnRpcy9jb21tb253ZWFsdGgvdml0ZS5jb25maWcudHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgdHNjb25maWdQYXRocyBmcm9tICd2aXRlLXRzY29uZmlnLXBhdGhzJztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgcGx1Z2luczogW3RzY29uZmlnUGF0aHMoKV0sXG4gIHRlc3Q6IHtcbiAgICBnbG9iYWxTZXR1cDogcGF0aC5yZXNvbHZlKFxuICAgICAgX19kaXJuYW1lLFxuICAgICAgJy4vbGlicy9tb2RlbC9zcmMvdGVzdGVyL3ZpdGVzdERhdGFiYXNlU2V0dXAudHMnLFxuICAgICksXG4gICAgY292ZXJhZ2U6IHtcbiAgICAgIHByb3ZpZGVyOiAnaXN0YW5idWwnLFxuICAgICAgcmVwb3J0ZXI6XG4gICAgICAgIHByb2Nlc3MuZW52LkNJID09PSAndHJ1ZSdcbiAgICAgICAgICA/IFsnbGNvdm9ubHknXVxuICAgICAgICAgIDogWyd0ZXh0JywgWydqc29uJywgeyBmaWxlOiAnY292ZXJhZ2UuanNvbicgfV0sICdodG1sJ10sXG4gICAgICByZXBvcnRzRGlyZWN0b3J5OiAnLi9jb3ZlcmFnZScsXG4gICAgfSxcbiAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLE9BQU8sVUFBVTtBQUNqQixTQUFTLG9CQUFvQjtBQUM3QixPQUFPLG1CQUFtQjtBQUoxQixJQUFNLG1DQUFtQztBQU16QyxJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMxQixTQUFTLENBQUMsY0FBYyxDQUFDO0FBQUEsRUFDekIsTUFBTTtBQUFBLElBQ0osYUFBYSxLQUFLO0FBQUEsTUFDaEI7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsVUFBVTtBQUFBLE1BQ1YsVUFDRSxRQUFRLElBQUksT0FBTyxTQUNmLENBQUMsVUFBVSxJQUNYLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDLEdBQUcsTUFBTTtBQUFBLE1BQzFELGtCQUFrQjtBQUFBLElBQ3BCO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg== diff --git a/vite.config.ts.timestamp-1729518131371-c6d00287b6e7d.mjs b/vite.config.ts.timestamp-1729518131371-c6d00287b6e7d.mjs deleted file mode 100644 index a7937920b3c..00000000000 --- a/vite.config.ts.timestamp-1729518131371-c6d00287b6e7d.mjs +++ /dev/null @@ -1,24 +0,0 @@ -// ../../vite.config.ts -import tsconfigPaths from 'file:///Users/kurtis/commonwealth/node_modules/.pnpm/vite-tsconfig-paths@4.3.2_typescript@5.4.5_vite@5.2.12_@types+node@20.12.10_sass@1.77.0_terser@5.34.1_/node_modules/vite-tsconfig-paths/dist/index.mjs'; -import { defineConfig } from 'file:///Users/kurtis/commonwealth/node_modules/.pnpm/vite@5.2.12_@types+node@20.12.10_sass@1.77.0_terser@5.34.1/node_modules/vite/dist/node/index.js'; -import path from 'path'; -var __vite_injected_original_dirname = '/Users/kurtis/commonwealth'; -var vite_config_default = defineConfig({ - plugins: [tsconfigPaths()], - test: { - globalSetup: path.resolve( - __vite_injected_original_dirname, - './libs/model/src/tester/vitestDatabaseSetup.ts', - ), - coverage: { - provider: 'istanbul', - reporter: - process.env.CI === 'true' - ? ['lcovonly'] - : ['text', ['json', { file: 'coverage.json' }], 'html'], - reportsDirectory: './coverage', - }, - }, -}); -export { vite_config_default as default }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vdml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMva3VydGlzL2NvbW1vbndlYWx0aFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL2t1cnRpcy9jb21tb253ZWFsdGgvdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL2t1cnRpcy9jb21tb253ZWFsdGgvdml0ZS5jb25maWcudHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgdHNjb25maWdQYXRocyBmcm9tICd2aXRlLXRzY29uZmlnLXBhdGhzJztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgcGx1Z2luczogW3RzY29uZmlnUGF0aHMoKV0sXG4gIHRlc3Q6IHtcbiAgICBnbG9iYWxTZXR1cDogcGF0aC5yZXNvbHZlKFxuICAgICAgX19kaXJuYW1lLFxuICAgICAgJy4vbGlicy9tb2RlbC9zcmMvdGVzdGVyL3ZpdGVzdERhdGFiYXNlU2V0dXAudHMnLFxuICAgICksXG4gICAgY292ZXJhZ2U6IHtcbiAgICAgIHByb3ZpZGVyOiAnaXN0YW5idWwnLFxuICAgICAgcmVwb3J0ZXI6XG4gICAgICAgIHByb2Nlc3MuZW52LkNJID09PSAndHJ1ZSdcbiAgICAgICAgICA/IFsnbGNvdm9ubHknXVxuICAgICAgICAgIDogWyd0ZXh0JywgWydqc29uJywgeyBmaWxlOiAnY292ZXJhZ2UuanNvbicgfV0sICdodG1sJ10sXG4gICAgICByZXBvcnRzRGlyZWN0b3J5OiAnLi9jb3ZlcmFnZScsXG4gICAgfSxcbiAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLE9BQU8sVUFBVTtBQUNqQixTQUFTLG9CQUFvQjtBQUM3QixPQUFPLG1CQUFtQjtBQUoxQixJQUFNLG1DQUFtQztBQU16QyxJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMxQixTQUFTLENBQUMsY0FBYyxDQUFDO0FBQUEsRUFDekIsTUFBTTtBQUFBLElBQ0osYUFBYSxLQUFLO0FBQUEsTUFDaEI7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsVUFBVTtBQUFBLE1BQ1YsVUFDRSxRQUFRLElBQUksT0FBTyxTQUNmLENBQUMsVUFBVSxJQUNYLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDLEdBQUcsTUFBTTtBQUFBLE1BQzFELGtCQUFrQjtBQUFBLElBQ3BCO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg== From 4de1f37890395e5683e8e0514f87e2a62e7c0341 Mon Sep 17 00:00:00 2001 From: kassad Date: Mon, 21 Oct 2024 07:40:42 -0700 Subject: [PATCH 329/425] Minor fix --- packages/commonwealth/server/api/external-router.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/server/api/external-router.ts b/packages/commonwealth/server/api/external-router.ts index 550a48970d5..145d6669fa4 100644 --- a/packages/commonwealth/server/api/external-router.ts +++ b/packages/commonwealth/server/api/external-router.ts @@ -60,7 +60,7 @@ const api = { getTopics: trpc.query(Community.GetTopics, trpc.Tag.Community, { forceSecure: true, }), - getThreads: trpc.query(Thread.GetThreads, trpc.Tag.Topic, { + getThreads: trpc.query(Thread.GetThreads, trpc.Tag.Thread, { forceSecure: true, }), createCommunity, From 54936eb18d6228a305f26de84377d183d6033bd1 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 19:42:46 +0500 Subject: [PATCH 330/425] Added max char limit for initial idea prompt --- .../components/LaunchIdeaCard/LaunchIdeaCard.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx index bafd86f6d75..a94a1b2c56f 100644 --- a/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx +++ b/packages/commonwealth/client/scripts/views/components/LaunchIdeaCard/LaunchIdeaCard.tsx @@ -1,3 +1,4 @@ +import { VALIDATION_MESSAGES } from 'helpers/formValidations/messages'; import React, { useState } from 'react'; import { CWText } from 'views/components/component_kit/cw_text'; import { CWButton } from '../component_kit/new_designs/CWButton'; @@ -8,13 +9,16 @@ import './LaunchIdeaCard.scss'; type LaunchIdeaCardProps = { onTokenLaunchClick?: () => void; onRandomizeClick?: (ideaPrompt?: string) => void; + maxPromptLength?: number; }; const LaunchIdeaCard = ({ onTokenLaunchClick, onRandomizeClick, + maxPromptLength = 80, }: LaunchIdeaCardProps) => { const [ideaPrompt, setIdeaPrompt] = useState(); + const maxCharLimitReached = maxPromptLength === (ideaPrompt || '').length; return (
      @@ -23,7 +27,14 @@ const LaunchIdeaCard = ({ setIdeaPrompt(e.target.value.trim())} + onInput={(e) => + !maxCharLimitReached && setIdeaPrompt(e.target.value.trim()) + } + customError={ + maxCharLimitReached + ? VALIDATION_MESSAGES.MAX_CHAR_LIMIT_REACHED + : '' + } />
      From 1e231f604fd4d1221361c9d25681cfb662690605 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 20:27:29 +0500 Subject: [PATCH 331/425] Fix uuidv4 import --- packages/commonwealth/server/routes/generateTokenIdea.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/server/routes/generateTokenIdea.ts b/packages/commonwealth/server/routes/generateTokenIdea.ts index 0d34718b002..ee936edde5a 100644 --- a/packages/commonwealth/server/routes/generateTokenIdea.ts +++ b/packages/commonwealth/server/routes/generateTokenIdea.ts @@ -1,12 +1,12 @@ import { AppError, ServerError, blobStorage } from '@hicommonwealth/core'; import { DB } from '@hicommonwealth/model'; -import { uuidv4 } from 'lib/util'; import fetch from 'node-fetch'; import { OpenAI } from 'openai'; import { ChatCompletionMessage, ChatCompletionUserMessageParam, } from 'openai/resources/index.mjs'; +import { v4 as uuidv4 } from 'uuid'; import { type TypedRequestBody, type TypedResponse } from '../types'; const TOKEN_AI_PROMPTS_CONFIG = { From ad5948a9433166f57ab5ea2354b8978ca09f9bee Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 20:53:58 +0500 Subject: [PATCH 332/425] Block form fields from update as idea is being generated --- .../QuickTokenLaunchForm/QuickTokenLaunchForm.tsx | 10 +++++----- .../QuickTokenLaunchForm/useGenerateTokenIdea.tsx | 12 +++++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index 784410f5603..4aec93458b5 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -47,13 +47,12 @@ export const QuickTokenLaunchForm = ({ generateIdea, tokenIdeas, activeTokenIdeaIndex, + generatedTokenIdea, + isMaxTokenIdeaLimitReached, setActiveTokenIdeaIndex, } = useGenerateTokenIdea({ maxIdeasLimit: MAX_IDEAS_LIMIT, }); - const generatedTokenIdea = tokenIdeas[activeTokenIdeaIndex]; - const isMaxTokenIdeaLimitReached = - MAX_IDEAS_LIMIT === Math.max(tokenIdeas.length, activeTokenIdeaIndex + 1); const [isCreatingQuickToken, setIsCreatingQuickToken] = useState(false); const [ createdCommunityIdsToTokenInfoMap, @@ -289,7 +288,8 @@ export const QuickTokenLaunchForm = ({ key={`${activeTokenIdeaIndex}-${generatedTokenIdea?.token?.imageURL}`} selectedAddress={selectedAddress} onAddressSelected={setSelectedAddress} - openAddressSelectorOnMount={!generateIdeaOnMount} + openAddressSelectorOnMount={false} + formDisabled={generatedTokenIdea?.isChunking} onCancel={onCancel} onSubmit={handleSubmit} {...(generatedTokenIdea?.chunkingField && { @@ -367,7 +367,7 @@ export const QuickTokenLaunchForm = ({ disabled={ isProcessingProfileImage || isCreatingQuickToken || - generatedTokenIdea?.isGeneratingTokenIdea + generatedTokenIdea?.isChunking } />
      diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx index 5ee86525d36..6ed6d247792 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx @@ -27,11 +27,15 @@ export const useGenerateTokenIdea = ({ { chunkingField?: keyof TokenIdea; token?: TokenIdea; - isGeneratingTokenIdea?: boolean; + isChunking?: boolean; tokenIdeaGenerationError?: Error; }[] >([]); + const generatedTokenIdea = tokenIdeas[activeTokenIdeaIndex]; + const isMaxTokenIdeaLimitReached = + maxIdeasLimit === Math.max(tokenIdeas.length, activeTokenIdeaIndex + 1); + const generateIdea = async (ideaPrompt?: string) => { if (maxIdeasLimit === totalIdeasGenerated.current) return; const ideaIndex = totalIdeasGenerated.current; @@ -43,7 +47,7 @@ export const useGenerateTokenIdea = ({ const temp = [...ti]; temp[ideaIndex] = { ...(temp[ideaIndex] || {}), - isGeneratingTokenIdea: true, + isChunking: true, tokenIdeaGenerationError: undefined, }; return temp; @@ -153,7 +157,7 @@ export const useGenerateTokenIdea = ({ const temp = [...ti]; temp[ideaIndex] = { ...(temp[ideaIndex] || {}), - isGeneratingTokenIdea: false, + isChunking: false, }; return temp; }); @@ -165,5 +169,7 @@ export const useGenerateTokenIdea = ({ setActiveTokenIdeaIndex, tokenIdeas, generateIdea, + generatedTokenIdea, + isMaxTokenIdeaLimitReached, }; }; From 9ab88f031d06042cd130393a6f224ff517dc80f2 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 22:03:02 +0500 Subject: [PATCH 333/425] Added support for updating generated idea draft states --- .../QuickTokenLaunchForm.tsx | 33 ++++++++++++++++++- .../useGenerateTokenIdea.tsx | 16 +++++++++ .../TokenInformationForm.tsx | 2 ++ .../TokenInformationForm/types.ts | 1 + 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index 4aec93458b5..da68121e324 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -3,7 +3,7 @@ import clsx from 'clsx'; import { notifyError } from 'controllers/app/notifications'; import useBeforeUnload from 'hooks/useBeforeUnload'; import useRunOnceOnCondition from 'hooks/useRunOnceOnCondition'; -import React, { useState } from 'react'; +import React, { useRef, useState } from 'react'; import { slugifyPreserveDashes } from 'shared/utils'; import { useUpdateCommunityMutation } from 'state/api/communities'; import useCreateCommunityMutation, { @@ -43,6 +43,7 @@ export const QuickTokenLaunchForm = ({ initialIdeaPrompt, generateIdeaOnMount = false, }: QuickTokenLaunchFormProps) => { + const timeoutRef = useRef(undefined); const { generateIdea, tokenIdeas, @@ -50,6 +51,7 @@ export const QuickTokenLaunchForm = ({ generatedTokenIdea, isMaxTokenIdeaLimitReached, setActiveTokenIdeaIndex, + updateTokenIdeaByIndex, } = useGenerateTokenIdea({ maxIdeasLimit: MAX_IDEAS_LIMIT, }); @@ -268,6 +270,34 @@ export const QuickTokenLaunchForm = ({ handleAsync().catch(console.error); }; + const handleFormUpdates = (values: FormSubmitValues) => { + if (timeoutRef.current) clearTimeout(timeoutRef.current); + + const timeout = setTimeout(() => { + const isSameValues = + values.name === generatedTokenIdea?.token?.name && + values.symbol === generatedTokenIdea?.token?.symbol && + values.description === generatedTokenIdea?.token?.description; + if (generatedTokenIdea?.isChunking || isSameValues) { + timeoutRef.current = undefined; + return; + } + + updateTokenIdeaByIndex( + { + description: values.description, + imageURL: values.imageURL, + name: values.name, + symbol: values.symbol, + }, + activeTokenIdeaIndex, + ); + + timeoutRef.current = undefined; + }, 1000); + timeoutRef.current = timeout; + }; + return (
      {!createdCommunityId && ( @@ -291,6 +321,7 @@ export const QuickTokenLaunchForm = ({ openAddressSelectorOnMount={false} formDisabled={generatedTokenIdea?.isChunking} onCancel={onCancel} + onFormUpdate={handleFormUpdates} onSubmit={handleSubmit} {...(generatedTokenIdea?.chunkingField && { focusField: generatedTokenIdea.chunkingField, diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx index 6ed6d247792..e65871c4dd7 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx @@ -164,6 +164,21 @@ export const useGenerateTokenIdea = ({ } }; + const updateTokenIdeaByIndex = (token: TokenIdea, ideaIndex: number) => { + // if this is the first idea/draft, count should be updated for adding + // randomized idea generation in the next index when that is generated + if (totalIdeasGenerated.current === 0) totalIdeasGenerated.current += 1; + + setTokenIdeas((ti) => { + const temp = [...ti]; + temp[ideaIndex] = { + ...(temp[ideaIndex] || {}), + token, + }; + return temp; + }); + }; + return { activeTokenIdeaIndex, setActiveTokenIdeaIndex, @@ -171,5 +186,6 @@ export const useGenerateTokenIdea = ({ generateIdea, generatedTokenIdea, isMaxTokenIdeaLimitReached, + updateTokenIdeaByIndex, }; }; diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx index 5be22640204..f351d4a8813 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx @@ -39,6 +39,7 @@ import { tokenInformationFormValidationSchema } from './validation'; const TokenInformationForm = ({ onSubmit, onCancel, + onFormUpdate, onAddressSelected, selectedAddress, containerClassName, @@ -176,6 +177,7 @@ const TokenInformationForm = ({ // @ts-expect-error ref={formMethodsRef} onSubmit={handleSubmit} + onWatch={onFormUpdate} validationSchema={tokenInformationFormValidationSchema} className={clsx('TokenInformationForm', containerClassName)} > diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts index 3022e41c3bd..b7e76d963a2 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/types.ts @@ -12,6 +12,7 @@ export type FormSubmitValues = { export type TokenInformationFormProps = { onSubmit: (values: FormSubmitValues) => void; onCancel: () => void; + onFormUpdate?: (values: FormSubmitValues) => void; selectedAddress?: AddressInfo; onAddressSelected: (address: AddressInfo) => void; containerClassName?: string; From b2d25e5195c79ab24a12c0519b7e535c671c2ccd Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 22:04:45 +0500 Subject: [PATCH 334/425] User older token state if present, when updating draft state of generated idea --- .../IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx index e65871c4dd7..43048af2fff 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx @@ -173,7 +173,7 @@ export const useGenerateTokenIdea = ({ const temp = [...ti]; temp[ideaIndex] = { ...(temp[ideaIndex] || {}), - token, + token: { ...(temp[ideaIndex]?.token || {}), ...token }, }; return temp; }); From 14b0bc90efad8debb797e5f86826c4679d532e44 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Mon, 21 Oct 2024 10:21:05 -0700 Subject: [PATCH 335/425] Do not attempt to authenticate or identify if a user knockJWT is not set. --- .../components/KnockNotifications/KnockNotifications.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx b/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx index 941322ec298..72d30805443 100644 --- a/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx +++ b/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx @@ -34,6 +34,11 @@ export const KnockNotifications = () => { return; } + if (!user.knockJWT) { + console.warn('user knockJWT not set!'); + return; + } + const timezone = getBrowserTimezone(); async function doAsync() { knock.authenticate(`${user.id}`, user.knockJWT); From 6c224b39d5fce952d1926abb9b77359866d01dc1 Mon Sep 17 00:00:00 2001 From: Kevin Burton Date: Mon, 21 Oct 2024 10:21:42 -0700 Subject: [PATCH 336/425] ... --- .../views/components/KnockNotifications/KnockNotifications.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx b/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx index 72d30805443..dfec0584182 100644 --- a/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx +++ b/packages/commonwealth/client/scripts/views/components/KnockNotifications/KnockNotifications.tsx @@ -35,7 +35,7 @@ export const KnockNotifications = () => { } if (!user.knockJWT) { - console.warn('user knockJWT not set!'); + console.warn('user knockJWT not set! Will not attempt to identify.'); return; } From 72bc9973c5c5d9b3f1066768d15726926b90bf11 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 23:13:13 +0500 Subject: [PATCH 337/425] Converted `/api/generateTokenIdea` to be framework agnostic --- libs/model/package.json | 1 + libs/model/src/config.ts | 10 + libs/model/src/services/index.ts | 1 + .../src/services/openai/generateTokenIdea.ts | 175 ++++++++++++++++ libs/model/src/services/openai/index.ts | 1 + .../server/routes/generateTokenIdea.ts | 192 ------------------ .../commonwealth/server/routing/router.ts | 32 ++- pnpm-lock.yaml | 47 +++-- 8 files changed, 244 insertions(+), 215 deletions(-) create mode 100644 libs/model/src/services/openai/generateTokenIdea.ts create mode 100644 libs/model/src/services/openai/index.ts delete mode 100644 packages/commonwealth/server/routes/generateTokenIdea.ts diff --git a/libs/model/package.json b/libs/model/package.json index e5cb9b38059..446b0edaaff 100644 --- a/libs/model/package.json +++ b/libs/model/package.json @@ -46,6 +46,7 @@ "moment": "^2.23.0", "node-fetch": "2", "node-object-hash": "^3.0.0", + "openai": "^4.0.0", "pg": "^8.11.3", "quill-delta-to-markdown": "^0.6.0", "sequelize": "^6.32.1", diff --git a/libs/model/src/config.ts b/libs/model/src/config.ts index 3c5c07cbedd..6ec02bf1916 100644 --- a/libs/model/src/config.ts +++ b/libs/model/src/config.ts @@ -35,6 +35,8 @@ const { ALCHEMY_PUBLIC_APP_KEY, MEMBERSHIP_REFRESH_BATCH_SIZE, MEMBERSHIP_REFRESH_TTL_SECONDS, + OPENAI_API_KEY, + OPENAI_ORGANIZATION, } = process.env; const NAME = @@ -142,6 +144,10 @@ export const config = configure( CLIENT_ID: DISCORD_CLIENT_ID, BOT_TOKEN: DISCORD_TOKEN, }, + OPENAI: { + API_KEY: OPENAI_API_KEY, + ORGANIZATION: OPENAI_ORGANIZATION || 'org-D0ty00TJDApqHYlrn1gge2Ql', + }, }, z.object({ DB: z.object({ @@ -265,5 +271,9 @@ export const config = configure( 'DISCORD_TOKEN is required in production, frick, frack, beta (QA), and demo', ), }), + OPENAI: z.object({ + API_KEY: z.string().optional(), + ORGANIZATION: z.string().optional(), + }), }), ); diff --git a/libs/model/src/services/index.ts b/libs/model/src/services/index.ts index 7898713a010..ab37472aaf3 100644 --- a/libs/model/src/services/index.ts +++ b/libs/model/src/services/index.ts @@ -1,4 +1,5 @@ export * as commonProtocol from './commonProtocol'; +export * from './openai'; export * from './snapshot'; export * as stakeHelper from './stakeHelper'; export * as tokenBalanceCache from './tokenBalanceCache'; diff --git a/libs/model/src/services/openai/generateTokenIdea.ts b/libs/model/src/services/openai/generateTokenIdea.ts new file mode 100644 index 00000000000..09aef4e4cae --- /dev/null +++ b/libs/model/src/services/openai/generateTokenIdea.ts @@ -0,0 +1,175 @@ +import { blobStorage } from '@hicommonwealth/core'; +import fetch from 'node-fetch'; +import { OpenAI } from 'openai'; +import { + ChatCompletionMessage, + ChatCompletionUserMessageParam, +} from 'openai/resources/index.mjs'; +import { v4 as uuidv4 } from 'uuid'; +import { config } from '../../config'; +import { models } from '../../database'; +import { TokenInstance } from '../../models/token'; + +type TokenIdea = { + name: string; + symbol: string; + description: string; + imageURL: string; +}; + +type GenerateTokenIdeaProps = { + ideaPrompt?: string; +}; + +type GenerateTokenIdeaResponse = { + tokenIdea?: TokenIdea; + error?: string; +}; + +const TOKEN_AI_PROMPTS_CONFIG = { + name: (ideaPrompt?: string) => ` + Please ${ideaPrompt ? `use this prompt in quotation "${ideaPrompt}" to ` : ''} + create a random idea for a memecoin cryptocurrency, have the token name informed by current events, + and historical internet based humor. Make it hyper opinionated and subversive or topical. Provide just the + token name without any acronym or symbol. Make it either cringe or amazing. Restrict your answer to between + 6 and 25 characters. + `, + symbol: ` + Create a symbol for this token (symbol) of 3-6 characters. The symbol should not include special characters + or emojis. Restrict your answer to between 3 and 6 characters.`, + description: ` + Provide a description for the token. Make it funny and keep it in the vein of ironic, sardonic, twitter personae. + There are no emoji restrictions. Keep the description to 3 sentences. DO NOT BE OVERLY POSITIVE about global + phenomenon, only the asset itself. Restrict your answer to between 1 and 3 sentences and less than 180 characters. + `, + image: (name: string, symbol: string) => ` + Please create an image for a web3 token named "${name}", having a symbol of "${symbol}". + `, +}; + +const TokenErrors = { + OpenAINotConfigured: 'OpenAI key not configured', + OpenAIInitFailed: 'OpenAI initialization failed', + RequestFailed: 'failed to generate complete token idea generation', + IdeaPromptVoilatesSecurityPolicy: + 'provided `ideaPrompt` voilates content security policy', + ImageGenerationFailure: 'failed to generate image for token idea', +}; + +// we have to maintain this to have "conversational" context with OpenAI +const convoHistory: (ChatCompletionMessage | ChatCompletionUserMessageParam)[] = + []; + +const chatWithOpenAI = async (prompt = '', openai: OpenAI) => { + convoHistory.push({ role: 'user', content: prompt }); // user msg + + const response = await openai.chat.completions.create({ + model: 'gpt-3.5-turbo', + messages: convoHistory, + }); + convoHistory.push(response.choices[0].message); // assistant msg + + return (response.choices[0].message.content || 'NO_RESPONSE').replace( + /^"|"$/g, // sometimes openAI adds `"` at the start/end of the response + tweaking the prompt also doesn't help + '', + ); +}; + +const generateTokenIdea = async function* ({ + ideaPrompt, +}: GenerateTokenIdeaProps): AsyncGenerator< + GenerateTokenIdeaResponse, + void, + unknown +> { + if (!config.OPENAI.API_KEY) { + yield { error: TokenErrors.OpenAINotConfigured }; + } + + const openai = new OpenAI({ + organization: config.OPENAI.ORGANIZATION, + apiKey: config.OPENAI.API_KEY, + }); + + if (!openai) { + yield { error: TokenErrors.OpenAIInitFailed }; + } + + const tokenIdea = { + name: '', + symbol: '', + description: '', + imageURL: '', + }; + + try { + // generate a unique token name + let foundToken: TokenInstance | boolean | null = true; + while (foundToken) { + tokenIdea.name = await chatWithOpenAI( + TOKEN_AI_PROMPTS_CONFIG.name(ideaPrompt), + openai, + ); + + foundToken = await models.Token.findOne({ + where: { + name: tokenIdea.name, + }, + }); + if (!foundToken) break; + } + yield { tokenIdea }; + + tokenIdea.symbol = await chatWithOpenAI( + TOKEN_AI_PROMPTS_CONFIG.symbol, + openai, + ); + yield { tokenIdea }; + + tokenIdea.description = await chatWithOpenAI( + TOKEN_AI_PROMPTS_CONFIG.description, + openai, + ); + yield { tokenIdea }; + + // generate image url and send the generated url to the client (to save time on s3 upload) + const imageResponse = await openai.images.generate({ + prompt: TOKEN_AI_PROMPTS_CONFIG.image(tokenIdea.name, tokenIdea.symbol), + size: '256x256', + n: 1, + response_format: 'url', + }); + tokenIdea.imageURL = imageResponse.data[0].url || ''; + yield { tokenIdea }; + + // upload image to s3 and then send finalized imageURL + const resp = await fetch(tokenIdea.imageURL); + const buffer = await resp.buffer(); + const { url } = await blobStorage().upload({ + key: `${uuidv4()}.png`, + bucket: 'assets', + content: buffer, + contentType: 'image/png', + }); + tokenIdea.imageURL = url; + yield { tokenIdea }; + } catch (e) { + let error = TokenErrors.RequestFailed; + + if ( + e instanceof OpenAI.APIError && + e?.code === 'content_policy_violation' + ) { + if (ideaPrompt && !tokenIdea.name) { + error = TokenErrors.IdeaPromptVoilatesSecurityPolicy; + } else { + // this usually happens in the image generation calls + error = TokenErrors.ImageGenerationFailure; + } + } + + yield { error }; + } +}; + +export { generateTokenIdea }; diff --git a/libs/model/src/services/openai/index.ts b/libs/model/src/services/openai/index.ts new file mode 100644 index 00000000000..8363902fc7f --- /dev/null +++ b/libs/model/src/services/openai/index.ts @@ -0,0 +1 @@ +export * from './generateTokenIdea'; diff --git a/packages/commonwealth/server/routes/generateTokenIdea.ts b/packages/commonwealth/server/routes/generateTokenIdea.ts deleted file mode 100644 index ee936edde5a..00000000000 --- a/packages/commonwealth/server/routes/generateTokenIdea.ts +++ /dev/null @@ -1,192 +0,0 @@ -import { AppError, ServerError, blobStorage } from '@hicommonwealth/core'; -import { DB } from '@hicommonwealth/model'; -import fetch from 'node-fetch'; -import { OpenAI } from 'openai'; -import { - ChatCompletionMessage, - ChatCompletionUserMessageParam, -} from 'openai/resources/index.mjs'; -import { v4 as uuidv4 } from 'uuid'; -import { type TypedRequestBody, type TypedResponse } from '../types'; - -const TOKEN_AI_PROMPTS_CONFIG = { - name: (ideaPrompt?: string) => ` - Please ${ideaPrompt ? `use this prompt in quotation "${ideaPrompt}" to ` : ''} - create a random idea for a memecoin cryptocurrency, have the token name informed by current events, - and historical internet based humor. Make it hyper opinionated and subversive or topical. Provide just the - token name without any acronym or symbol. Make it either cringe or amazing. Restrict your answer to between - 6 and 25 characters. - `, - symbol: ` - Create a symbol for this token (symbol) of 3-6 characters. The symbol should not include special characters - or emojis. Restrict your answer to between 3 and 6 characters.`, - description: ` - Provide a description for the token. Make it funny and keep it in the vein of ironic, sardonic, twitter personae. - There are no emoji restrictions. Keep the description to 3 sentences. DO NOT BE OVERLY POSITIVE about global - phenomenon, only the asset itself. Restrict your answer to between 1 and 3 sentences and less than 180 characters. - `, - image: (name: string, symbol: string) => ` - Please create an image for a web3 token named "${name}", having a symbol of "${symbol}". - `, -}; - -const TokenErrors = { - OpenAINotConfigured: 'OpenAI key not configured', - OpenAIInitFailed: 'OpenAI initialization failed', - RequestFailed: 'failed to generate complete token idea generation', - IdeaPromptVoilatesSecurityPolicy: - 'provide `ideaPrompt` voilates content security policy', - ImageGenerationFailure: 'failed to generate image for token idea', -}; - -// we have to maintain this to have "conversational" context with OpenAI -const convoHistory: (ChatCompletionMessage | ChatCompletionUserMessageParam)[] = - []; - -const chatWithOpenAI = async (prompt = '', openai: OpenAI) => { - convoHistory.push({ role: 'user', content: prompt }); // user msg - - const response = await openai.chat.completions.create({ - model: 'gpt-3.5-turbo', - messages: convoHistory, - }); - convoHistory.push(response.choices[0].message); // assistant msg - - return (response.choices[0].message.content || 'NO_RESPONSE').replace( - /^"|"$/g, // sometimes openAI adds `"` at the start/end of the response + tweaking the prompt also doesn't help - '', - ); -}; - -type TokenIdea = { - name: string; - symbol: string; - description: string; - imageURL: string; -}; - -type GenerateTokenIdeaReq = { - ideaPrompt?: string; -}; - -type GenerateTokenIdeaRes = { - tokenIdea: TokenIdea; -}; - -const generateTokenIdea = async ( - models: DB, - req: TypedRequestBody, - res: TypedResponse, -) => { - if (!process.env.OPENAI_API_KEY) { - throw new AppError(TokenErrors.OpenAINotConfigured); - } - - const openai = new OpenAI({ - organization: - process.env.OPENAI_ORGANIZATION || 'org-D0ty00TJDApqHYlrn1gge2Ql', - apiKey: process.env.OPENAI_API_KEY, - }); - - if (!openai) { - throw new ServerError(TokenErrors.OpenAIInitFailed); - } - - const ideaPrompt = - typeof req.body?.ideaPrompt === 'string' ? req.body?.ideaPrompt : undefined; - - const tokenIdea = { - name: '', - symbol: '', - description: '', - imageURL: '', - }; - - try { - // required for streaming - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Transfer-Encoding', 'chunked'); - - // Note: name/symbol/description were generated very fast by OpenAI and streaming chunks of text for individual - // chars of name/symbol/description wasn't proving to be ideal, the FE was receiving chunks way faster, sometimes - // all chunks in a single buffer. Adjusting buffer size was also not ideal, as the chunks from OpenAI response would - // contain 2-5 chars max for name/symbol, so we stream full text for name/symbol/description as 3 seperate chunks - // and them stream the final image matching token info in 2 steps for the client to handle UI updates faster. - - // generate a unique token name - while (true) { - tokenIdea.name = await chatWithOpenAI( - TOKEN_AI_PROMPTS_CONFIG.name(ideaPrompt), - openai, - ); - - const foundToken = await models.Token.findOne({ - where: { - name: tokenIdea.name, - }, - }); - if (!foundToken) break; - } - res.write(JSON.stringify(tokenIdea) + '\n'); - res.flush(); - - tokenIdea.symbol = await chatWithOpenAI( - TOKEN_AI_PROMPTS_CONFIG.symbol, - openai, - ); - res.write(JSON.stringify(tokenIdea) + '\n'); - res.flush(); - - tokenIdea.description = await chatWithOpenAI( - TOKEN_AI_PROMPTS_CONFIG.description, - openai, - ); - res.write(JSON.stringify(tokenIdea) + '\n'); - res.flush(); - - // generate image url and send the generated url to the client (to save time on s3 upload) - const imageResponse = await openai.images.generate({ - prompt: TOKEN_AI_PROMPTS_CONFIG.image(tokenIdea.name, tokenIdea.symbol), - size: '256x256', - n: 1, - response_format: 'url', - }); - tokenIdea.imageURL = imageResponse.data[0].url || ''; - res.write(JSON.stringify(tokenIdea) + '\n'); - res.flush(); - - // upload image to s3 and then send finalized imageURL - const resp = await fetch(tokenIdea.imageURL); - const buffer = await resp.buffer(); - const { url } = await blobStorage().upload({ - key: `${uuidv4()}.png`, - bucket: 'assets', - content: buffer, - contentType: 'image/png', - }); - tokenIdea.imageURL = url; - res.write(JSON.stringify(tokenIdea) + '\n'); - res.flush(); - - return res.end( - JSON.stringify({ status: 'success', message: 'stream ended' }) + '\n', - ); - } catch (e) { - let error = TokenErrors.RequestFailed; - - if (e?.code === 'content_policy_violation') { - if (ideaPrompt && !tokenIdea.name) { - error = TokenErrors.IdeaPromptVoilatesSecurityPolicy; - } else { - // this usually happens in the image generation calls - error = TokenErrors.ImageGenerationFailure; - } - } - - return res.end( - JSON.stringify({ status: 'failure', message: error }) + '\n', - ); - } -}; - -export default generateTokenIdea; diff --git a/packages/commonwealth/server/routing/router.ts b/packages/commonwealth/server/routing/router.ts index d5092131c23..7e2de877f2d 100644 --- a/packages/commonwealth/server/routing/router.ts +++ b/packages/commonwealth/server/routing/router.ts @@ -54,9 +54,9 @@ import { type DB } from '@hicommonwealth/model'; import banAddress from '../routes/banAddress'; import setAddressWallet from '../routes/setAddressWallet'; +import { generateTokenIdea } from '@hicommonwealth/model'; import type DatabaseValidationService from '../middleware/databaseValidationService'; import generateImage from '../routes/generateImage'; -import generateTokenIdea from '../routes/generateTokenIdea'; import * as controllers from '../controller'; import addThreadLink from '../routes/linking/addThreadLinks'; @@ -563,7 +563,35 @@ function setupRouter( requestsPerMinute: config.GENERATE_IMAGE_RATE_LIMIT, }), passport.authenticate('jwt', { session: false }), - generateTokenIdea.bind(this, models), + async (req, res) => { + // required for streaming + res.setHeader('Content-Type', 'text/plain'); + res.setHeader('Transfer-Encoding', 'chunked'); + + const ideaPrompt = + typeof req.body?.ideaPrompt === 'string' + ? req.body?.ideaPrompt + : undefined; + + const ideaGenerator = generateTokenIdea({ ideaPrompt }); + + for await (const chunk of ideaGenerator) { + // generation error + if (chunk.error) { + return res.end( + JSON.stringify({ status: 'failure', message: chunk.error }) + '\n', + ); + } + + // stream chunks as they are generated + res.write(JSON.stringify(chunk.tokenIdea) + '\n'); + res.flush(); + } + + return res.end( + JSON.stringify({ status: 'success', message: 'stream ended' }) + '\n', + ); + }, ); // linking diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d750816a5d..e6be1eecdd3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -573,7 +573,7 @@ importers: dependencies: '@alchemy/aa-alchemy': specifier: ^3.17.0 - version: 3.19.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(@types/react@18.3.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)) + version: 3.19.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(@types/react@18.3.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)) '@alchemy/aa-core': specifier: ^3.16.0 version: 3.19.0(typescript@5.4.5)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)) @@ -640,6 +640,9 @@ importers: node-object-hash: specifier: ^3.0.0 version: 3.0.0 + openai: + specifier: ^4.0.0 + version: 4.42.0 pg: specifier: ^8.11.3 version: 8.11.5 @@ -8737,6 +8740,7 @@ packages: eciesjs@0.3.20: resolution: {integrity: sha512-Rz5AB8v9+xmMdS/R7RzWPe/R8DP5QfyrkA6ce4umJopoB5su2H2aDy/GcgIfwhmCwxnBkqGf/PbGzmKcGtIgGA==} + deprecated: Please upgrade to v0.4+ ed2curve@0.3.0: resolution: {integrity: sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==} @@ -12763,6 +12767,7 @@ packages: react-beautiful-dnd@13.1.1: resolution: {integrity: sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==} + deprecated: 'react-beautiful-dnd is now deprecated. Context and options: https://github.com/atlassian/react-beautiful-dnd/issues/2672' peerDependencies: react: ^16.8.5 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 @@ -15443,7 +15448,7 @@ snapshots: - typescript optional: true - '@alchemy/aa-alchemy@3.19.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(@types/react@18.3.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6))': + '@alchemy/aa-alchemy@3.19.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(@types/react@18.3.3)(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6))': dependencies: '@alchemy/aa-core': 3.19.0(typescript@5.4.5)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)) '@tanstack/react-form': 0.19.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -15452,7 +15457,7 @@ snapshots: '@turnkey/iframe-stamper': 1.2.0 '@turnkey/viem': 0.4.29(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)) '@turnkey/webauthn-stamper': 0.4.3 - '@wagmi/connectors': 4.3.10(@types/react@18.3.3)(@wagmi/core@2.13.4(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6))(zod@3.23.6) + '@wagmi/connectors': 4.3.10(@types/react@18.3.3)(@wagmi/core@2.13.4(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6))(zod@3.23.6) '@wagmi/core': 2.13.4(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)) eventemitter3: 5.0.1 js-cookie: 3.0.5 @@ -15578,8 +15583,8 @@ snapshots: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-bucket-endpoint': 3.577.0 @@ -15636,11 +15641,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0)': + '@aws-sdk/client-sso-oidc@3.577.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15679,7 +15684,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.577.0': @@ -15725,11 +15729,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.577.0': + '@aws-sdk/client-sts@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15768,6 +15772,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.576.0': @@ -15801,7 +15806,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-process': 3.577.0 '@aws-sdk/credential-provider-sso': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) @@ -15858,7 +15863,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0 + '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/types': 3.0.0 @@ -15996,7 +16001,7 @@ snapshots: '@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/shared-ini-file-loader': 3.0.0 @@ -20810,11 +20815,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/sdk-install-modal-web@0.20.2(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@metamask/sdk-install-modal-web@0.20.2(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: i18next: 22.5.1 qr-code-styling: 1.6.0-rc.1 - react-i18next: 13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + react-i18next: 13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -20829,12 +20834,12 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-native: 0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - '@metamask/sdk@0.20.3(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.20.3(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(utf-8-validate@5.0.10)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 15.0.0 '@metamask/sdk-communication-layer': 0.20.2(cross-fetch@4.0.0)(eciesjs@0.3.20)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.7.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@metamask/sdk-install-modal-web': 0.20.2(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@metamask/sdk-install-modal-web': 0.20.2(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@types/dom-screen-wake-lock': 1.0.3 bowser: 2.11.0 cross-fetch: 4.0.0 @@ -24747,10 +24752,10 @@ snapshots: '@vladfrangu/async_event_emitter@2.4.6': {} - '@wagmi/connectors@4.3.10(@types/react@18.3.3)(@wagmi/core@2.13.4(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6))(zod@3.23.6)': + '@wagmi/connectors@4.3.10(@types/react@18.3.3)(@wagmi/core@2.13.4(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6))(zod@3.23.6)': dependencies: '@coinbase/wallet-sdk': 3.9.1 - '@metamask/sdk': 0.20.3(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(utf-8-validate@5.0.10) + '@metamask/sdk': 0.20.3(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.18.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.1(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6) '@wagmi/core': 2.13.4(@types/react@18.3.3)(react@18.3.1)(typescript@5.4.5)(viem@2.21.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.6)) @@ -32836,11 +32841,11 @@ snapshots: dependencies: react: 18.3.1 - react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): + react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.25.3(@babel/core@7.24.5))(@types/react@18.3.3)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: '@babel/runtime': 7.25.7 html-parse-stringify: 3.0.1 - i18next: 23.11.5 + i18next: 22.5.1 react: 18.3.1 optionalDependencies: react-dom: 18.3.1(react@18.3.1) From db148f45a044faaca18dd0b6321680821f6f7a89 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Mon, 21 Oct 2024 23:16:18 +0500 Subject: [PATCH 338/425] Notify user about streaming errors --- .../QuickTokenLaunchForm/useGenerateTokenIdea.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx index 43048af2fff..2e9fdb891d6 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/IdeaLaunchpad/QuickTokenLaunchForm/useGenerateTokenIdea.tsx @@ -1,3 +1,4 @@ +import { notifyError } from 'controllers/app/notifications'; import { useRef, useState } from 'react'; import { ApiEndpoints, SERVER_URL } from 'state/api/config'; import { userStore } from 'state/ui/user'; @@ -89,11 +90,10 @@ export const useGenerateTokenIdea = ({ if (done) break; const chunk = decoder.decode(value || '', { stream: true }); - const chunkJSON: StreamEnd | TokenIdea = JSON.parse(chunk); + const chunkJSON = JSON.parse(chunk); if ((chunkJSON as StreamEnd).status === 'failure') { - // if this happens, usually image generation has - // failed, we ignore that for now as its optional. + throw new Error((chunkJSON as StreamEnd).message); } if (!(chunkJSON as StreamEnd)?.status) { @@ -146,12 +146,12 @@ export const useGenerateTokenIdea = ({ const temp = [...ti]; temp[ideaIndex] = { ...(temp[ideaIndex] || {}), - tokenIdeaGenerationError: error, + tokenIdeaGenerationError: error.message, }; return temp; }); - // handle this case properly - console.error('Error fetching token idea:', error); + notifyError(error.message); + console.error('Error fetching token idea:', error.message); } finally { setTokenIdeas((ti) => { const temp = [...ti]; From d3edf154a0b7ab16d35dbe0c74b514ec49b8e10e Mon Sep 17 00:00:00 2001 From: Salman Date: Tue, 22 Oct 2024 00:06:53 +0500 Subject: [PATCH 339/425] comment-button-should-scroll-to-the-bottom --- .../component_kit/CWContentPage/CWContentPage.tsx | 3 +++ .../pages/discussions/CommentTree/CommentTree.tsx | 9 +++++++-- .../ThreadCard/ThreadOptions/ThreadOptions.tsx | 3 +++ .../views/pages/view_thread/ViewThreadPage.tsx | 13 ++++++++++++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx index d0af21acb68..754faf39f53 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWContentPage/CWContentPage.tsx @@ -81,6 +81,7 @@ type ContentPageProps = { sidebarComponentsSkeletonCount?: number; setThreadBody?: (body: string) => void; editingDisabled?: boolean; + onCommentClick?: () => void; }; export const CWContentPage = ({ @@ -119,6 +120,7 @@ export const CWContentPage = ({ sidebarComponentsSkeletonCount = 2, setThreadBody, editingDisabled, + onCommentClick, }: ContentPageProps) => { const navigate = useNavigate(); const [urlQueryParams] = useSearchParams(); @@ -261,6 +263,7 @@ export const CWContentPage = ({ upvoteBtnVisible={!thread?.readOnly} upvoteDrawerBtnBelow={true} commentBtnVisible={!thread?.readOnly} + onCommentClick={onCommentClick} // @ts-expect-error thread={thread} totalComments={thread?.numberOfComments} diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx index 99e15ea45f2..81342306fbd 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx @@ -6,7 +6,7 @@ import { SessionKeyError } from 'controllers/server/sessions'; import { GetThreadActionTooltipTextResponse } from 'helpers/threads'; import { CommentsFeaturedFilterTypes } from 'models/types'; import type { DeltaStatic } from 'quill'; -import React, { useEffect, useRef, useState } from 'react'; +import React, { MutableRefObject, useEffect, useRef, useState } from 'react'; import app from 'state'; import { useDeleteCommentMutation, @@ -46,6 +46,7 @@ type CommentsTreeAttrs = { canComment: boolean; commentSortType: CommentsFeaturedFilterTypes; disabledActionsTooltipText?: GetThreadActionTooltipTextResponse; + commentsRef?: MutableRefObject; }; export const CommentTree = ({ @@ -63,6 +64,7 @@ export const CommentTree = ({ canComment, commentSortType, disabledActionsTooltipText, + commentsRef, }: CommentsTreeAttrs) => { const urlParams = new URLSearchParams(location.search); const focusCommentsParam = urlParams.get('focusComments') === 'true'; @@ -456,7 +458,10 @@ export const CommentTree = ({ return ( -
      +
      {comment.threadLevel > 0 && (
      {Array(comment.threadLevel) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ThreadOptions.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ThreadOptions.tsx index cd7c1ecfc3c..a36acff4abe 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ThreadOptions.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ThreadOptions.tsx @@ -36,6 +36,7 @@ type OptionsProps = AdminActionsProps & { hideUpvoteDrawerButton?: boolean; setIsUpvoteDrawerOpen?: Dispatch>; editingDisabled?: boolean; + onCommentClick?: () => void; }; export const ThreadOptions = ({ @@ -64,6 +65,7 @@ export const ThreadOptions = ({ hideUpvoteDrawerButton = false, setIsUpvoteDrawerOpen, editingDisabled, + onCommentClick, }: OptionsProps) => { const isCommunityMember = Permissions.isCommunityMember(thread.communityId); const userStore = useUserStore(); @@ -128,6 +130,7 @@ export const ThreadOptions = ({ onClick={(e) => { e.preventDefault(); onCommentBtnClick(); + onCommentClick && onCommentClick(); }} tooltipText={ typeof disabledActionsTooltipText === 'function' diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index 2dc1cd8caba..6a08312c76b 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -11,7 +11,7 @@ import useTopicGating from 'hooks/useTopicGating'; import moment from 'moment'; import { useCommonNavigate } from 'navigation/helpers'; import 'pages/view_thread/index.scss'; -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import { Helmet } from 'react-helmet-async'; import app from 'state'; import { useFetchCommentsQuery } from 'state/api/comments'; @@ -92,6 +92,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { const { handleJoinCommunity, JoinCommunityModals } = useJoinCommunity(); const user = useUserStore(); + const commentsRef = useRef(null); const { isAddedToHomeScreen } = useAppStatus(); @@ -370,6 +371,14 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { : getMetaDescription(thread?.body || ''); const ogImageUrl = app?.chain?.meta?.icon_url || ''; + const ScrollToLastComment = () => { + if (commentsRef?.current) { + commentsRef.current.scrollIntoView({ + behavior: 'smooth', + block: 'center', + }); + } + }; return ( // TODO: the editing experience can be improved (we can remove a stale code and make it smooth) - create a ticket <> @@ -459,6 +468,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { isAuthor || !!hasWebLinks } + onCommentClick={ScrollToLastComment} // @ts-expect-error isSpamThread={!!thread.markedAsSpamAt} title={ @@ -665,6 +675,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => {
      )} From 2306e36666bdf568329168b3f8829af2d882d434 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 22 Oct 2024 00:29:48 +0500 Subject: [PATCH 340/425] Fix typo in create community copy --- .../steps/CommunityInformationStep/CommunityInformationStep.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityInformationStep/CommunityInformationStep.tsx b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityInformationStep/CommunityInformationStep.tsx index c8d2b5b8874..b7f5a99848a 100644 --- a/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityInformationStep/CommunityInformationStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CreateCommunity/steps/CommunityInformationStep/CommunityInformationStep.tsx @@ -120,7 +120,7 @@ const CommunityInformationStep = ({ weightedTopicsEnabled ? ` Choose the chain that your Ethereum project is built on. Chain selection - determines availability of features such as Contestes, Stakes, and Weighted Voting. + determines availability of features such as Contests, Stakes, and Weighted Voting. ` : ` Choose the chain that your Ethereum project is built on. If you’re From afb0235bfbc919bd5d231def71346e44076cdaad Mon Sep 17 00:00:00 2001 From: ianrowan Date: Mon, 21 Oct 2024 16:04:32 -0500 Subject: [PATCH 341/425] add erc20 helper --- .../helpers/ContractHelpers/Abi/ERC20Abi.ts | 7 +++++++ .../helpers/ContractHelpers/ERC20Helper.ts | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 packages/commonwealth/client/scripts/helpers/ContractHelpers/ERC20Helper.ts diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/ERC20Abi.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/ERC20Abi.ts index 48ad636212f..2e32fc0dc69 100644 --- a/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/ERC20Abi.ts +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/Abi/ERC20Abi.ts @@ -9,4 +9,11 @@ export const Erc20Abi = [ stateMutability: 'nonpayable', type: 'function', }, + { + inputs: [{ internalType: 'address', name: 'account', type: 'address' }], + stateMutability: 'view', + type: 'function', + name: 'balanceOf', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + }, ]; diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/ERC20Helper.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/ERC20Helper.ts new file mode 100644 index 00000000000..d4517b79212 --- /dev/null +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/ERC20Helper.ts @@ -0,0 +1,16 @@ +import { Erc20Abi } from './Abi/ERC20Abi'; +import ContractBase from './ContractBase'; +class ERC20Helper extends ContractBase { + constructor(contractAddress: string, rpc: string) { + super(contractAddress, Erc20Abi, rpc); + } + async getBalance(userAddress: string): Promise { + if (!this.initialized) { + await this.initialize(); + } + const balance = this.contract.methods.balanceOf(userAddress); + return Number(balance); + } +} + +export default ERC20Helper; From 8277dba1f0d60bc1f9036e4ab6c95befaacee66e Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Tue, 22 Oct 2024 12:40:54 +0300 Subject: [PATCH 342/425] switch to model level enforcement of user avatar --- libs/model/src/models/user.ts | 17 ++++++++++++++++- .../model/src/utils}/defaultAvatar.ts | 0 libs/model/src/utils/index.ts | 1 + packages/commonwealth/server/passport/magic.ts | 6 +----- .../commonwealth/server/routes/verifyAddress.ts | 6 +----- .../server/util/verifySessionSignature.ts | 6 +----- 6 files changed, 20 insertions(+), 16 deletions(-) rename {packages/commonwealth/server/util => libs/model/src/utils}/defaultAvatar.ts (100%) diff --git a/libs/model/src/models/user.ts b/libs/model/src/models/user.ts index 39b8018731c..9af927d2ae6 100644 --- a/libs/model/src/models/user.ts +++ b/libs/model/src/models/user.ts @@ -1,4 +1,5 @@ -import { User } from '@hicommonwealth/schemas'; +import { getRandomAvatar } from '@hicommonwealth/model'; +import { User, UserProfile } from '@hicommonwealth/schemas'; import Sequelize from 'sequelize'; import { z } from 'zod'; import type { AddressAttributes, AddressInstance } from './address'; @@ -95,5 +96,19 @@ export default (sequelize: Sequelize.Sequelize): UserModelStatic => scopes: { withPrivateData: {}, }, + validate: { + definedAvatarUrl() { + if (!(this.profile as z.infer)?.avatar_url) { + throw new Error('profile.avatar_url must be defined'); + } + }, + }, + hooks: { + beforeValidate(instance: UserInstance) { + if (!instance.profile.avatar_url) { + instance.profile.avatar_url = getRandomAvatar(); + } + }, + }, }, ); diff --git a/packages/commonwealth/server/util/defaultAvatar.ts b/libs/model/src/utils/defaultAvatar.ts similarity index 100% rename from packages/commonwealth/server/util/defaultAvatar.ts rename to libs/model/src/utils/defaultAvatar.ts diff --git a/libs/model/src/utils/index.ts b/libs/model/src/utils/index.ts index 669692896c9..6568c8cd1ad 100644 --- a/libs/model/src/utils/index.ts +++ b/libs/model/src/utils/index.ts @@ -1,4 +1,5 @@ export * from './decodeContent'; +export * from './defaultAvatar'; export * from './denormalizedCountUtils'; export * from './getDelta'; export * from './makeGetBalancesOptions'; diff --git a/packages/commonwealth/server/passport/magic.ts b/packages/commonwealth/server/passport/magic.ts index 2e44bdb32d4..da76eaeb65c 100644 --- a/packages/commonwealth/server/passport/magic.ts +++ b/packages/commonwealth/server/passport/magic.ts @@ -22,7 +22,6 @@ import jsonwebtoken from 'jsonwebtoken'; import passport from 'passport'; import { DoneFunc, Strategy as MagicStrategy, MagicUser } from 'passport-magic'; import { Op, Transaction, WhereOptions } from 'sequelize'; -import { getRandomAvatar } from 'server/util/defaultAvatar'; import { config } from '../config'; import { validateCommunity } from '../middleware/validateCommunity'; import { TypedRequestBody } from '../types'; @@ -104,7 +103,6 @@ async function createNewMagicUser({ generatedAddresses, profileMetadata, }: MagicLoginContext): Promise { - const default_avatar_url = getRandomAvatar(); // completely new user: create user, profile, addresses return sequelize.transaction(async (transaction) => { const newUser = await models.User.create( @@ -118,9 +116,7 @@ async function createNewMagicUser({ // just because an email comes from magic doesn't mean it's legitimately owned by the signing-in // user, unless it's via the email flow (e.g. you can spoof an email on Discord) emailVerified: !!magicUserMetadata.email, - profile: { - avatar_url: default_avatar_url, - }, + profile: {}, }, { transaction }, ); diff --git a/packages/commonwealth/server/routes/verifyAddress.ts b/packages/commonwealth/server/routes/verifyAddress.ts index 3638c2dc384..dd532009839 100644 --- a/packages/commonwealth/server/routes/verifyAddress.ts +++ b/packages/commonwealth/server/routes/verifyAddress.ts @@ -12,7 +12,6 @@ import { } from '@hicommonwealth/shared'; import sgMail from '@sendgrid/mail'; import type { NextFunction, Request, Response } from 'express'; -import { getRandomAvatar } from 'server/util/defaultAvatar'; import { MixpanelLoginEvent } from '../../shared/analytics/types'; import { ServerAnalyticsController } from '../controllers/server_analytics_controller'; import assertAddressOwnership from '../util/assertAddressOwnership'; @@ -85,13 +84,10 @@ const processAddress = async ( addressInstance.verification_token_expires = null; addressInstance.verified = new Date(); if (!addressInstance.user_id) { - const default_avatar_url = getRandomAvatar(); // address is not yet verified => create a new user const newUser = await models.User.create({ email: null, - profile: { - avatar_url: default_avatar_url, - }, + profile: {}, }); addressInstance.user_id = newUser.id; } diff --git a/packages/commonwealth/server/util/verifySessionSignature.ts b/packages/commonwealth/server/util/verifySessionSignature.ts index e129ad3e635..dcc44cb2604 100644 --- a/packages/commonwealth/server/util/verifySessionSignature.ts +++ b/packages/commonwealth/server/util/verifySessionSignature.ts @@ -13,7 +13,6 @@ import { type AddressInstance, type DB, } from '@hicommonwealth/model'; -import { getRandomAvatar } from './defaultAvatar'; /** * Verify the session signature is valid for the address model, @@ -73,14 +72,11 @@ const verifySessionSignature = async ( if (existingAddress) { addressModel.user_id = existingAddress.user_id; } else { - const default_avatar_url = getRandomAvatar(); const user = await models.sequelize.transaction(async (transaction) => { const userEntity = await models.User.create( { email: null, - profile: { - avatar_url: default_avatar_url, - }, + profile: {}, }, { transaction }, ); From f31e0e5681f681ae50988dd894298cbb6a8cd92e Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Tue, 22 Oct 2024 13:09:06 +0300 Subject: [PATCH 343/425] migration --- .../20241022094121-default-user-avatars.js | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 packages/commonwealth/server/migrations/20241022094121-default-user-avatars.js diff --git a/packages/commonwealth/server/migrations/20241022094121-default-user-avatars.js b/packages/commonwealth/server/migrations/20241022094121-default-user-avatars.js new file mode 100644 index 00000000000..5b732cbcf8c --- /dev/null +++ b/packages/commonwealth/server/migrations/20241022094121-default-user-avatars.js @@ -0,0 +1,46 @@ +'use strict'; + +const defaultAvatars = [ + 'https://s3.us-east-1.amazonaws.com/local.assets/fb3289b0-38cb-4883-908b-7af0c1626ece.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/794bb7a3-17d7-407a-b52e-2987501221b5.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/181e25ad-ce08-427d-8d3a-d290af3be44b.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/9f40b221-e2c7-4052-a7de-e580222baaa9.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/ef919936-8554-42e5-8590-118e8cb68101.png', + 'https://s3.us-east-1.amazonaws.com/local.assets/0847e7f5-4d96-4406-8f30-c3082fa2f27c.png', +]; + +function getRandomAvatar() { + const randomIndex = Math.floor(Math.random() * defaultAvatars.length); + return defaultAvatars[randomIndex]; +} + +/** @type {import('sequelize-cli').Migration} */ +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.sequelize.query( + ` + UPDATE "Users" + SET "profile" = jsonb_set("profile", '{avatar_url}', '"${getRandomAvatar()}"') + WHERE ("profile" ->> 'avatar_url') IS NULL + OR "profile" ->> 'avatar_url' = '' + `, + { transaction }, + ); + + await queryInterface.sequelize.query( + ` + ALTER TABLE "Users" + ADD CONSTRAINT "users_avatar_url_check" + CHECK ( + ("profile" ->> 'avatar_url') IS NOT NULL AND + ("profile" ->> 'avatar_url') <> '' + ); + `, + { transaction }, + ); + }); + }, + + async down(queryInterface, Sequelize) {}, +}; From 015cc0e672b7fed0fabb0e9f30e9189baa9408a2 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Tue, 22 Oct 2024 13:12:44 +0300 Subject: [PATCH 344/425] fix circular import --- libs/model/src/models/user.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/model/src/models/user.ts b/libs/model/src/models/user.ts index 9af927d2ae6..b12c8a91f99 100644 --- a/libs/model/src/models/user.ts +++ b/libs/model/src/models/user.ts @@ -1,7 +1,7 @@ -import { getRandomAvatar } from '@hicommonwealth/model'; import { User, UserProfile } from '@hicommonwealth/schemas'; import Sequelize from 'sequelize'; import { z } from 'zod'; +import { getRandomAvatar } from '../utils/defaultAvatar'; import type { AddressAttributes, AddressInstance } from './address'; import type { CommentSubscriptionAttributes } from './comment_subscriptions'; import type { CommunityAttributes, CommunityInstance } from './community'; From 2c32e686eac0a5bcb92ba733b9733513916ba78d Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Tue, 22 Oct 2024 14:52:13 +0300 Subject: [PATCH 345/425] remove packages/scripts --- packages/commonwealth/package.json | 1 + .../scripts/generate-stakeholder-groups.ts} | 0 .../scripts/sitemap-runner.ts} | 0 packages/commonwealth/tsconfig.build.json | 3 +- packages/commonwealth/tsconfig.json | 3 +- packages/scripts/package.json | 29 ------------ packages/scripts/test/index.spec.ts | 8 ---- packages/scripts/tsconfig.build.json | 14 ------ packages/scripts/tsconfig.json | 13 ----- pnpm-lock.yaml | 47 +++++-------------- pnpm-workspace.yaml | 1 - tsconfig.json | 1 - 12 files changed, 18 insertions(+), 102 deletions(-) rename packages/{scripts/src/generate-stakeholder-groups/index.ts => commonwealth/scripts/generate-stakeholder-groups.ts} (100%) rename packages/{scripts/src/sitemaps/runner.ts => commonwealth/scripts/sitemap-runner.ts} (100%) delete mode 100644 packages/scripts/package.json delete mode 100644 packages/scripts/test/index.spec.ts delete mode 100644 packages/scripts/tsconfig.build.json delete mode 100644 packages/scripts/tsconfig.json diff --git a/packages/commonwealth/package.json b/packages/commonwealth/package.json index 52d44c032c7..4a59724baab 100644 --- a/packages/commonwealth/package.json +++ b/packages/commonwealth/package.json @@ -111,6 +111,7 @@ "@hicommonwealth/model": "workspace:*", "@hicommonwealth/schemas": "workspace:*", "@hicommonwealth/shared": "workspace:*", + "@hicommonwealth/sitemaps": "workspace:*", "@hookform/resolvers": "^3.3.1", "@ipld/dag-json": "^10.2.0", "@keplr-wallet/types": "^0.12.23", diff --git a/packages/scripts/src/generate-stakeholder-groups/index.ts b/packages/commonwealth/scripts/generate-stakeholder-groups.ts similarity index 100% rename from packages/scripts/src/generate-stakeholder-groups/index.ts rename to packages/commonwealth/scripts/generate-stakeholder-groups.ts diff --git a/packages/scripts/src/sitemaps/runner.ts b/packages/commonwealth/scripts/sitemap-runner.ts similarity index 100% rename from packages/scripts/src/sitemaps/runner.ts rename to packages/commonwealth/scripts/sitemap-runner.ts diff --git a/packages/commonwealth/tsconfig.build.json b/packages/commonwealth/tsconfig.build.json index b17e29434d5..3fb1164b543 100644 --- a/packages/commonwealth/tsconfig.build.json +++ b/packages/commonwealth/tsconfig.build.json @@ -8,6 +8,7 @@ { "path": "../../libs/model/tsconfig.build.json" }, { "path": "../../libs/schemas/tsconfig.build.json" }, { "path": "../../libs/shared/tsconfig.build.json" }, - { "path": "../../libs/evm-testing/tsconfig.build.json" } + { "path": "../../libs/evm-testing/tsconfig.build.json" }, + { "path": "../../libs/sitemaps/tsconfig.build.json" } ] } diff --git a/packages/commonwealth/tsconfig.json b/packages/commonwealth/tsconfig.json index 3e88b28ce2c..1ba4cc23005 100644 --- a/packages/commonwealth/tsconfig.json +++ b/packages/commonwealth/tsconfig.json @@ -30,6 +30,7 @@ { "path": "../../libs/model/tsconfig.build.json" }, { "path": "../../libs/schemas/tsconfig.build.json" }, { "path": "../../libs/shared/tsconfig.build.json" }, - { "path": "../../libs/evm-testing/tsconfig.build.json" } + { "path": "../../libs/evm-testing/tsconfig.build.json" }, + { "path": "../../libs/sitemaps/tsconfig.build.json" } ] } diff --git a/packages/scripts/package.json b/packages/scripts/package.json deleted file mode 100644 index 9ddd3108641..00000000000 --- a/packages/scripts/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "scripts", - "private": "true", - "version": "0.1.0", - "type": "module", - "files": [ - "build" - ], - "main": "build/index.js", - "scripts": { - "build": "tsc -b ./tsconfig.build.json", - "clean": "rm -rf build && rm -rf coverage", - "check-types": "tsc --noEmit", - "test": "echo No tests for packages/scripts", - "test-dev": "NODE_ENV=test vitest --config ../../vite.config.ts test", - "generate-stakeholder-groups": "tsx src/generate-stakeholder-groups", - "lint": "NODE_OPTIONS=\"--max-old-space-size=4096\" eslint -c ../../.eslintrc.cjs './src/**/*.{ts,tsx}'", - "lint-diff": "NODE_OPTIONS=\"--max-old-space-size=4096\" eslint -c ../../.eslintrc-diff.cjs './src/**/*.{ts,tsx}'" - }, - "dependencies": { - "@hicommonwealth/core": "workspace:*", - "@hicommonwealth/model": "workspace:*", - "@hicommonwealth/sitemaps": "workspace:*", - "@hicommonwealth/adapters": "workspace:*", - "moment": "^2.23.0", - "sequelize": "^6.32.1", - "tsx": "^4.7.2" - } -} diff --git a/packages/scripts/test/index.spec.ts b/packages/scripts/test/index.spec.ts deleted file mode 100644 index 6f976544276..00000000000 --- a/packages/scripts/test/index.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { expect } from 'chai'; -import { describe, test } from 'vitest'; - -describe('scripts test', () => { - test('should test', () => { - expect(true).to.be.true; - }); -}); diff --git a/packages/scripts/tsconfig.build.json b/packages/scripts/tsconfig.build.json deleted file mode 100644 index 70ffc127588..00000000000 --- a/packages/scripts/tsconfig.build.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "build" - }, - "include": ["src"], - "references": [ - { "path": "../../libs/core/tsconfig.build.json" }, - { "path": "../../libs/model/tsconfig.build.json" }, - { "path": "../../libs/sitemaps/tsconfig.build.json" }, - { "path": "../../libs/adapters/tsconfig.build.json" } - ] -} diff --git a/packages/scripts/tsconfig.json b/packages/scripts/tsconfig.json deleted file mode 100644 index 74209a6dcc6..00000000000 --- a/packages/scripts/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "strict": true - }, - "include": ["src"], - "references": [ - { "path": "../../libs/core/tsconfig.build.json" }, - { "path": "../../libs/model/tsconfig.build.json" }, - { "path": "../../libs/sitemaps/tsconfig.build.json" }, - { "path": "../../libs/adapters/tsconfig.build.json" } - ] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9180e1e409..498064d77c0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -895,6 +895,9 @@ importers: '@hicommonwealth/shared': specifier: workspace:* version: link:../../libs/shared + '@hicommonwealth/sitemaps': + specifier: workspace:* + version: link:../../libs/sitemaps '@hookform/resolvers': specifier: ^3.3.1 version: 3.3.4(react-hook-form@7.51.4(react@18.3.1)) @@ -1417,30 +1420,6 @@ importers: specifier: ^0.52.0 version: 0.52.0 - packages/scripts: - dependencies: - '@hicommonwealth/adapters': - specifier: workspace:* - version: link:../../libs/adapters - '@hicommonwealth/core': - specifier: workspace:* - version: link:../../libs/core - '@hicommonwealth/model': - specifier: workspace:* - version: link:../../libs/model - '@hicommonwealth/sitemaps': - specifier: workspace:* - version: link:../../libs/sitemaps - moment: - specifier: ^2.23.0 - version: 2.30.1 - sequelize: - specifier: ^6.32.1 - version: 6.37.3(pg@8.11.5) - tsx: - specifier: ^4.7.2 - version: 4.9.3 - packages: '@acuminous/bitsyntax@0.1.2': @@ -15581,8 +15560,8 @@ snapshots: '@aws-crypto/sha1-browser': 3.0.0 '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0 - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-bucket-endpoint': 3.577.0 @@ -15639,11 +15618,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.577.0': + '@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15682,6 +15661,7 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: + - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.577.0': @@ -15727,11 +15707,11 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': + '@aws-sdk/client-sts@3.577.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) '@aws-sdk/core': 3.576.0 '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -15770,7 +15750,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt '@aws-sdk/core@3.576.0': @@ -15804,7 +15783,7 @@ snapshots: '@aws-sdk/credential-provider-ini@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/credential-provider-env': 3.577.0 '@aws-sdk/credential-provider-process': 3.577.0 '@aws-sdk/credential-provider-sso': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) @@ -15861,7 +15840,7 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.577.0)': dependencies: - '@aws-sdk/client-sts': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0) + '@aws-sdk/client-sts': 3.577.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/types': 3.0.0 @@ -15999,7 +15978,7 @@ snapshots: '@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.577.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.577.0 + '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0) '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.0.0 '@smithy/shared-ini-file-loader': 3.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0b1064aa1c0..590251206b9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,4 @@ packages: - 'libs/**' - 'packages/commonwealth' - - 'packages/scripts' - 'packages/load-testing' diff --git a/tsconfig.json b/tsconfig.json index 980385b2e85..94a42fd711c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,6 @@ { "path": "libs/schemas/tsconfig.build.json" }, { "path": "libs/shared/tsconfig.build.json" }, { "path": "packages/commonwealth/tsconfig.build.json" }, - { "path": "packages/scripts/tsconfig.json" }, { "path": "packages/load-testing/tsconfig.json" } ] } From a49afecfe50ea19d05696de0cb663e725c6a4457 Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 22 Oct 2024 13:58:10 +0200 Subject: [PATCH 346/425] add token_address to query --- libs/model/src/community/GetTopics.query.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/model/src/community/GetTopics.query.ts b/libs/model/src/community/GetTopics.query.ts index 324e2302c16..9e2d7ef203d 100644 --- a/libs/model/src/community/GetTopics.query.ts +++ b/libs/model/src/community/GetTopics.query.ts @@ -73,6 +73,7 @@ WITH topic_data AS ( weighted_voting, token_symbol, vote_weight_multiplier, + token_address, created_at::text AS created_at, updated_at::text AS updated_at, deleted_at::text AS deleted_at, From f8509b81fa95cd44821aead4c24368466cb60ca3 Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 22 Oct 2024 13:59:05 +0200 Subject: [PATCH 347/425] change implementation of getBalance --- .../client/scripts/helpers/ContractHelpers/ERC20Helper.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/helpers/ContractHelpers/ERC20Helper.ts b/packages/commonwealth/client/scripts/helpers/ContractHelpers/ERC20Helper.ts index d4517b79212..04aaa4f250a 100644 --- a/packages/commonwealth/client/scripts/helpers/ContractHelpers/ERC20Helper.ts +++ b/packages/commonwealth/client/scripts/helpers/ContractHelpers/ERC20Helper.ts @@ -1,15 +1,17 @@ +import Web3 from 'web3'; import { Erc20Abi } from './Abi/ERC20Abi'; import ContractBase from './ContractBase'; class ERC20Helper extends ContractBase { constructor(contractAddress: string, rpc: string) { super(contractAddress, Erc20Abi, rpc); } - async getBalance(userAddress: string): Promise { + async getBalance(userAddress: string): Promise { if (!this.initialized) { await this.initialize(); } - const balance = this.contract.methods.balanceOf(userAddress); - return Number(balance); + const balance = await this.contract.methods.balanceOf(userAddress).call(); + + return Web3.utils.fromWei(balance, 'ether'); } } From 08b9658e036f9b0b8672f5b57885c9e16bc78077 Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 22 Oct 2024 14:11:55 +0200 Subject: [PATCH 348/425] refactor --- .../client/scripts/state/api/token/index.ts | 4 ---- .../scripts/state/api/{token => tokens}/createToken.ts | 0 .../scripts/state/api/{token => tokens}/fetchTokens.ts | 0 .../client/scripts/state/api/tokens/index.ts | 10 +++++++++- .../QuickTokenLaunchForm/QuickTokenLaunchForm.tsx | 2 +- .../Contests/FundContestDrawer/useFundContestForm.ts | 3 +-- .../SignTokenTransactions/SignTokenTransactions.tsx | 2 +- .../TokenInformationForm/TokenInformationForm.tsx | 2 +- 8 files changed, 13 insertions(+), 10 deletions(-) delete mode 100644 packages/commonwealth/client/scripts/state/api/token/index.ts rename packages/commonwealth/client/scripts/state/api/{token => tokens}/createToken.ts (100%) rename packages/commonwealth/client/scripts/state/api/{token => tokens}/fetchTokens.ts (100%) diff --git a/packages/commonwealth/client/scripts/state/api/token/index.ts b/packages/commonwealth/client/scripts/state/api/token/index.ts deleted file mode 100644 index bcd683a4e8a..00000000000 --- a/packages/commonwealth/client/scripts/state/api/token/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import useCreateTokenMutation from './createToken'; -import useFetchTokensQuery from './fetchTokens'; - -export { useCreateTokenMutation, useFetchTokensQuery }; diff --git a/packages/commonwealth/client/scripts/state/api/token/createToken.ts b/packages/commonwealth/client/scripts/state/api/tokens/createToken.ts similarity index 100% rename from packages/commonwealth/client/scripts/state/api/token/createToken.ts rename to packages/commonwealth/client/scripts/state/api/tokens/createToken.ts diff --git a/packages/commonwealth/client/scripts/state/api/token/fetchTokens.ts b/packages/commonwealth/client/scripts/state/api/tokens/fetchTokens.ts similarity index 100% rename from packages/commonwealth/client/scripts/state/api/token/fetchTokens.ts rename to packages/commonwealth/client/scripts/state/api/tokens/fetchTokens.ts diff --git a/packages/commonwealth/client/scripts/state/api/tokens/index.ts b/packages/commonwealth/client/scripts/state/api/tokens/index.ts index b7665891a87..fc169e154cf 100644 --- a/packages/commonwealth/client/scripts/state/api/tokens/index.ts +++ b/packages/commonwealth/client/scripts/state/api/tokens/index.ts @@ -1,3 +1,11 @@ +import useCreateTokenMutation from './createToken'; +import useFetchTokensQuery from './fetchTokens'; +import useTokenBalanceQuery from './getTokenBalance'; import useTokenMetadataQuery from './getTokenMetadata'; -export { useTokenMetadataQuery }; +export { + useCreateTokenMutation, + useFetchTokensQuery, + useTokenBalanceQuery, + useTokenMetadataQuery, +}; diff --git a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx index 22ad5a2196c..9043d61ba97 100644 --- a/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/Communities/TokenLaunchDrawer/QuickTokenLaunchForm/QuickTokenLaunchForm.tsx @@ -10,7 +10,7 @@ import useCreateCommunityMutation, { } from 'state/api/communities/createCommunity'; import { generateImage } from 'state/api/general/generateImage'; import { useLaunchTokenMutation } from 'state/api/launchPad'; -import { useCreateTokenMutation } from 'state/api/token'; +import { useCreateTokenMutation } from 'state/api/tokens'; import useUserStore from 'state/ui/user'; import PageCounter from 'views/components/PageCounter'; import { CWText } from 'views/components/component_kit/cw_text'; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts index 4ccce6fe1b4..744d540dae7 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/FundContestDrawer/useFundContestForm.ts @@ -5,8 +5,7 @@ import { useGetUserEthBalanceQuery, } from 'state/api/communityStake'; import { useGetContestBalanceQuery } from 'state/api/contests'; -import { useTokenMetadataQuery } from 'state/api/tokens'; -import useTokenBalanceQuery from 'state/api/tokens/getTokenBalance'; +import { useTokenBalanceQuery, useTokenMetadataQuery } from 'state/api/tokens'; import { convertTokenAmountToUsd } from 'views/modals/ManageCommunityStakeModal/utils'; import { calculateNewContractBalance, getAmountError } from './utils'; diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/SignatureStep/SignTokenTransactions/SignTokenTransactions.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/SignatureStep/SignTokenTransactions/SignTokenTransactions.tsx index 97839b4d42c..29a24eb90ea 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/SignatureStep/SignTokenTransactions/SignTokenTransactions.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/SignatureStep/SignTokenTransactions/SignTokenTransactions.tsx @@ -2,7 +2,7 @@ import { ChainBase, commonProtocol } from '@hicommonwealth/shared'; import React from 'react'; import { useUpdateCommunityMutation } from 'state/api/communities'; import { useLaunchTokenMutation } from 'state/api/launchPad'; -import { useCreateTokenMutation } from 'state/api/token'; +import { useCreateTokenMutation } from 'state/api/tokens'; import useUserStore from 'state/ui/user'; import { CWDivider } from 'views/components/component_kit/cw_divider'; import { CWText } from 'views/components/component_kit/cw_text'; diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx index 839f642b7f0..5da3e160038 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx @@ -9,7 +9,7 @@ import { MixpanelCommunityCreationEvent, MixpanelLoginPayload, } from 'shared/analytics/types'; -import { useFetchTokensQuery } from 'state/api/token'; +import { useFetchTokensQuery } from 'state/api/tokens'; import useUserStore from 'state/ui/user'; import { useDebounce } from 'usehooks-ts'; import { From 054d26095a126e7511d2a695e82f67bd308b6552 Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 22 Oct 2024 15:39:58 +0200 Subject: [PATCH 349/425] display vote weight --- .../state/api/tokens/getERC20Balance.ts | 36 +++++++++++++++++++ .../client/scripts/state/api/tokens/index.ts | 2 ++ .../components/TokenBanner/TokenBanner.scss | 8 +++-- .../components/TokenBanner/TokenBanner.tsx | 4 +-- .../pages/discussions/DiscussionsPage.tsx | 13 +++++++ 5 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 packages/commonwealth/client/scripts/state/api/tokens/getERC20Balance.ts diff --git a/packages/commonwealth/client/scripts/state/api/tokens/getERC20Balance.ts b/packages/commonwealth/client/scripts/state/api/tokens/getERC20Balance.ts new file mode 100644 index 00000000000..195e4bb7661 --- /dev/null +++ b/packages/commonwealth/client/scripts/state/api/tokens/getERC20Balance.ts @@ -0,0 +1,36 @@ +import { useQuery } from '@tanstack/react-query'; +import ERC20Helper from 'helpers/ContractHelpers/ERC20Helper'; + +const GET_ERC20_BALANCE_STALE_TIME = 60 * 1_000; // 1 min + +interface UseGetERC20BalanceQueryProps { + userAddress: string; + tokenAddress: string; + nodeRpc: string; +} + +const getERC20Balance = async ({ + userAddress, + tokenAddress, + nodeRpc, +}: UseGetERC20BalanceQueryProps) => { + const helper = new ERC20Helper(tokenAddress, nodeRpc); + + return helper.getBalance(userAddress); +}; + +const useGetERC20BalanceQuery = ({ + userAddress, + tokenAddress, + nodeRpc, +}: UseGetERC20BalanceQueryProps) => { + return useQuery({ + queryKey: [userAddress, tokenAddress, nodeRpc], + queryFn: () => getERC20Balance({ userAddress, tokenAddress, nodeRpc }), + enabled: !!tokenAddress && userAddress && !!nodeRpc, + staleTime: GET_ERC20_BALANCE_STALE_TIME, + retry: false, + }); +}; + +export default useGetERC20BalanceQuery; diff --git a/packages/commonwealth/client/scripts/state/api/tokens/index.ts b/packages/commonwealth/client/scripts/state/api/tokens/index.ts index fc169e154cf..2a7ab465767 100644 --- a/packages/commonwealth/client/scripts/state/api/tokens/index.ts +++ b/packages/commonwealth/client/scripts/state/api/tokens/index.ts @@ -1,11 +1,13 @@ import useCreateTokenMutation from './createToken'; import useFetchTokensQuery from './fetchTokens'; +import useGetERC20BalanceQuery from './getERC20Balance'; import useTokenBalanceQuery from './getTokenBalance'; import useTokenMetadataQuery from './getTokenMetadata'; export { useCreateTokenMutation, useFetchTokensQuery, + useGetERC20BalanceQuery, useTokenBalanceQuery, useTokenMetadataQuery, }; diff --git a/packages/commonwealth/client/scripts/views/components/TokenBanner/TokenBanner.scss b/packages/commonwealth/client/scripts/views/components/TokenBanner/TokenBanner.scss index 0f3f64481b2..08744f872fc 100644 --- a/packages/commonwealth/client/scripts/views/components/TokenBanner/TokenBanner.scss +++ b/packages/commonwealth/client/scripts/views/components/TokenBanner/TokenBanner.scss @@ -52,8 +52,10 @@ } } } - - .vote-weight-label { - color: $neutral-500; + .vote-weight { + margin-left: 8px; + .vote-weight-label { + color: $neutral-500; + } } } diff --git a/packages/commonwealth/client/scripts/views/components/TokenBanner/TokenBanner.tsx b/packages/commonwealth/client/scripts/views/components/TokenBanner/TokenBanner.tsx index 2da2543e20f..e0558252c45 100644 --- a/packages/commonwealth/client/scripts/views/components/TokenBanner/TokenBanner.tsx +++ b/packages/commonwealth/client/scripts/views/components/TokenBanner/TokenBanner.tsx @@ -21,7 +21,7 @@ interface TokenBannerProps { change?: number; isLoading?: boolean; popover?: Pick; - voteWeight?: number; + voteWeight?: string; } const TokenBanner = ({ @@ -76,7 +76,7 @@ const TokenBanner = ({ )} {voteWeight && ( -
      +
      Your vote weight diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index e9d10cb3871..22894df489f 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -19,6 +19,7 @@ import { ThreadCard } from './ThreadCard'; import { sortByFeaturedFilter, sortPinned } from './helpers'; import { slugify, splitAndDecodeURL } from '@hicommonwealth/shared'; +import { useGetERC20BalanceQuery } from 'client/scripts/state/api/tokens'; import { formatAddressShort } from 'helpers'; import { getThreadActionTooltipText } from 'helpers/threads'; import useBrowserWindow from 'hooks/useBrowserWindow'; @@ -99,6 +100,12 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { const { contestsData } = useCommunityContests(); + const { data: erc20Balance } = useGetERC20BalanceQuery({ + tokenAddress: topicObj?.token_address || '', + userAddress: user.activeAccount?.address || '', + nodeRpc: app?.chain.meta?.ChainNode?.url || '', + }); + const { dateCursor } = useDateCursor({ dateRange: searchParams.get('dateRange') as ThreadTimelineFilterTypes, }); @@ -185,6 +192,11 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { return isContestInTopic && isActive; }); + const voteWeight = + isTopicWeighted && erc20Balance + ? String((topicObj?.vote_weight_multiplier * erc20Balance).toFixed(0)) + : ''; + return ( // @ts-expect-error @@ -323,6 +335,7 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { name={tokenMetadata?.name} ticker={topicObj?.token_symbol} avatarUrl={tokenMetadata?.logo} + voteWeight={voteWeight} popover={{ title: tokenMetadata?.name, body: formatAddressShort(topicObj.token_address!, 6, 6), From 2bb1047b1c9217960b0e5bea9701db7de9dd5187 Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Tue, 22 Oct 2024 17:09:09 +0300 Subject: [PATCH 350/425] sanitize deleted comments from external API --- libs/model/src/comment/GetComments.query.ts | 16 ++++++++++++++-- libs/model/src/utils/index.ts | 1 + .../model/src/utils}/sanitizeDeletedComment.ts | 2 +- libs/schemas/src/queries/comment.schemas.ts | 4 +++- .../commonwealth/server/routes/viewComments.ts | 2 +- 5 files changed, 20 insertions(+), 5 deletions(-) rename {packages/commonwealth/server/util => libs/model/src/utils}/sanitizeDeletedComment.ts (90%) diff --git a/libs/model/src/comment/GetComments.query.ts b/libs/model/src/comment/GetComments.query.ts index 6218764cea7..059d905601f 100644 --- a/libs/model/src/comment/GetComments.query.ts +++ b/libs/model/src/comment/GetComments.query.ts @@ -1,7 +1,7 @@ import { type Query } from '@hicommonwealth/core'; import * as schemas from '@hicommonwealth/schemas'; import { models } from '../database'; -import { removeUndefined } from '../utils/index'; +import { removeUndefined, sanitizeDeletedComment } from '../utils/index'; import { formatSequelizePagination } from '../utils/paginationUtils'; export function GetComments(): Query { @@ -58,7 +58,19 @@ export function GetComments(): Query { paranoid: false, }); - return schemas.buildPaginatedResponse(comments, count as number, payload); + const sanitizedComments = comments.map((c) => { + const data = c.toJSON(); + return { + ...sanitizeDeletedComment(data), + last_edited: data.updated_at, + }; + }); + + return schemas.buildPaginatedResponse( + sanitizedComments, + count as number, + payload, + ); }, }; } diff --git a/libs/model/src/utils/index.ts b/libs/model/src/utils/index.ts index 669692896c9..351e3070d77 100644 --- a/libs/model/src/utils/index.ts +++ b/libs/model/src/utils/index.ts @@ -3,6 +3,7 @@ export * from './denormalizedCountUtils'; export * from './getDelta'; export * from './makeGetBalancesOptions'; export * from './parseUserMentions'; +export * from './sanitizeDeletedComment'; export * from './sanitizeQuillText'; export * from './updateTags'; export * from './utils'; diff --git a/packages/commonwealth/server/util/sanitizeDeletedComment.ts b/libs/model/src/utils/sanitizeDeletedComment.ts similarity index 90% rename from packages/commonwealth/server/util/sanitizeDeletedComment.ts rename to libs/model/src/utils/sanitizeDeletedComment.ts index 04f0bb5fdb9..c7b02ae658b 100644 --- a/packages/commonwealth/server/util/sanitizeDeletedComment.ts +++ b/libs/model/src/utils/sanitizeDeletedComment.ts @@ -1,4 +1,4 @@ -import { CommentAttributes } from '@hicommonwealth/model'; +import { CommentAttributes } from '../models/comment'; export function sanitizeDeletedComment( comment: CommentAttributes, diff --git a/libs/schemas/src/queries/comment.schemas.ts b/libs/schemas/src/queries/comment.schemas.ts index cbd8b9aa0a0..f46ec773b40 100644 --- a/libs/schemas/src/queries/comment.schemas.ts +++ b/libs/schemas/src/queries/comment.schemas.ts @@ -25,6 +25,8 @@ export const GetComments = { include_reactions: zBoolean.default(false), }), output: PaginatedResultSchema.extend({ - results: Comment.array(), + results: Comment.extend({ + last_edited: z.coerce.date().optional(), + }).array(), }), }; diff --git a/packages/commonwealth/server/routes/viewComments.ts b/packages/commonwealth/server/routes/viewComments.ts index 3424093cc61..562171ca10f 100644 --- a/packages/commonwealth/server/routes/viewComments.ts +++ b/packages/commonwealth/server/routes/viewComments.ts @@ -1,7 +1,7 @@ import { AppError } from '@hicommonwealth/core'; import type { DB } from '@hicommonwealth/model'; +import { sanitizeDeletedComment } from '@hicommonwealth/model'; import type { NextFunction, Request, Response } from 'express'; -import { sanitizeDeletedComment } from 'server/util/sanitizeDeletedComment'; export const Errors = { NoRootId: 'Must provide thread_id', From 94f71d385a56f6fb64e475c89e1c1648ed795ffa Mon Sep 17 00:00:00 2001 From: Timothee Legros Date: Tue, 22 Oct 2024 17:13:37 +0300 Subject: [PATCH 351/425] type fix --- libs/model/src/comment/GetComments.query.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libs/model/src/comment/GetComments.query.ts b/libs/model/src/comment/GetComments.query.ts index 059d905601f..3ce65199f03 100644 --- a/libs/model/src/comment/GetComments.query.ts +++ b/libs/model/src/comment/GetComments.query.ts @@ -66,11 +66,7 @@ export function GetComments(): Query { }; }); - return schemas.buildPaginatedResponse( - sanitizedComments, - count as number, - payload, - ); + return schemas.buildPaginatedResponse(sanitizedComments, count, payload); }, }; } From 251a2ec7cfdc77a21d0266e79149de7998842e71 Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 22 Oct 2024 16:14:10 +0200 Subject: [PATCH 352/425] copy changes --- .../steps/SignTransactionsStep/SignTransactionsStep.tsx | 7 ++++--- .../scripts/views/pages/discussions/DiscussionsPage.tsx | 8 +++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/SignTransactionsStep/SignTransactionsStep.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/SignTransactionsStep/SignTransactionsStep.tsx index c5a435f4951..631499aeb07 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/SignTransactionsStep/SignTransactionsStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/SignTransactionsStep/SignTransactionsStep.tsx @@ -232,9 +232,10 @@ const SignTransactionsStep = ({
      Sign transactions to launch contest - You must sign two (2) transactions to launch your community contest. - The first is to route the fees generated from stake to the contest - address. The second is to launch the contest contract onchain. + You must sign this transaction to deploy the contest.{' '} + {isContestRecurring + ? 'It routes the fees generated from stake to the contest address and launchs the contest contract onchain.' + : 'It launchs the contest contract onchain.'} diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index 22894df489f..d0eb31bd442 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -39,6 +39,7 @@ import { isContestActive } from 'views/pages/CommunityManagement/Contests/utils' import useTokenMetadataQuery from '../../../state/api/tokens/getTokenMetadata'; import { AdminOnboardingSlider } from '../../components/AdminOnboardingSlider'; import { UserTrainingSlider } from '../../components/UserTrainingSlider'; +import { CWText } from '../../components/component_kit/cw_text'; import { DiscussionsFeedDiscovery } from './DiscussionsFeedDiscovery'; import { EmptyThreadsPlaceholder } from './EmptyThreadsPlaceholder'; @@ -338,7 +339,12 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { voteWeight={voteWeight} popover={{ title: tokenMetadata?.name, - body: formatAddressShort(topicObj.token_address!, 6, 6), + body: ( + + This topic has weighted voting enabled using{' '} + {formatAddressShort(topicObj.token_address!, 6, 6)} + + ), }} /> )} From 7115910a3c8bd420b6c378dc608bd8039f374f96 Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 22 Oct 2024 16:41:12 +0200 Subject: [PATCH 353/425] ci --- .../client/scripts/state/api/tokens/getERC20Balance.ts | 4 ++-- .../scripts/views/pages/discussions/DiscussionsPage.tsx | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/state/api/tokens/getERC20Balance.ts b/packages/commonwealth/client/scripts/state/api/tokens/getERC20Balance.ts index 195e4bb7661..f135e8f47e8 100644 --- a/packages/commonwealth/client/scripts/state/api/tokens/getERC20Balance.ts +++ b/packages/commonwealth/client/scripts/state/api/tokens/getERC20Balance.ts @@ -16,7 +16,7 @@ const getERC20Balance = async ({ }: UseGetERC20BalanceQueryProps) => { const helper = new ERC20Helper(tokenAddress, nodeRpc); - return helper.getBalance(userAddress); + return await helper.getBalance(userAddress); }; const useGetERC20BalanceQuery = ({ @@ -27,7 +27,7 @@ const useGetERC20BalanceQuery = ({ return useQuery({ queryKey: [userAddress, tokenAddress, nodeRpc], queryFn: () => getERC20Balance({ userAddress, tokenAddress, nodeRpc }), - enabled: !!tokenAddress && userAddress && !!nodeRpc, + enabled: !!tokenAddress && !!userAddress && !!nodeRpc, staleTime: GET_ERC20_BALANCE_STALE_TIME, retry: false, }); diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx index d0eb31bd442..7979c479939 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/DiscussionsPage.tsx @@ -195,7 +195,11 @@ const DiscussionsPage = ({ topicName }: DiscussionsPageProps) => { const voteWeight = isTopicWeighted && erc20Balance - ? String((topicObj?.vote_weight_multiplier * erc20Balance).toFixed(0)) + ? String( + ( + (topicObj?.vote_weight_multiplier || 1) * Number(erc20Balance) + ).toFixed(0), + ) : ''; return ( From 714e8ceef2d79e23996e8360898558c32286637e Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 22 Oct 2024 20:50:42 +0500 Subject: [PATCH 354/425] Added newer `` component --- .../client/scripts/state/api/config.ts | 1 + .../state/api/general/generateImage.ts | 28 +- .../scripts/state/api/general/uploadFile.ts | 61 +++ .../CWCoverImageUploader.scss | 143 +++++++ .../CWCoverImageUploader.tsx | 60 +++ .../ImageBehaviorSelector.tsx | 48 +++ .../CWCoverImageUploader/UploadControl.tsx | 387 ++++++++++++++++++ .../CWCoverImageUploader/index.ts | 1 + 8 files changed, 714 insertions(+), 15 deletions(-) create mode 100644 packages/commonwealth/client/scripts/state/api/general/uploadFile.ts create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.scss create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/ImageBehaviorSelector.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/index.ts diff --git a/packages/commonwealth/client/scripts/state/api/config.ts b/packages/commonwealth/client/scripts/state/api/config.ts index 5a022eabb66..b29282894bc 100644 --- a/packages/commonwealth/client/scripts/state/api/config.ts +++ b/packages/commonwealth/client/scripts/state/api/config.ts @@ -37,6 +37,7 @@ export const ApiEndpoints = { searchChains: (searchTerm: string) => `/communities?search=${searchTerm}`, VIEW_COUNT: '/viewCount', GENERATE_IMAGE: '/generateImage', + UPLOAD_FILE: '/getUploadSignature', }; export const ContractMethods = { diff --git a/packages/commonwealth/client/scripts/state/api/general/generateImage.ts b/packages/commonwealth/client/scripts/state/api/general/generateImage.ts index 38955d079b3..1be48fa24ef 100644 --- a/packages/commonwealth/client/scripts/state/api/general/generateImage.ts +++ b/packages/commonwealth/client/scripts/state/api/general/generateImage.ts @@ -1,4 +1,4 @@ -import { useQuery } from '@tanstack/react-query'; +import { useMutation } from '@tanstack/react-query'; import axios from 'axios'; import { ApiEndpoints, SERVER_URL } from 'state/api/config'; import { userStore } from '../../ui/user'; @@ -18,21 +18,19 @@ export const generateImage = async ({ return res.data.result.imageUrl; }; -type GenerateImageQueryProps = { - apiCallEnabled?: boolean; -} & GenerateImageProps; +type UseGenerateImageMutationProps = { + onSuccess?: (generatedImageURL: string) => void; +}; -const useGenerateImageQuery = ({ - prompt, - apiCallEnabled, -}: GenerateImageQueryProps) => { - return useQuery({ - // eslint-disable-next-line @tanstack/query/exhaustive-deps - queryKey: [ApiEndpoints.GENERATE_IMAGE, prompt], - queryFn: () => generateImage({ prompt }), - staleTime: Infinity, - enabled: apiCallEnabled, +const useGenerateImageMutation = ({ + onSuccess, +}: UseGenerateImageMutationProps = {}) => { + return useMutation({ + mutationFn: generateImage, + onSuccess: (generatedImageURL) => { + onSuccess?.(generatedImageURL); + }, }); }; -export default useGenerateImageQuery; +export default useGenerateImageMutation; diff --git a/packages/commonwealth/client/scripts/state/api/general/uploadFile.ts b/packages/commonwealth/client/scripts/state/api/general/uploadFile.ts new file mode 100644 index 00000000000..0a954205d12 --- /dev/null +++ b/packages/commonwealth/client/scripts/state/api/general/uploadFile.ts @@ -0,0 +1,61 @@ +import { useMutation } from '@tanstack/react-query'; +import axios from 'axios'; +import { compressImage } from 'client/scripts/utils/ImageCompression'; +import { replaceBucketWithCDN } from 'helpers/awsHelpers'; +import { ApiEndpoints, SERVER_URL } from 'state/api/config'; +import { userStore } from '../../ui/user'; + +interface UploadFileProps { + file: File; +} + +export const uploadFile = async ({ + file, +}: UploadFileProps): Promise => { + const response = await axios.post( + `${SERVER_URL}/${ApiEndpoints.UPLOAD_FILE}`, + { + name: file.name, + mimetype: file.type, + auth: true, + jwt: userStore.getState().jwt, + }, + ); + + if (response?.data?.status !== 'Success') { + throw new Error('failed to upload file'); + } + + const signedUploadUrl = response?.data?.result; + + const compressedFile = file.type.startsWith('image/') + ? await compressImage(file) + : file; + + // upload the file via the signed URL + await axios.put(signedUploadUrl, compressedFile, { + headers: { + 'Content-Type': file.type, + }, + }); + + const trimmedURL = replaceBucketWithCDN(signedUploadUrl.split('?')[0]); + return replaceBucketWithCDN(trimmedURL); +}; + +type UseUploadFileMutationProps = { + onSuccess?: (uploadedFileURL) => void; +}; + +const useUploadFileMutation = ({ + onSuccess, +}: UseUploadFileMutationProps = {}) => { + return useMutation({ + mutationFn: uploadFile, + onSuccess: (uploadedFileURL) => { + onSuccess?.(uploadedFileURL); + }, + }); +}; + +export default useUploadFileMutation; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.scss b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.scss new file mode 100644 index 00000000000..74c77a36e50 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.scss @@ -0,0 +1,143 @@ +@import '../../../../../styles/shared.scss'; + +.CWCoverImageUploader { + display: flex; + flex-direction: column; + gap: 2px; + height: 100%; + width: 100%; + + .UploadControl { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 16px; + min-height: 175px; + height: 100%; + width: 100%; + padding: 16px; + background-color: $neutral-25; + border: 1px solid $neutral-200; + border-radius: $border-radius-corners; + position: relative; + cursor: pointer; + + &.isLoading { + cursor: default; + } + + &.disabled { + cursor: not-allowed; + } + + &.hovered { + border: 1px solid $primary-500; + } + + .file-input { + display: none; + } + + .img-circle { + height: 180px; + width: 180px; + border-radius: 50%; + object-fit: cover; + } + + .img-cover { + width: 100%; + max-height: 300px; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + border-radius: $border-radius-corners; + } + + // implement this when/if needed + // .img-repeat { + // } + + .gray { + color: $neutral-500; + } + + .btn-focus-styles { + margin: 0 !important; + + &:focus-within { + border-width: 1px !important; + padding: 0 !important; + } + } + + .loading-container, + .generate-image-section { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(255, 255, 255, 0.5); + backdrop-filter: blur(5px); + border-radius: $border-radius-corners; + display: flex; + flex-direction: column; + gap: 12px; + justify-content: center; + align-items: center; + } + + .loading-container { + z-index: 2; + } + + .generate-image-section { + z-index: 1; + + .close-btn { + position: absolute; + right: 4px; + top: 4px; + } + + .prompt-input-container { + width: 80%; + + .prompt-input { + padding: 8px !important; + padding-right: 32px !important; + line-height: 16px !important; + height: auto !important; + } + } + } + + &.formError { + margin-bottom: 24px; + border-color: $rorange-500; + } + + .form-validation-error { + cursor: default; + position: absolute; + bottom: -24px; + left: 0; + } + } + + .ImageBehaviorSelector { + display: flex; + flex-direction: column; + text-align: left; + gap: 4px; + margin-top: 8px; + + .cover-image-title { + color: $neutral-700 !important; + padding-bottom: 8px; + } + } +} diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.tsx new file mode 100644 index 00000000000..2449443d919 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.tsx @@ -0,0 +1,60 @@ +import clsx from 'clsx'; +import React from 'react'; +import { ImageBehavior } from '../cw_cover_image_uploader'; +import { MessageRow } from '../cw_text_input'; +import './CWCoverImageUploader.scss'; +import { + ImageBehaviorSelector, + ImageBehaviorSelectorProps, +} from './ImageBehaviorSelector'; +import { UploadControl, UploadControlProps } from './UploadControl'; + +type CWCoverImageUploaderProps = UploadControlProps & + ImageBehaviorSelectorProps & { + label?: string; + }; + +export const CWCoverImageUploader = ({ + // upload control props + name = `CWCoverImageUploader-${Math.random()}`, + hookToForm, + imageURL, + withAIImageGeneration, + uploadControlClassName, + onImageGenerated, + onImageUploaded, + onImageProcessingChange, + // image behavior props + canSelectImageBehavior = false, + onImageBehaviorChange, + imageBehaviorSelectorClassName, + // common props + imageBehavior = ImageBehavior.Circle, + label = 'Accepts JPG and PNG files.', + disabled, +}: CWCoverImageUploaderProps) => { + return ( +
      + + + +
      + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/ImageBehaviorSelector.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/ImageBehaviorSelector.tsx new file mode 100644 index 00000000000..4cbb92c987a --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/ImageBehaviorSelector.tsx @@ -0,0 +1,48 @@ +import clsx from 'clsx'; +import React from 'react'; +import { ImageBehavior } from '../cw_cover_image_uploader'; +import { CWText } from '../cw_text'; +import { CWRadioButton } from '../new_designs/cw_radio_button'; + +export type ImageBehaviorSelectorProps = { + canSelectImageBehavior?: boolean; + onImageBehaviorChange?: (newBehavior: ImageBehavior) => void; + imageBehavior?: ImageBehavior; + disabled?: boolean; + imageBehaviorSelectorClassName?: string; +}; + +export const ImageBehaviorSelector = ({ + canSelectImageBehavior, + onImageBehaviorChange, + imageBehavior, + disabled, + imageBehaviorSelectorClassName, +}: ImageBehaviorSelectorProps) => { + if (!canSelectImageBehavior) return; + + return ( +
      + + Choose image behavior + + {['Fill', 'Circle'].map((option) => ( + { + if (e.target.checked && !disabled) { + onImageBehaviorChange?.(ImageBehavior[option]); + } + }} + disabled={disabled} + /> + ))} +
      + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx new file mode 100644 index 00000000000..219693513f2 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx @@ -0,0 +1,387 @@ +import clsx from 'clsx'; +import { notifyError } from 'controllers/app/notifications'; +import useBrowserWindow from 'hooks/useBrowserWindow'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { useFormContext } from 'react-hook-form'; +import useGenerateImageMutation from 'state/api/general/generateImage'; +import useUploadFileMutation from 'state/api/general/uploadFile'; +import { ImageBehavior } from '../cw_cover_image_uploader'; +import { CWIcon } from '../cw_icons/cw_icon'; +import { CWText } from '../cw_text'; +import { CWButton } from '../new_designs/CWButton'; +import CWCircleMultiplySpinner from '../new_designs/CWCircleMultiplySpinner'; +import CWIconButton from '../new_designs/CWIconButton'; +import { CWTextInput } from '../new_designs/CWTextInput'; +import { MessageRow } from '../new_designs/CWTextInput/MessageRow'; + +type ImageProcessingProps = { + isGenerating: boolean; + isUploading: boolean; +}; + +export type UploadControlProps = { + imageURL?: string; + onImageProcessingChange?: (process: ImageProcessingProps) => void; + onImageGenerated?: (generatedImageUrl: string) => void; + onImageUploaded?: (uploadedImageURL: string) => void; + withAIImageGeneration?: boolean; + disabled?: boolean; + name?: string; + hookToForm?: boolean; + imageBehavior?: ImageBehavior; + uploadControlClassName?: string; +}; + +export const UploadControl = ({ + name, + hookToForm, + imageURL, + withAIImageGeneration, + disabled, + imageBehavior = ImageBehavior.Circle, + uploadControlClassName, + onImageProcessingChange, + onImageGenerated, + onImageUploaded, +}: UploadControlProps) => { + const imageInputRef = useRef(null); + const dropzoneRef = useRef(null); + const [imageToRender, setImageToRender] = useState(''); + const [isDraggingFile, setIsDraggingFile] = useState(false); + const [imagePrompt, setImagePrompt] = useState(''); + const [isImageGenerationSectionOpen, setIsImageGenerationSectionOpen] = + useState(false); + + const formContext = useFormContext(); + const isHookedToForm = name && hookToForm; + const formContextRef = useRef(isHookedToForm ? { formContext, name } : null); + isHookedToForm && formContext.register(name); + const formFieldValue: string = isHookedToForm + ? formContext?.getValues?.(name) + : ''; + const formFieldErrorMessage = + hookToForm && + name && + (formContext?.formState?.errors?.[name]?.message as string); + + useEffect(() => { + formContextRef.current = isHookedToForm ? { formContext, name } : null; + }, [isHookedToForm, formContext, name]); + + useEffect(() => { + console.log('formFieldValue => ', formFieldValue); + setImageToRender(formFieldValue); + }, [formFieldValue]); + + const { isWindowExtraSmall } = useBrowserWindow({}); + + const { + data: uploadedImageURL, + isLoading: isUploadingImage, + mutateAsync: uploadPickedImage, + error: imageUploadError, + } = useUploadFileMutation({ + onSuccess: onImageUploaded, + }); + + const { + data: generatedImageURL, + isLoading: isGeneratingImage, + mutateAsync: generateImage, + error: generateImageError, + } = useGenerateImageMutation({ + onSuccess: onImageGenerated, + }); + + useEffect(() => { + // this will override any image that is shown, if an image is being uploaded or generated + // then that generated/uploaded image will override this one, once that is finished + if (imageURL) { + if (formContextRef.current?.formContext && formContextRef.current?.name) { + formContextRef.current.formContext.setValue( + formContextRef.current?.name, + imageURL, + { shouldDirty: true }, + ); + } else { + setImageToRender(imageURL); + } + } + }, [imageURL]); + + useEffect(() => { + if (uploadedImageURL) { + if (formContextRef.current?.formContext && formContextRef.current?.name) { + console.log('uploadedImageURL => ', uploadedImageURL); + formContextRef.current.formContext.setValue( + formContextRef.current?.name, + uploadedImageURL, + { shouldDirty: true }, + ); + } else { + setImageToRender(uploadedImageURL); + } + } + }, [uploadedImageURL]); + + useEffect(() => { + imageUploadError && + notifyError('Failed to upload image. Please try again!'); + }, [imageUploadError]); + + useEffect(() => { + if (generatedImageURL) { + setImagePrompt(''); + setIsImageGenerationSectionOpen(false); + if (formContextRef.current?.formContext && formContextRef.current?.name) { + console.log('generatedImageURL => ', generatedImageURL); + formContextRef.current.formContext.setValue( + formContextRef.current?.name, + generatedImageURL, + { shouldDirty: true }, + ); + } else { + setImageToRender(generatedImageURL); + } + } + }, [generatedImageURL]); + + useEffect(() => { + generateImageError && + notifyError('Failed to generate image. Please try again!'); + }, [generateImageError]); + + useEffect(() => { + onImageProcessingChange && + onImageProcessingChange({ + isGenerating: isGeneratingImage, + isUploading: isUploadingImage, + }); + }, [onImageProcessingChange, isGeneratingImage, isUploadingImage]); + + const isLoading = isUploadingImage || isGeneratingImage; + const areActionsDisabled = disabled || !imageInputRef.current || isLoading; + const placeholder = `${ + isWindowExtraSmall ? 'Tap ' : 'Click or drag ' + } to upload an image here${ + withAIImageGeneration ? ' or generate one below' : '' + }`; + + const openFilePicker = () => { + if (areActionsDisabled) return; + + imageInputRef?.current?.click(); + }; + + const handlePickedFile = useCallback( + (inputEvent: InputEvent) => { + const file = inputEvent?.target + ? (inputEvent.target as HTMLInputElement)?.files?.[0] + : null; + + if (areActionsDisabled || !file) return; + + uploadPickedImage({ file }); + }, + [areActionsDisabled, uploadPickedImage], + ); + + const handleFileDrag = useCallback( + (event: DragEvent) => { + if (areActionsDisabled) return; + + event.preventDefault(); + event.stopPropagation(); + + // if relatedTarget is not present, hover is on the component + setIsDraggingFile(!event.relatedTarget); + + if (event.type === 'drop' && event.dataTransfer) { + setIsDraggingFile(false); + + const file = event.dataTransfer.files[0]; + + if (areActionsDisabled || !file) return; + + uploadPickedImage({ file }); + } + }, + [areActionsDisabled, uploadPickedImage], + ); + + // attach events to file input + useEffect(() => { + const internalImageInputRef = imageInputRef.current; + + if (internalImageInputRef) { + internalImageInputRef.addEventListener('change', handlePickedFile); + } + + return () => { + if (internalImageInputRef) { + internalImageInputRef.removeEventListener('change', handlePickedFile); + } + }; + }, [handlePickedFile]); + + // attach events to file drop zone + useEffect(() => { + const internalDropzoneRef = dropzoneRef.current; + if (internalDropzoneRef) { + internalDropzoneRef.addEventListener('dragenter', handleFileDrag); + internalDropzoneRef.addEventListener('dragleave', handleFileDrag); + internalDropzoneRef.addEventListener('dragover', handleFileDrag); + internalDropzoneRef.addEventListener('drop', handleFileDrag); + } + + return () => { + if (internalDropzoneRef) { + internalDropzoneRef.removeEventListener('dragenter', handleFileDrag); + internalDropzoneRef.removeEventListener('dragleave', handleFileDrag); + internalDropzoneRef.removeEventListener('dragover', handleFileDrag); + internalDropzoneRef.removeEventListener('drop', handleFileDrag); + } + }; + }, [handleFileDrag]); + + return ( +
      openFilePicker()} + onKeyUp={(e) => + e.target === e.currentTarget && + (e.key === 'Enter' || e.key === ' ') && + openFilePicker() + } + aria-label="" + ref={dropzoneRef} + > + + {isLoading ? ( +
      + +
      + ) : ( + <> + {imageToRender ? ( + + ) : ( + <> + + + {placeholder} + + + )} + + {withAIImageGeneration && ( + { + e.stopPropagation(); + setIsImageGenerationSectionOpen(true); + }} + disabled={areActionsDisabled} + /> + )} + + )} + {isImageGenerationSectionOpen && ( +
      e.stopPropagation()} + > + { + e.stopPropagation(); + setImagePrompt(''); + setIsImageGenerationSectionOpen(false); + }} + iconName="close" + buttonSize="sm" + className="close-btn" + disabled={areActionsDisabled} + /> + + !areActionsDisabled && setImagePrompt(e.target?.value || '') + } + iconRight={ + { + e.stopPropagation(); + setImagePrompt(''); + }} + /> + } + /> + { + imagePrompt && + generateImage({ prompt: imagePrompt.trim() }).catch( + console.error, + ); + }} + /> +
      + )} + {formFieldErrorMessage && ( +
      e.stopPropagation()} + onKeyUp={(e) => e.stopPropagation()} + > + +
      + )} +
      + ); +}; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/index.ts b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/index.ts new file mode 100644 index 00000000000..f97a0869a20 --- /dev/null +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/index.ts @@ -0,0 +1 @@ +export { CWCoverImageUploader } from './CWCoverImageUploader'; From aacb3e2d4d86abafecd20fd319e65ffd67e54565 Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Tue, 22 Oct 2024 08:55:56 -0700 Subject: [PATCH 355/425] fix bignumber page crash --- libs/shared/src/commonProtocol/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/shared/src/commonProtocol/utils.ts b/libs/shared/src/commonProtocol/utils.ts index 61b090f5d9e..ec04f2ee965 100644 --- a/libs/shared/src/commonProtocol/utils.ts +++ b/libs/shared/src/commonProtocol/utils.ts @@ -2,7 +2,7 @@ import { BigNumber } from '@ethersproject/bignumber'; export const calculateVoteWeight = ( balance: string, // should be in wei - voteWeight: number, + voteWeight: number = 0, ): BigNumber | null => { if (!balance || voteWeight <= 0) return null; const bigBalance = BigNumber.from(balance); From 166eb9ff77148dbd63d68984174d99f67be4c15a Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 22 Oct 2024 21:01:53 +0500 Subject: [PATCH 356/425] Fix lint issues --- .../component_kit/CWCoverImageUploader/UploadControl.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx index 219693513f2..9a94f9652eb 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx @@ -181,7 +181,7 @@ export const UploadControl = ({ if (areActionsDisabled || !file) return; - uploadPickedImage({ file }); + uploadPickedImage({ file }).catch(console.error); }, [areActionsDisabled, uploadPickedImage], ); @@ -203,7 +203,7 @@ export const UploadControl = ({ if (areActionsDisabled || !file) return; - uploadPickedImage({ file }); + uploadPickedImage({ file }).catch(console.error); } }, [areActionsDisabled, uploadPickedImage], From 33d12d8879085134522d2d272323b50dacaea2ce Mon Sep 17 00:00:00 2001 From: Marcin Date: Tue, 22 Oct 2024 18:00:08 +0200 Subject: [PATCH 357/425] add helper text to topic dropdowns --- .../commonwealth/client/scripts/helpers/index.tsx | 15 +++++++++++++++ .../NewThreadFormLegacy/CustomTopicOption.tsx | 3 +++ .../NewThreadFormLegacy/NewThreadForm.scss | 4 ++++ .../NewThreadFormLegacy/NewThreadForm.tsx | 9 +++++++-- .../NewThreadFormModern/NewThreadForm.scss | 4 ++++ .../NewThreadFormModern/NewThreadForm.tsx | 9 +++++++-- .../Groups/common/GroupForm/GroupForm.tsx | 4 ++++ .../steps/DetailsFormStep/DetailsFormStep.tsx | 2 +- .../ManageContest/steps/DetailsFormStep/utils.ts | 15 --------------- 9 files changed, 45 insertions(+), 20 deletions(-) diff --git a/packages/commonwealth/client/scripts/helpers/index.tsx b/packages/commonwealth/client/scripts/helpers/index.tsx index 86c865cceaa..0497d849218 100644 --- a/packages/commonwealth/client/scripts/helpers/index.tsx +++ b/packages/commonwealth/client/scripts/helpers/index.tsx @@ -1,3 +1,4 @@ +import { TopicWeightedVoting } from '@hicommonwealth/schemas'; import BigNumber from 'bignumber.js'; import moment from 'moment'; import React from 'react'; @@ -250,3 +251,17 @@ export const handleRedirectClicks = ( callback(); } }; + +export const weightedVotingValueToLabel = ( + weightedVoting: TopicWeightedVoting, +) => { + if (weightedVoting === TopicWeightedVoting.Stake) { + return 'Community Stake'; + } + + if (weightedVoting === TopicWeightedVoting.ERC20) { + return 'ERC20'; + } + + return ''; +}; diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/CustomTopicOption.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/CustomTopicOption.tsx index 44fee9f563c..9b1f620e9ca 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/CustomTopicOption.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/CustomTopicOption.tsx @@ -6,11 +6,13 @@ import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; interface CustomTopicOptionProps { originalProps: OptionProps<{ value: string; label: string }>; topic?: Topic; + helpText?: string; } const CustomTopicOption = ({ originalProps, topic, + helpText, }: CustomTopicOptionProps) => { return ( // @ts-expect-error @@ -19,6 +21,7 @@ const CustomTopicOption = ({ )} {originalProps.label} + {helpText && {helpText}} ); }; diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.scss b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.scss index 9c84b3a2cb2..915ef1942b0 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.scss +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.scss @@ -141,4 +141,8 @@ .JoinCommunityBanner { margin-top: 8px; } + + .help-text-container { + margin-left: auto; + } } diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx index 9aaf244b0f1..d7e9bdfda73 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormLegacy/NewThreadForm.tsx @@ -1,7 +1,7 @@ -import { PermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum, TopicWeightedVoting } from '@hicommonwealth/schemas'; import { notifyError } from 'controllers/app/notifications'; import { SessionKeyError } from 'controllers/server/sessions'; -import { parseCustomStages } from 'helpers'; +import { parseCustomStages, weightedVotingValueToLabel } from 'helpers'; import { detectURL, getThreadActionTooltipText } from 'helpers/threads'; import useJoinCommunityBanner from 'hooks/useJoinCommunityBanner'; import useTopicGating from 'hooks/useTopicGating'; @@ -276,6 +276,11 @@ export const NewThreadForm = () => { topic: topicsForSelector.find( (t) => String(t.id) === originalProps.data.value, ), + helpText: weightedVotingValueToLabel( + topicsForSelector.find( + (t) => String(t.id) === originalProps.data.value, + )?.weighted_voting as TopicWeightedVoting, + ), }), }} formatOptionLabel={(option) => ( diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.scss b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.scss index 9c84b3a2cb2..915ef1942b0 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.scss +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.scss @@ -141,4 +141,8 @@ .JoinCommunityBanner { margin-top: 8px; } + + .help-text-container { + margin-left: auto; + } } diff --git a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx index 7678c6e2b73..23f8afad497 100644 --- a/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/NewThreadFormModern/NewThreadForm.tsx @@ -1,7 +1,7 @@ -import { PermissionEnum } from '@hicommonwealth/schemas'; +import { PermissionEnum, TopicWeightedVoting } from '@hicommonwealth/schemas'; import { notifyError } from 'controllers/app/notifications'; import { SessionKeyError } from 'controllers/server/sessions'; -import { parseCustomStages } from 'helpers'; +import { parseCustomStages, weightedVotingValueToLabel } from 'helpers'; import { detectURL, getThreadActionTooltipText } from 'helpers/threads'; import useJoinCommunityBanner from 'hooks/useJoinCommunityBanner'; import useTopicGating from 'hooks/useTopicGating'; @@ -260,6 +260,11 @@ export const NewThreadForm = () => { topic: topicsForSelector.find( (t) => String(t.id) === originalProps.data.value, ), + helpText: weightedVotingValueToLabel( + topicsForSelector.find( + (t) => String(t.id) === originalProps.data.value, + )?.weighted_voting as TopicWeightedVoting, + ), }), }} formatOptionLabel={(option) => ( diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx index 0c52bb76d9d..634a63ca44f 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityGroupsAndMembers/Groups/common/GroupForm/GroupForm.tsx @@ -1,4 +1,5 @@ /* eslint-disable react/no-multi-comp */ +import { weightedVotingValueToLabel } from 'helpers'; import { isValidEthAddress } from 'helpers/validateTypes'; import { useCommonNavigate } from 'navigation/helpers'; import React, { useEffect, useMemo, useState } from 'react'; @@ -616,6 +617,9 @@ const GroupForm = ({ options={sortedTopics.map((topic) => ({ label: topic.name, value: topic.id, + helpText: weightedVotingValueToLabel( + topic.weighted_voting!, + ), }))} />
      diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx index ea3d232e718..5b2183186cc 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx @@ -3,6 +3,7 @@ import { useSearchParams } from 'react-router-dom'; import { TopicWeightedVoting } from '@hicommonwealth/schemas'; import { notifyError } from 'controllers/app/notifications'; +import { weightedVotingValueToLabel } from 'helpers'; import { useFlag } from 'hooks/useFlag'; import { useCommonNavigate } from 'navigation/helpers'; import app from 'state'; @@ -47,7 +48,6 @@ import { initialContestDuration, initialPayoutStructure, prizePercentageOptions, - weightedVotingValueToLabel, } from './utils'; import { detailsFormValidationSchema } from './validation'; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/utils.ts b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/utils.ts index e29d756e93b..67b3fe6f5e8 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/utils.ts +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/utils.ts @@ -1,4 +1,3 @@ -import { TopicWeightedVoting } from '@hicommonwealth/schemas'; import colors from '../../../../../../../../styles/mixins/colors.module.scss'; export const INITIAL_PERCENTAGE_VALUE = 10; @@ -57,17 +56,3 @@ export const contestDurationOptions = Array.from({ length: 7 }, (_, i) => { }); export const initialContestDuration = contestDurationOptions[6].value; - -export const weightedVotingValueToLabel = ( - weightedVoting: TopicWeightedVoting, -) => { - if (weightedVoting === TopicWeightedVoting.Stake) { - return 'Community Stake'; - } - - if (weightedVoting === TopicWeightedVoting.ERC20) { - return 'ERC20'; - } - - return ''; -}; From ceeb0433dc20e24b0aae5db9ed619eb574f64c9f Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 22 Oct 2024 21:53:06 +0500 Subject: [PATCH 358/425] Added form field handler to cover image uploader for enhanced validations --- .../CWCoverImageUploader/UploadControl.tsx | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx index 9a94f9652eb..562b2572aad 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx @@ -55,23 +55,35 @@ export const UploadControl = ({ const formContext = useFormContext(); const isHookedToForm = name && hookToForm; const formContextRef = useRef(isHookedToForm ? { formContext, name } : null); - isHookedToForm && formContext.register(name); + const registeredFormContext = isHookedToForm + ? formContext.register(name) + : null; const formFieldValue: string = isHookedToForm - ? formContext?.getValues?.(name) + ? formContext?.watch?.(name) : ''; const formFieldErrorMessage = hookToForm && name && (formContext?.formState?.errors?.[name]?.message as string); + // update formContextRef whenever formContext changes useEffect(() => { formContextRef.current = isHookedToForm ? { formContext, name } : null; }, [isHookedToForm, formContext, name]); + // update `imageToRender` from formContext whenever it changes (if component is hooked to form) useEffect(() => { - console.log('formFieldValue => ', formFieldValue); - setImageToRender(formFieldValue); - }, [formFieldValue]); + if (formFieldValue !== imageToRender) { + setImageToRender(formFieldValue); + + // reset errors if there are any + if ((formFieldValue || imageToRender) && formContextRef.current) { + formContextRef.current.formContext + .trigger(formContextRef.current?.name) + .catch(console.error); + } + } + }, [formFieldValue, imageToRender]); const { isWindowExtraSmall } = useBrowserWindow({}); @@ -103,24 +115,21 @@ export const UploadControl = ({ imageURL, { shouldDirty: true }, ); - } else { - setImageToRender(imageURL); } + setImageToRender(imageURL); } }, [imageURL]); useEffect(() => { if (uploadedImageURL) { if (formContextRef.current?.formContext && formContextRef.current?.name) { - console.log('uploadedImageURL => ', uploadedImageURL); formContextRef.current.formContext.setValue( formContextRef.current?.name, uploadedImageURL, { shouldDirty: true }, ); - } else { - setImageToRender(uploadedImageURL); } + setImageToRender(uploadedImageURL); } }, [uploadedImageURL]); @@ -134,15 +143,13 @@ export const UploadControl = ({ setImagePrompt(''); setIsImageGenerationSectionOpen(false); if (formContextRef.current?.formContext && formContextRef.current?.name) { - console.log('generatedImageURL => ', generatedImageURL); formContextRef.current.formContext.setValue( formContextRef.current?.name, generatedImageURL, { shouldDirty: true }, ); - } else { - setImageToRender(generatedImageURL); } + setImageToRender(generatedImageURL); } }, [generatedImageURL]); @@ -272,6 +279,9 @@ export const UploadControl = ({ ref={imageInputRef} disabled={areActionsDisabled} /> + {isHookedToForm && registeredFormContext && ( + + )} {isLoading ? (
      @@ -279,7 +289,11 @@ export const UploadControl = ({ ) : ( <> {imageToRender ? ( - + ) : ( <> Date: Tue, 22 Oct 2024 21:57:25 +0500 Subject: [PATCH 359/425] Fix image url override in non-form context cases --- .../component_kit/CWCoverImageUploader/UploadControl.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx index 562b2572aad..c5b2ca45eb5 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx @@ -58,9 +58,9 @@ export const UploadControl = ({ const registeredFormContext = isHookedToForm ? formContext.register(name) : null; - const formFieldValue: string = isHookedToForm + const formFieldValue: string | null = isHookedToForm ? formContext?.watch?.(name) - : ''; + : null; const formFieldErrorMessage = hookToForm && name && @@ -73,7 +73,7 @@ export const UploadControl = ({ // update `imageToRender` from formContext whenever it changes (if component is hooked to form) useEffect(() => { - if (formFieldValue !== imageToRender) { + if (formFieldValue !== imageToRender && formFieldValue !== null) { setImageToRender(formFieldValue); // reset errors if there are any From 321277d3683c0871441238f24fcc4f99a7d288dd Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 22 Oct 2024 22:11:16 +0500 Subject: [PATCH 360/425] Added fix height for image uploader if it has an image url to keep constant height during behaviour updates --- .../CWCoverImageUploader/CWCoverImageUploader.scss | 8 ++++++-- .../component_kit/CWCoverImageUploader/UploadControl.tsx | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.scss b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.scss index 74c77a36e50..a98a5d91b17 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.scss +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/CWCoverImageUploader.scss @@ -13,7 +13,6 @@ align-items: center; justify-content: center; gap: 16px; - min-height: 175px; height: 100%; width: 100%; padding: 16px; @@ -22,6 +21,11 @@ border-radius: $border-radius-corners; position: relative; cursor: pointer; + min-height: 175px; + + &.hasImageURL { + min-height: 270px; + } &.isLoading { cursor: default; @@ -48,7 +52,7 @@ .img-cover { width: 100%; - max-height: 300px; + max-height: 100%; object-fit: cover; position: absolute; top: 0; diff --git a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx index c5b2ca45eb5..d340b3cba8a 100644 --- a/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx +++ b/packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/UploadControl.tsx @@ -261,6 +261,7 @@ export const UploadControl = ({ { isLoading }, { hovered: isDraggingFile }, { formError: !!formFieldErrorMessage }, + { hasImageURL: !!imageToRender }, uploadControlClassName, )} onClick={() => openFilePicker()} From b2a28f65d3e92421da62e21a92a1268891ebf767 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 22 Oct 2024 22:12:08 +0500 Subject: [PATCH 361/425] Added cover image uploader to component showcase --- .../CWCoverImageUploader.showcase.tsx | 89 +++++++++++++++++++ .../ComponentsShowcase/componentsList.ts | 7 ++ 2 files changed, 96 insertions(+) create mode 100644 packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/CWCoverImageUploader.showcase.tsx diff --git a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/CWCoverImageUploader.showcase.tsx b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/CWCoverImageUploader.showcase.tsx new file mode 100644 index 00000000000..97fd4bd70bc --- /dev/null +++ b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/CWCoverImageUploader.showcase.tsx @@ -0,0 +1,89 @@ +import { VALIDATION_MESSAGES } from 'client/scripts/helpers/formValidations/messages'; +import { CWButton } from 'client/scripts/views/components/component_kit/new_designs/CWButton'; +import { CWForm } from 'client/scripts/views/components/component_kit/new_designs/CWForm'; +import React, { useState } from 'react'; +import { CWCoverImageUploader } from 'views/components/component_kit/CWCoverImageUploader'; +import { ImageBehavior } from 'views/components/component_kit/cw_cover_image_uploader'; +import { CWText } from 'views/components/component_kit/cw_text'; +import { z } from 'zod'; + +const CWCoverImageUploaderShowCase = () => { + const sampleImageUrl = + 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRDn-lJCm6BAMW7tP9breo15R6FVpUaU6KrKg&s'; + + const [imageBehavior, setImageBehavior] = useState(ImageBehavior.Circle); + + return ( + <> + Image upload (default) +
      + +
      + Image upload and image generation +
      + +
      + Image Behavior +
      + +
      + Form validation +
      + console.log('values => ', values)} + onErrors={(errors) => console.log('errors => ', errors)} + className="w-full" + > + {({ setValue }) => ( + <> + + + setValue('imageURL', sampleImageUrl, { isDirty: true }) + } + /> + + + )} + +
      + Disabled +
      + + +
      + + ); +}; + +export default CWCoverImageUploaderShowCase; diff --git a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/componentsList.ts b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/componentsList.ts index 7ae2dcd1baf..724db5651e1 100644 --- a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/componentsList.ts +++ b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/componentsList.ts @@ -5,6 +5,7 @@ import BreadcrumbsShowcase from 'views/pages/ComponentsShowcase/components/Bread import ButtonsShowcase from 'views/pages/ComponentsShowcase/components/Buttons.showcase'; import ButtonsCircleShowcase from 'views/pages/ComponentsShowcase/components/ButtonsCircle.showcase'; import ButtonsIconShowcase from 'views/pages/ComponentsShowcase/components/ButtonsIcon.showcase'; +import CWCoverImageUploaderShowCase from 'views/pages/ComponentsShowcase/components/CWCoverImageUploader.showcase'; import CardsShowcase from 'views/pages/ComponentsShowcase/components/Cards.showcase'; import CheckboxesShowcase from 'views/pages/ComponentsShowcase/components/Checkboxes.showcase'; import CollapsiblesShowcase from 'views/pages/ComponentsShowcase/components/Collapsibles.showcase'; @@ -64,6 +65,7 @@ export const ComponentPageName = { Dropdowns: 'Dropdowns', Inputs: 'Inputs', Paginations: 'Paginations', + CoverImageUploader: 'CoverImageUploader', }; export const ComponentType = { @@ -122,6 +124,11 @@ export const componentItems = [ displayName: ComponentPageName.ButtonsCircle, type: ComponentType.Components, }, + { + ComponentPage: CWCoverImageUploaderShowCase, + displayName: ComponentPageName.CoverImageUploader, + type: ComponentType.Components, + }, { ComponentPage: RadioButtonsShowcase, displayName: ComponentPageName.RadioButtons, From 293b1d53b8c03633c509ea98bdab6da7c829029f Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 22 Oct 2024 22:22:57 +0500 Subject: [PATCH 362/425] Removed older cover image uploader component --- .../CommunityInformationForm.tsx | 15 +- .../components/EditProfile/EditProfile.tsx | 15 +- .../CWCoverImageUploader.tsx | 2 +- .../ImageBehaviorSelector.tsx | 2 +- .../CWCoverImageUploader/UploadControl.tsx | 2 +- .../CWCoverImageUploader/index.ts | 1 + .../CWCoverImageUploader/types.ts | 5 + .../component_kit/cw_cover_image_uploader.tsx | 527 ------------------ .../CommunityProfileForm.tsx | 15 +- .../steps/DetailsFormStep/DetailsFormStep.tsx | 13 +- .../CWCoverImageUploader.showcase.tsx | 6 +- .../components/Inputs.showcase.tsx | 8 +- .../TokenInformationForm.tsx | 15 +- .../cw_cover_image_uploader.scss | 145 ----- 14 files changed, 56 insertions(+), 715 deletions(-) create mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/CWCoverImageUploader/types.ts delete mode 100644 packages/commonwealth/client/scripts/views/components/component_kit/cw_cover_image_uploader.tsx delete mode 100644 packages/commonwealth/client/styles/components/component_kit/cw_cover_image_uploader.scss diff --git a/packages/commonwealth/client/scripts/views/components/CommunityInformationForm/CommunityInformationForm.tsx b/packages/commonwealth/client/scripts/views/components/CommunityInformationForm/CommunityInformationForm.tsx index 173309b3857..a55717edfca 100644 --- a/packages/commonwealth/client/scripts/views/components/CommunityInformationForm/CommunityInformationForm.tsx +++ b/packages/commonwealth/client/scripts/views/components/CommunityInformationForm/CommunityInformationForm.tsx @@ -5,7 +5,7 @@ import { useFetchConfigurationQuery } from 'state/api/configuration'; import { CWCoverImageUploader, ImageBehavior, -} from 'views/components/component_kit/cw_cover_image_uploader'; +} from 'views/components/component_kit/CWCoverImageUploader'; import { CWIconButton } from 'views/components/component_kit/cw_icon_button'; import { CWText } from 'views/components/component_kit/cw_text'; import { CWTextArea } from 'views/components/component_kit/cw_text_area'; @@ -188,14 +188,15 @@ const CommunityInformationForm = ({ /> + setIsProcessingProfileImage(isGenerating || isUploading) + } name="communityProfileImageURL" hookToForm - defaultImageBehaviour={ImageBehavior.Circle} - enableGenerativeAI + imageBehavior={ImageBehavior.Circle} + withAIImageGeneration /> {withSocialLinks ? ( diff --git a/packages/commonwealth/client/scripts/views/components/EditProfile/EditProfile.tsx b/packages/commonwealth/client/scripts/views/components/EditProfile/EditProfile.tsx index 702ffbaea5b..478a8166321 100644 --- a/packages/commonwealth/client/scripts/views/components/EditProfile/EditProfile.tsx +++ b/packages/commonwealth/client/scripts/views/components/EditProfile/EditProfile.tsx @@ -21,7 +21,7 @@ import { UserTrainingCardTypes } from '../UserTrainingSlider/types'; import { CWCoverImageUploader, ImageBehavior, -} from '../component_kit/cw_cover_image_uploader'; +} from '../component_kit/CWCoverImageUploader'; import { CWDivider } from '../component_kit/cw_divider'; import { CWText } from '../component_kit/cw_text'; import { CWButton } from '../component_kit/new_designs/CWButton'; @@ -341,18 +341,19 @@ const EditProfile = () => { description="Express yourself through imagery." > Add a background image - {/* TODO: add option to remove existing image */} + {/* can add option to remove existing image if needed */} + setIsUploadingCoverImage(isGenerating || isUploading) + } + onImageBehaviorChange={setBackgroundImageBehaviour} /> void; - onImageProcessStatusChange?: (isProcessing: boolean) => any; -}; - -export enum ImageAs { - Cover = 'cover', - Background = 'background', -} - -export enum ImageBehavior { - Fill = 'cover', - Tiled = 'repeat', - Circle = 'circle', -} - -// TODO Graham 10/24/22: Synchronize avatar upload against new cover upload system -export const CWCoverImageUploader = ({ - name, - hookToForm, - headerText, - subheaderText, - enableGenerativeAI, - generatedImageCallback, - uploadCompleteCallback, - defaultImageUrl, - canSelectImageBehaviour = true, - showUploadAndGenerateText, - defaultImageBehaviour, - onImageBehaviourChange, - onImageProcessStatusChange = () => {}, -}: CoverImageUploaderProps) => { - const user = useUserStore(); - const [imageURL, setImageURL] = React.useState(); - const [isUploading, setIsUploading] = React.useState(); - const [uploadStatus, setUploadStatus] = React.useState< - ValidationStatus | undefined - >(); - const [imageBehavior, setImageBehavior] = React.useState( - // @ts-expect-error - defaultImageBehaviour, - ); - const [prompt, setPrompt] = React.useState(); - const [isPrompting, setIsPrompting] = React.useState(); - const [isGenerating, setIsGenerating] = React.useState(); - const attachZone = React.useRef(null); - const attachButton = React.useRef(null); - const pseudoInput = React.useRef(null); - - const { isWindowExtraSmall } = useBrowserWindow({}); - - const formContext = useFormContext(); - hookToForm && name && formContext.register(name); - const formFieldErrorMessage = - hookToForm && - name && - (formContext?.formState?.errors?.[name]?.message as string); - - const canResetValue = useRef(true); - const [defaultFormContext, setDefaultFormContext] = React.useState({ - isSet: false, - value: hookToForm && name ? formContext?.getValues?.(name) : null, - }); - - useNecessaryEffect(() => { - if (defaultFormContext.value && !defaultFormContext.isSet) { - canResetValue.current = false; - // @ts-expect-error - attachButton.current.style.display = 'flex'; - - setImageURL(defaultFormContext.value); - setImageBehavior(defaultImageBehaviour || ImageBehavior.Circle); - setDefaultFormContext({ - isSet: true, - value: defaultFormContext.value, - }); - - // @ts-expect-error - formContext.setValue(name, defaultFormContext.value); - // @ts-expect-error - formContext.setError(name, null); - setTimeout(() => { - canResetValue.current = true; - }, 1000); - } - }, [defaultFormContext, imageBehavior, formContext]); - - useEffect(() => { - // @ts-expect-error - onImageProcessStatusChange(isUploading || isGenerating); - }, [isUploading, isGenerating, onImageProcessStatusChange]); - - useNecessaryEffect(() => { - if (!imageURL && canResetValue.current && formContext && name) { - formContext.setValue(name, ''); - } - }, [imageURL, formContext, name]); - - const uploadImage = async ( - file: File, - ): Promise<[string, ValidationStatus]> => { - try { - const signatureResponse = await axios.post( - `${SERVER_URL}/getUploadSignature`, - { - name: file.name, - mimetype: file.type, - auth: true, - jwt: user.jwt, - }, - ); - if (signatureResponse.data.status !== 'Success') throw new Error(); - - const compressedImage = await compressImage(file); - - const uploadURL = signatureResponse.data.result; - const uploadResponse = await fetch(uploadURL, { - method: 'put', - body: compressedImage, - }); - - const trimmedImageURL = uploadResponse.url?.replace(/\?.*/, '').trim(); - if (!trimmedImageURL) throw new Error(); - - return [replaceBucketWithCDN(trimmedImageURL), 'success']; - } catch (e) { - // @ts-expect-error - return [null, 'failure']; - } - }; - - const generateImage = async () => { - try { - setImageURL(''); - const res = await axios.post(`${SERVER_URL}/generateImage`, { - description: prompt, - jwt: user.jwt, - }); - - const generatedImageURL = res.data.result.imageUrl; - - if (isPrompting) { - setImageURL(generatedImageURL); - if (hookToForm && name && formContext) { - formContext.setValue(name, generatedImageURL); - // @ts-expect-error - formContext.setError(name, null); - } - const currentImageBehavior = !imageBehavior - ? ImageBehavior.Fill - : imageBehavior; - setImageBehavior(currentImageBehavior); - setUploadStatus('success'); - if (defaultImageBehaviour !== ImageBehavior.Circle) { - // @ts-expect-error - attachButton.current.style.display = 'none'; - } - - generatedImageCallback?.(generatedImageURL, currentImageBehavior); - uploadCompleteCallback?.(generatedImageURL, currentImageBehavior); - } - - setIsUploading(false); - setIsPrompting(false); - setIsGenerating(false); - - return generatedImageURL; - } catch (e) { - setUploadStatus('failure'); - setIsUploading(false); - setIsPrompting(false); - setIsGenerating(false); - throw new Error(e); - } - }; - - // Drag'n'Drop helper function - const handleDragEvent = (event, hoverAttachZone?: boolean) => { - event.preventDefault(); - event.stopPropagation(); - - if (isUploading) return; - - // @ts-expect-error - attachZone.current.classList[hoverAttachZone ? 'add' : 'remove']('hovered'); - }; - - const handleUpload = async (file: File) => { - if (!file) return; - - setIsUploading(true); - - const [_imageURL, _uploadStatus] = await uploadImage(file); - - setIsUploading(false); - setUploadStatus(_uploadStatus); - - if (_imageURL) { - setImageURL(_imageURL); - if (hookToForm && name && formContext) { - formContext.setValue(name, _imageURL); - // @ts-expect-error - formContext.setError(name, null); - } - const currentImageBehavior = !imageBehavior - ? ImageBehavior.Fill - : imageBehavior; - setImageBehavior(currentImageBehavior); - if (defaultImageBehaviour !== ImageBehavior.Circle) { - // @ts-expect-error - attachButton.current.style.display = 'none'; - } - uploadCompleteCallback?.(_imageURL, currentImageBehavior); - } - }; - - // Drag'n'Drop event handler declarations - const dragEnterHandler = (enterEvent: DragEvent) => { - handleDragEvent(enterEvent, true); - }; - - const dragOverHandler = (overEvent: DragEvent) => { - handleDragEvent(overEvent, true); - }; - - const dragLeaveHandler = (leaveEvent: DragEvent) => { - handleDragEvent(leaveEvent, false); - }; - - const dropHandler = (dropEvent: DragEvent) => { - handleDragEvent(dropEvent, false); - - if (isUploading) return; - - setUploadStatus(undefined); - - // @ts-expect-error - const { files } = dropEvent.dataTransfer; - handleUpload(files[0]); - }; - - // On-click support - const pseudoInputHandler = (inputEvent: InputEvent) => { - // @ts-expect-error - handleUpload((inputEvent.target as HTMLInputElement).files[0]); - }; - - const clickHandler = (e) => { - e?.stopImmediatePropagation?.(); - if (isUploading) return; - pseudoInput.current?.click(); - }; - - React.useEffect(() => { - setImageURL(defaultImageUrl); - setIsPrompting(false); - - // @ts-expect-error - pseudoInput.current.addEventListener('change', pseudoInputHandler); - // @ts-expect-error - attachZone.current.addEventListener('click', (e: any) => { - if (e.target.classList.contains('attach-btn')) clickHandler(e); - if (e.target.classList.contains('attach-zone')) clickHandler(e); - }); - - // @ts-expect-error - attachZone.current.addEventListener('dragenter', dragEnterHandler); - // @ts-expect-error - attachZone.current.addEventListener('dragleave', dragLeaveHandler); - // @ts-expect-error - attachZone.current.addEventListener('dragover', dragOverHandler); - // @ts-expect-error - attachZone.current.addEventListener('drop', dropHandler); - - return () => { - // eslint-disable-next-line react-hooks/exhaustive-deps - pseudoInput.current?.removeEventListener('change', pseudoInputHandler); - attachZone.current?.removeEventListener('click', clickHandler); - attachZone.current?.removeEventListener('dragenter', dragEnterHandler); - attachZone.current?.removeEventListener('dragleave', dragLeaveHandler); - attachZone.current?.removeEventListener('dragover', dragOverHandler); - // eslint-disable-next-line react-hooks/exhaustive-deps - attachZone.current?.removeEventListener('drop', dropHandler); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - const isFillImage = imageBehavior === ImageBehavior.Fill; - - const backgroundStyles = useMemo( - () => ({ - backgroundImage: - imageURL && defaultImageBehaviour !== ImageBehavior.Circle - ? `url(${imageURL})` - : 'none', - backgroundSize: isFillImage ? 'cover' : '100px', - backgroundRepeat: isFillImage ? 'no-repeat' : 'repeat', - backgroundPosition: isFillImage ? 'center' : '0 0', - }), - [imageURL, defaultImageBehaviour, isFillImage], - ); - - return ( -
      - {headerText && ( - - {headerText} - - )} - - statusMessage={ - uploadStatus === 'success' - ? 'Image upload succeeded.' - : uploadStatus === 'failure' - ? 'Image upload failed.' - : null - } - validationStatus={uploadStatus} - /> -
      ( - { - // @ts-expect-error - isUploading, - // @ts-expect-error - uploadStatus, - validationStatus: formFieldErrorMessage ? 'failure' : undefined, - }, - 'attach-zone', - )} - style={backgroundStyles} - ref={attachZone} - > - {uploadStatus === 'success' && - enableGenerativeAI && - !showUploadAndGenerateText && ( - { - e.stopPropagation(); - setPrompt(''); - setIsPrompting(true); - }} - /> - )} - - {isPrompting && ( -
      e.stopPropagation()} - > -
      - { - e.stopPropagation(); - setIsPrompting(false); - setIsGenerating(false); - }} - iconName="close" - iconSize="small" - /> -
      - {isGenerating ? ( - - ) : ( - <> - { - setPrompt(e.target.value); - }} - iconRight="trash" - iconRightonClick={() => { - setPrompt(''); - }} - containerClassName="prompt-input" - /> - { - // @ts-expect-error - if (prompt.length < 1) return; - setIsGenerating(true); - try { - await generateImage(); - } catch (e) { - console.error(e); - } - }} - /> - - )} -
      - )} - - {isUploading && } -
      - {imageURL && defaultImageBehaviour === ImageBehavior.Circle && ( - - )} - {!isUploading && !imageURL && ( - - )} - {headerText && !imageURL && ( - - {headerText} - - )} - {showUploadAndGenerateText && !isUploading && !imageURL && ( - - {isWindowExtraSmall ? 'Tap ' : 'Click or drag '} - to upload an image here or generate one below - - )} - {enableGenerativeAI && !isUploading && ( - { - e.stopPropagation(); - setPrompt(''); - setIsPrompting(true); - }} - /> - )} -
      -
      - - statusMessage={formFieldErrorMessage} - validationStatus={formFieldErrorMessage ? 'failure' : undefined} - /> - {canSelectImageBehaviour && ( -
      - - Choose image behavior - - {['Fill', 'Tiled'].map((option) => ( - { - if (e.target.checked) { - setImageBehavior(ImageBehavior[option]); - onImageBehaviourChange?.(ImageBehavior[option]); - } - }} - /> - ))} -
      - )} -
      - ); -}; diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/CommunityProfile/CommunityProfileForm/CommunityProfileForm.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/CommunityProfile/CommunityProfileForm/CommunityProfileForm.tsx index 3db9dd99067..0174f23e263 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/CommunityProfile/CommunityProfileForm/CommunityProfileForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/CommunityProfile/CommunityProfileForm/CommunityProfileForm.tsx @@ -21,7 +21,7 @@ import { import { CWCoverImageUploader, ImageBehavior, -} from 'views/components/component_kit/cw_cover_image_uploader'; +} from 'views/components/component_kit/CWCoverImageUploader'; import { CWIcon } from 'views/components/component_kit/cw_icons/cw_icon'; import { CWText } from 'views/components/component_kit/cw_text'; import { CWTextArea } from 'views/components/component_kit/cw_text_area'; @@ -292,13 +292,14 @@ const CommunityProfileForm = () => { /> + setIsProcessingProfileImage(isGenerating || isUploading) + } + label="Community Profile Image (Accepts JPG and PNG files)" />
      diff --git a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx index 996105e13c4..545b8c02ddc 100644 --- a/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx +++ b/packages/commonwealth/client/scripts/views/pages/CommunityManagement/Contests/ManageContest/steps/DetailsFormStep/DetailsFormStep.tsx @@ -12,7 +12,7 @@ import TokenFinder, { useTokenFinder } from 'views/components/TokenFinder'; import { CWCoverImageUploader, ImageBehavior, -} from 'views/components/component_kit/cw_cover_image_uploader'; +} from 'views/components/component_kit/CWCoverImageUploader'; import { CWDivider } from 'views/components/component_kit/cw_divider'; import { SelectList } from 'views/components/component_kit/cw_select_list'; import { CWText } from 'views/components/component_kit/cw_text'; @@ -363,13 +363,14 @@ const DetailsFormStep = ({ png)
      + setIsProcessingProfileImage(isGenerating || isUploading) + } name="contestImage" hookToForm - defaultImageBehaviour={ImageBehavior.Fill} - enableGenerativeAI + imageBehavior={ImageBehavior.Fill} + withAIImageGeneration />
      diff --git a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/CWCoverImageUploader.showcase.tsx b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/CWCoverImageUploader.showcase.tsx index 97fd4bd70bc..e065ae7f679 100644 --- a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/CWCoverImageUploader.showcase.tsx +++ b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/CWCoverImageUploader.showcase.tsx @@ -2,8 +2,10 @@ import { VALIDATION_MESSAGES } from 'client/scripts/helpers/formValidations/mess import { CWButton } from 'client/scripts/views/components/component_kit/new_designs/CWButton'; import { CWForm } from 'client/scripts/views/components/component_kit/new_designs/CWForm'; import React, { useState } from 'react'; -import { CWCoverImageUploader } from 'views/components/component_kit/CWCoverImageUploader'; -import { ImageBehavior } from 'views/components/component_kit/cw_cover_image_uploader'; +import { + CWCoverImageUploader, + ImageBehavior, +} from 'views/components/component_kit/CWCoverImageUploader'; import { CWText } from 'views/components/component_kit/cw_text'; import { z } from 'zod'; diff --git a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Inputs.showcase.tsx b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Inputs.showcase.tsx index a1469c994b7..3e06a4083c9 100644 --- a/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Inputs.showcase.tsx +++ b/packages/commonwealth/client/scripts/views/pages/ComponentsShowcase/components/Inputs.showcase.tsx @@ -1,7 +1,7 @@ import { ArrowCircleRight, MagnifyingGlass } from '@phosphor-icons/react'; import { notifySuccess } from 'controllers/app/notifications'; import React from 'react'; -import { CWCoverImageUploader } from 'views/components/component_kit/cw_cover_image_uploader'; +import { CWCoverImageUploader } from 'views/components/component_kit/CWCoverImageUploader'; import { CWText } from 'views/components/component_kit/cw_text'; import { CWTextArea } from 'views/components/component_kit/cw_text_area'; import { ValidationStatus } from 'views/components/component_kit/cw_validation_text'; @@ -179,11 +179,11 @@ const InputsShowcase = () => { Image upload { + onImageUploaded={(url: string) => { notifySuccess(`Image uploaded to ${url.slice(0, 18)}...`); }} - enableGenerativeAI - canSelectImageBehaviour={false} + withAIImageGeneration + canSelectImageBehavior={false} /> ); diff --git a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx index 839f642b7f0..592ae7c1029 100644 --- a/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx +++ b/packages/commonwealth/client/scripts/views/pages/LaunchToken/steps/TokenInformationStep/TokenInformationForm/TokenInformationForm.tsx @@ -15,7 +15,7 @@ import { useDebounce } from 'usehooks-ts'; import { CWCoverImageUploader, ImageBehavior, -} from 'views/components/component_kit/cw_cover_image_uploader'; +} from 'views/components/component_kit/CWCoverImageUploader'; import { CWLabel } from 'views/components/component_kit/cw_label'; import { CWTextArea } from 'views/components/component_kit/cw_text_area'; import { CWButton } from 'views/components/component_kit/new_designs/CWButton'; @@ -204,14 +204,15 @@ const TokenInformationForm = ({ /> + setIsProcessingProfileImage(isGenerating || isUploading) + } name="tokenImageURL" hookToForm - defaultImageBehaviour={ImageBehavior.Fill} - enableGenerativeAI + imageBehavior={ImageBehavior.Fill} + withAIImageGeneration /> {/* Action buttons */} diff --git a/packages/commonwealth/client/styles/components/component_kit/cw_cover_image_uploader.scss b/packages/commonwealth/client/styles/components/component_kit/cw_cover_image_uploader.scss deleted file mode 100644 index bf3611aff54..00000000000 --- a/packages/commonwealth/client/styles/components/component_kit/cw_cover_image_uploader.scss +++ /dev/null @@ -1,145 +0,0 @@ -@import '../../shared'; - -.CoverImageUploader { - width: 100%; - - display: flex; - flex-direction: column; - - .attach-zone { - cursor: pointer; - - min-height: 175px; - height: 100%; - width: 100%; - padding: 16px; - - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - - background-color: $neutral-25; - border: 1px solid $neutral-200; - border-radius: $border-radius-corners; - - background-size: cover; - background-repeat: no-repeat; - background-position: center; - - position: relative; - - &.hovered { - border: 1px solid $primary-500; - } - - &.success { - border: 1px solid $green-600; - } - - &.failure { - border-color: $rorange-600 !important; - } - - &.isUploading { - cursor: default; - } - - .pseudo-input { - max-height: 0; - max-width: 0; - } - - .attach-btn { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 16px; - color: $neutral-400; - - .circle-img { - height: 145px; - width: 145px; - object-fit: cover; - border-radius: 50%; - } - - .Icon { - fill: $neutral-400; - margin: 4px 0; - } - - .Text { - color: inherit; - } - - .upload-generate-text { - margin-top: 12px; - color: $neutral-500; - } - - .generate-btn { - margin-top: 16px; - - &:focus { - background-color: white !important; - } - - &:focus-within { - border-width: 1px !important; - padding: 0 !important; - margin: 3px !important; - margin-top: 16px !important; - } - } - } - - .cover-image-overlay { - align-items: center; - background: rgba(255, 255, 255, 0.5); - backdrop-filter: blur(5px); - border-radius: $border-radius-corners; - display: flex; - flex-direction: column; - height: 100%; - justify-content: center; - position: absolute; - width: 100%; - z-index: 1; - - .prompt-input { - width: 80%; - } - } - - .generate-btn { - margin-top: 16px; - } - - .icon-button-wrapper { - top: 8px; - right: 8px; - position: absolute; - } - - .retry-button { - bottom: 8px; - right: 8px; - position: absolute; - } - } - - .options { - display: flex; - flex-direction: column; - text-align: left; - gap: 4px; - margin-top: 18px; - - .cover-image-title { - color: $neutral-700 !important; - padding-bottom: 8px; - } - } -} From 5fbb86d64f378242ca735e9ded9e6aaf2535b437 Mon Sep 17 00:00:00 2001 From: Malik Zulqurnain Date: Tue, 22 Oct 2024 22:27:06 +0500 Subject: [PATCH 363/425] Fix import --- .../client/scripts/views/components/Profile/Profile.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/commonwealth/client/scripts/views/components/Profile/Profile.tsx b/packages/commonwealth/client/scripts/views/components/Profile/Profile.tsx index 2e689a09e00..b80346b0daa 100644 --- a/packages/commonwealth/client/scripts/views/components/Profile/Profile.tsx +++ b/packages/commonwealth/client/scripts/views/components/Profile/Profile.tsx @@ -9,7 +9,7 @@ import NewProfile from '../../../models/NewProfile'; import Thread from '../../../models/Thread'; import { CWText } from '../../components/component_kit/cw_text'; import { PageNotFound } from '../../pages/404'; -import { ImageBehavior } from '../component_kit/cw_cover_image_uploader'; +import { ImageBehavior } from '../component_kit/CWCoverImageUploader'; import CWCircleMultiplySpinner from '../component_kit/new_designs/CWCircleMultiplySpinner'; import type { CommentWithAssociatedThread } from './ProfileActivity'; import ProfileActivity from './ProfileActivity'; From 3c79e9dc89cec560077f6e2ec818a01cb7734798 Mon Sep 17 00:00:00 2001 From: rotorsoft Date: Tue, 22 Oct 2024 13:41:11 -0400 Subject: [PATCH 364/425] refactor get active threads --- libs/model/src/models/topic.ts | 2 +- .../src/thread/GetActiveThreads.query.ts | 77 +++++++++ libs/model/src/thread/index.ts | 1 + libs/schemas/src/queries/thread.schemas.ts | 9 ++ .../client/scripts/models/MinimumProfile.tsx | 2 +- .../controllers/server_threads_controller.ts | 12 -- .../get_active_threads.ts | 148 ------------------ .../routes/threads/get_threads_handler.ts | 11 +- 8 files changed, 96 insertions(+), 166 deletions(-) create mode 100644 libs/model/src/thread/GetActiveThreads.query.ts delete mode 100644 packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts diff --git a/libs/model/src/models/topic.ts b/libs/model/src/models/topic.ts index fa2289b9b30..5bdfd12b459 100644 --- a/libs/model/src/models/topic.ts +++ b/libs/model/src/models/topic.ts @@ -8,7 +8,7 @@ import type { ModelInstance } from './types'; export type TopicAttributes = z.infer & { // associations community?: CommunityAttributes; - threads?: ThreadAttributes[] | TopicAttributes['id'][]; + threads?: ThreadAttributes[]; }; export type TopicInstance = ModelInstance; diff --git a/libs/model/src/thread/GetActiveThreads.query.ts b/libs/model/src/thread/GetActiveThreads.query.ts new file mode 100644 index 00000000000..af1a9a8faa3 --- /dev/null +++ b/libs/model/src/thread/GetActiveThreads.query.ts @@ -0,0 +1,77 @@ +import { Query } from '@hicommonwealth/core'; +import * as schemas from '@hicommonwealth/schemas'; +import { models } from '../database'; + +export function GetActiveThreads(): Query { + return { + ...schemas.GetActiveThreads, + auth: [], + secure: false, + body: async ({ payload }) => { + const { community_id, threads_per_topic, withXRecentComments } = payload; + + const topThreadsByTopic = await models.Topic.findAll({ + where: { community_id }, + include: [ + { + model: models.Thread, + as: 'threads', + required: true, + order: [ + ['created_at', 'DESC'], + ['last_commented_on', 'DESC'], + ], + limit: threads_per_topic ?? 3, + include: [ + { + model: models.Address, + as: 'Address', + attributes: ['id', 'address', 'community_id'], + include: [ + { + model: models.User, + attributes: ['id', 'profile'], + }, + ], + }, + { model: models.Address, as: 'collaborators' }, + { model: models.Topic, as: 'topic', required: true }, + { + model: models.Comment, + limit: Math.min(withXRecentComments ?? 0, 10), // cap to 10 + order: [['created_at', 'DESC']], + attributes: [ + 'id', + 'address_id', + 'text', + 'created_at', + 'updated_at', + 'deleted_at', + 'marked_as_spam_at', + 'discord_meta', + 'content_url', + ], + include: [ + { + model: models.Address, + as: 'Address', + attributes: ['address'], + include: [ + { + model: models.User, + attributes: ['id', 'profile'], + }, + ], + }, + ], + }, + ], + }, + ], + }); + return topThreadsByTopic + .map((topic) => topic.toJSON().threads ?? []) + .flat(); + }, + }; +} diff --git a/libs/model/src/thread/index.ts b/libs/model/src/thread/index.ts index 343214bb3e2..134ce13719d 100644 --- a/libs/model/src/thread/index.ts +++ b/libs/model/src/thread/index.ts @@ -1,5 +1,6 @@ export * from './CreateThread.command'; export * from './CreateThreadReaction.command'; export * from './DeleteThread.command'; +export * from './GetActiveThreads.query'; export * from './GetThreads.query'; export * from './UpdateThread.command'; diff --git a/libs/schemas/src/queries/thread.schemas.ts b/libs/schemas/src/queries/thread.schemas.ts index 560793e6470..1c8da2d3c75 100644 --- a/libs/schemas/src/queries/thread.schemas.ts +++ b/libs/schemas/src/queries/thread.schemas.ts @@ -164,3 +164,12 @@ export const DEPRECATED_GetBulkThreads = z.object({ status: z.string().optional(), withXRecentComments: z.coerce.number().optional(), }); + +export const GetActiveThreads = { + input: z.object({ + community_id: z.string(), + threads_per_topic: z.coerce.number().min(0).max(10).optional(), + withXRecentComments: z.coerce.number().optional(), + }), + output: z.array(Thread), +}; diff --git a/packages/commonwealth/client/scripts/models/MinimumProfile.tsx b/packages/commonwealth/client/scripts/models/MinimumProfile.tsx index 41139d60d35..1ef8ef8c8b7 100644 --- a/packages/commonwealth/client/scripts/models/MinimumProfile.tsx +++ b/packages/commonwealth/client/scripts/models/MinimumProfile.tsx @@ -15,7 +15,7 @@ export function addressToUserProfile( address: z.infer, ): UserProfile { return { - userId: address.user_id!, + userId: address.user_id ?? address.User?.id ?? 0, avatarUrl: address.User?.profile.avatar_url ?? '', name: address.User?.profile.name ?? DEFAULT_NAME, address: address?.address, diff --git a/packages/commonwealth/server/controllers/server_threads_controller.ts b/packages/commonwealth/server/controllers/server_threads_controller.ts index 1386b768d83..34ccb787f97 100644 --- a/packages/commonwealth/server/controllers/server_threads_controller.ts +++ b/packages/commonwealth/server/controllers/server_threads_controller.ts @@ -9,11 +9,6 @@ import { CreateThreadPollResult, __createThreadPoll, } from './server_threads_methods/create_thread_poll'; -import { - GetActiveThreadsOptions, - GetActiveThreadsResult, - __getActiveThreads, -} from './server_threads_methods/get_active_threads'; import { GetThreadPollsOptions, GetThreadPollsResult, @@ -43,13 +38,6 @@ export class ServerThreadsController { return __getThreadsById.call(this, options); } - async getActiveThreads( - this: ServerThreadsController, - options: GetActiveThreadsOptions, - ): Promise { - return __getActiveThreads.call(this, options); - } - async searchThreads( this: ServerThreadsController, options: SearchThreadsOptions, diff --git a/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts b/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts deleted file mode 100644 index 5627bcf4e37..00000000000 --- a/packages/commonwealth/server/controllers/server_threads_methods/get_active_threads.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { ThreadAttributes, TopicAttributes } from '@hicommonwealth/model'; -import { Includeable, WhereOptions } from 'sequelize'; -import { ServerThreadsController } from '../server_threads_controller'; - -const MIN_THREADS_PER_TOPIC = 0; -const MAX_THREADS_PER_TOPIC = 10; - -export type GetActiveThreadsOptions = { - communityId: string; - threadsPerTopic: number; - withXRecentComments?: number; -}; - -export type GetActiveThreadsResult = ThreadAttributes[]; - -export async function __getActiveThreads( - this: ServerThreadsController, - { - communityId, - threadsPerTopic, - withXRecentComments = 0, - }: GetActiveThreadsOptions, -): Promise { - const allThreads = []; - if ( - !threadsPerTopic || - Number.isNaN(threadsPerTopic) || - threadsPerTopic < MIN_THREADS_PER_TOPIC || - threadsPerTopic > MAX_THREADS_PER_TOPIC - ) { - threadsPerTopic = 3; - } - - const communityWhere: WhereOptions = { - community_id: communityId, - }; - const communityTopics = await this.models.Topic.findAll({ - where: communityWhere, - }); - - const threadInclude: Includeable[] = [ - { - model: this.models.Address, - as: 'Address', - attributes: ['id', 'address', 'community_id'], - include: [ - { - model: this.models.User, - attributes: ['id', 'profile'], - }, - ], - }, - { model: this.models.Address, as: 'collaborators' }, - { model: this.models.Topic, as: 'topic', required: true }, - ]; - - if (withXRecentComments) { - threadInclude.push({ - model: this.models.Comment, - limit: withXRecentComments > 10 ? 10 : withXRecentComments, // cap to 10, - order: [['created_at', 'DESC']], - attributes: [ - 'id', - 'address_id', - 'text', - 'created_at', - 'updated_at', - 'deleted_at', - 'marked_as_spam_at', - 'discord_meta', - 'content_url', - ], - include: [ - { - model: this.models.Address, - as: 'Address', - attributes: ['address'], - include: [ - { - model: this.models.User, - attributes: ['id', 'profile'], - }, - ], - }, - ], - }); - } - - let allRecentTopicThreadsRaw = []; - // @ts-expect-error StrictNullChecks - allRecentTopicThreadsRaw = await Promise.all( - communityTopics.map(async (topic) => { - return await this.models.Thread.findAll({ - where: { - topic_id: topic.id, - }, - include: threadInclude, - limit: threadsPerTopic, - order: [ - ['created_at', 'DESC'], - ['last_commented_on', 'DESC'], - ], - }); - }), - ); - - allRecentTopicThreadsRaw = allRecentTopicThreadsRaw.flat(); - - const allRecentTopicThreads = allRecentTopicThreadsRaw.map((thread) => { - // @ts-expect-error StrictNullChecks - const tempThread = thread.toJSON(); - tempThread.numberOfComments = tempThread.comment_count || 0; - if (tempThread.Address.User) { - tempThread.user_id = tempThread.Address.User.id; - tempThread.profile_name = tempThread.Address.User.profile.name; - tempThread.avatar_url = tempThread.Address.User.profile.avatar_url; - delete tempThread.Address.User; - } - - if (withXRecentComments) { - tempThread.recentComments = (tempThread.Comments || []).map((c) => { - const temp = { - ...c, - address: c?.Address?.address || '', - }; - if (temp.Address) { - temp.user_id = temp.Address.User?.id; - temp.profile_name = temp.Address.User?.profile.name; - temp.profile_avatar = temp.Address.User?.profile.avatar_url; - delete temp.Address; - } - return temp; - }); - delete tempThread.Comments; - } - return tempThread; - }); - - communityTopics.forEach((topic) => { - const threadsWithCommentsCount = allRecentTopicThreads.filter( - (thread) => thread.topic_id === topic.id, - ); - // @ts-expect-error StrictNullChecks - allThreads.push(...(threadsWithCommentsCount || [])); - }); - - return allThreads; -} diff --git a/packages/commonwealth/server/routes/threads/get_threads_handler.ts b/packages/commonwealth/server/routes/threads/get_threads_handler.ts index 84794ffa161..18f26c4953b 100644 --- a/packages/commonwealth/server/routes/threads/get_threads_handler.ts +++ b/packages/commonwealth/server/routes/threads/get_threads_handler.ts @@ -147,10 +147,13 @@ export const getThreadsHandler = async ( const { threads_per_topic, withXRecentComments } = req.query as ActiveThreadsRequestQuery; - const activeThreads = await controllers.threads.getActiveThreads({ - communityId: community_id, - threadsPerTopic: parseInt(threads_per_topic, 10), - withXRecentComments, + const activeThreads = await query(Thread.GetActiveThreads(), { + actor: { user: { email: '' } }, + payload: { + community_id, + threads_per_topic: parseInt(threads_per_topic, 10), + withXRecentComments, + }, }); return success(res, activeThreads); } From 08eeecd2c7fe9f61364b43d58f9c3ac9bbe2937e Mon Sep 17 00:00:00 2001 From: israellund Date: Tue, 22 Oct 2024 13:42:13 -0400 Subject: [PATCH 365/425] editor no longer adds extras lines after pressing enter --- .../styles/components/react_quill/markdown_formatted_text.scss | 1 - .../styles/components/react_quill/react_quill_editor.scss | 2 -- 2 files changed, 3 deletions(-) diff --git a/packages/commonwealth/client/styles/components/react_quill/markdown_formatted_text.scss b/packages/commonwealth/client/styles/components/react_quill/markdown_formatted_text.scss index ae435c818d0..7653262c422 100644 --- a/packages/commonwealth/client/styles/components/react_quill/markdown_formatted_text.scss +++ b/packages/commonwealth/client/styles/components/react_quill/markdown_formatted_text.scss @@ -7,7 +7,6 @@ position: relative; word-break: break-word; - white-space: pre-wrap; @include formatted-text(); @include collapsible(); @include hidden-formatting(); diff --git a/packages/commonwealth/client/styles/components/react_quill/react_quill_editor.scss b/packages/commonwealth/client/styles/components/react_quill/react_quill_editor.scss index 0abe41097f9..3a4398b0459 100644 --- a/packages/commonwealth/client/styles/components/react_quill/react_quill_editor.scss +++ b/packages/commonwealth/client/styles/components/react_quill/react_quill_editor.scss @@ -14,8 +14,6 @@ .MarkdownPreview { min-height: 255px; padding: 16px; - white-space: pre-wrap; /* This will render single newlines as line breaks */ - word-wrap: break-word; } .CustomQuillToolbar { From b8bee5a04b63263a087bde0d19376acf4573703d Mon Sep 17 00:00:00 2001 From: Ryan Bennett Date: Tue, 22 Oct 2024 10:51:25 -0700 Subject: [PATCH 366/425] prevent voting with zero token balance in erc20 topic --- libs/model/src/services/stakeHelper.ts | 8 +++++++- .../components/ReactionButton/CommentReactionButton.tsx | 8 +++++++- .../ThreadOptions/ReactionButton/ReactionButton.tsx | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/libs/model/src/services/stakeHelper.ts b/libs/model/src/services/stakeHelper.ts index 40b35bf874d..c7d0af6dd1a 100644 --- a/libs/model/src/services/stakeHelper.ts +++ b/libs/model/src/services/stakeHelper.ts @@ -77,8 +77,14 @@ export async function getVotingWeight( }, cacheRefresh: true, }); + + const tokenBalance = balances[address]; + + if (BigNumber.from(tokenBalance).lte(0)) + throw new InvalidState('Insufficient token balance'); + const result = commonProtocol.calculateVoteWeight( - balances[address], + tokenBalance, topic.vote_weight_multiplier!, ); // only count full ERC20 tokens diff --git a/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx b/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx index 0206da4c7a4..b533a5c2086 100644 --- a/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx +++ b/packages/commonwealth/client/scripts/views/components/ReactionButton/CommentReactionButton.tsx @@ -105,8 +105,14 @@ export const CommentReactionButton = ({ checkForSessionKeyRevalidationErrors(err); return; } + if ((err.message as string)?.includes('Insufficient token balance')) { + notifyError( + 'You must have the requisite tokens to upvote in this topic', + ); + } else { + notifyError('Failed to save reaction'); + } console.error(err?.message); - notifyError('Failed to save reaction'); }); } }; diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx index 82171497502..f16298c6dd8 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/ThreadCard/ThreadOptions/ReactionButton/ReactionButton.tsx @@ -121,7 +121,13 @@ export const ReactionButton = ({ checkForSessionKeyRevalidationErrors(e); return; } - notifyError('Failed to upvote'); + if ((e.message as string)?.includes('Insufficient token balance')) { + notifyError( + 'You must have the requisite tokens to upvote in this topic', + ); + } else { + notifyError('Failed to upvote'); + } console.error(e?.response?.data?.error || e?.message); }); } From 6dba1992bb6f048918b6e68461403f7784790919 Mon Sep 17 00:00:00 2001 From: Salman Date: Tue, 22 Oct 2024 22:53:10 +0500 Subject: [PATCH 367/425] fix-scrolling-behaviour --- .../views/pages/discussions/CommentTree/CommentTree.tsx | 9 ++------- .../scripts/views/pages/view_thread/ViewThreadPage.tsx | 8 ++++---- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx index 81342306fbd..99e15ea45f2 100644 --- a/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx +++ b/packages/commonwealth/client/scripts/views/pages/discussions/CommentTree/CommentTree.tsx @@ -6,7 +6,7 @@ import { SessionKeyError } from 'controllers/server/sessions'; import { GetThreadActionTooltipTextResponse } from 'helpers/threads'; import { CommentsFeaturedFilterTypes } from 'models/types'; import type { DeltaStatic } from 'quill'; -import React, { MutableRefObject, useEffect, useRef, useState } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import app from 'state'; import { useDeleteCommentMutation, @@ -46,7 +46,6 @@ type CommentsTreeAttrs = { canComment: boolean; commentSortType: CommentsFeaturedFilterTypes; disabledActionsTooltipText?: GetThreadActionTooltipTextResponse; - commentsRef?: MutableRefObject; }; export const CommentTree = ({ @@ -64,7 +63,6 @@ export const CommentTree = ({ canComment, commentSortType, disabledActionsTooltipText, - commentsRef, }: CommentsTreeAttrs) => { const urlParams = new URLSearchParams(location.search); const focusCommentsParam = urlParams.get('focusComments') === 'true'; @@ -458,10 +456,7 @@ export const CommentTree = ({ return ( -
      +
      {comment.threadLevel > 0 && (
      {Array(comment.threadLevel) diff --git a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx index 6a08312c76b..2393d58dc71 100644 --- a/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx +++ b/packages/commonwealth/client/scripts/views/pages/view_thread/ViewThreadPage.tsx @@ -371,11 +371,11 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { : getMetaDescription(thread?.body || ''); const ogImageUrl = app?.chain?.meta?.icon_url || ''; - const ScrollToLastComment = () => { + const scrollToFirstComment = () => { if (commentsRef?.current) { commentsRef.current.scrollIntoView({ behavior: 'smooth', - block: 'center', + block: 'start', }); } }; @@ -468,7 +468,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { isAuthor || !!hasWebLinks } - onCommentClick={ScrollToLastComment} + onCommentClick={scrollToFirstComment} // @ts-expect-error isSpamThread={!!thread.markedAsSpamAt} title={ @@ -643,7 +643,7 @@ const ViewThreadPage = ({ identifier }: ViewThreadPageProps) => { comments={ <> {comments.length > 0 && ( -
      +